Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r54803 - in sandbox/SOC/2009/fusion/boost/fusion/adapted: . detail detail/array detail/boost_tuple detail/mpl detail/std_pair detail/struct
From: mr.chr.schmidt_at_[hidden]
Date: 2009-07-08 15:25:01


Author: cschmidt
Date: 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
New Revision: 54803
URL: http://svn.boost.org/trac/boost/changeset/54803

Log:
cleanup
Added:
   sandbox/SOC/2009/fusion/boost/fusion/adapted/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/array.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/array_iterator.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/category_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/is_sequence_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/is_view_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/size_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/tag_of.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/value_at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/is_sequence_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/is_view_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/size_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/advance_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/begin_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/deref_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/distance_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/empty_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/equal_to_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/get_mpl_it.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/has_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/is_sequence_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/is_view_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/next_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/prior_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/size_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/value_at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/value_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/begin_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/category_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/end_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/is_sequence_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/is_view_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/size_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/std_pair_iterator.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/tag_of.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/value_at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_assoc_struct.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_struct.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/has_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/is_sequence_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/is_view_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/size_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/struct_iterator.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/std_pair.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp (contents, props changed)

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/array.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/array.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ARRAY_HPP
+#define BOOST_FUSION_ADAPTED_ARRAY_HPP
+
+#include <boost/fusion/support/ref.hpp>
+
+#include <boost/fusion/adapted/detail/array/array_iterator.hpp>
+#include <boost/fusion/adapted/detail/array/tag_of.hpp>
+#include <boost/fusion/adapted/detail/array/is_view_impl.hpp>
+#include <boost/fusion/adapted/detail/array/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/detail/array/category_of_impl.hpp>
+#include <boost/fusion/adapted/detail/array/begin_impl.hpp>
+#include <boost/fusion/adapted/detail/array/end_impl.hpp>
+#include <boost/fusion/adapted/detail/array/size_impl.hpp>
+#include <boost/fusion/adapted/detail/array/at_impl.hpp>
+#include <boost/fusion/adapted/detail/array/value_at_impl.hpp>
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_BOOST_TUPLE_HPP
+#define BOOST_FUSION_ADAPTED_BOOST_TUPLE_HPP
+
+#include <boost/fusion/adapted/boost_tuple/tag_of.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/end_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/size_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/at_impl.hpp>
+#include <boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp>
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/array_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/array_iterator.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,126 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_ARRAY_ITERATOR_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_ARRAY_ITERATOR_HPP
+
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/iterator/iterator_facade.hpp>
+
+#include <cstddef>
+#include <boost/config.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/minus.hpp>
+
+namespace boost { namespace fusion
+{
+ struct random_access_traversal_tag;
+
+ template <typename ArrayRef, int Pos>
+ struct array_iterator
+ : iterator_facade<
+ array_iterator<ArrayRef, Pos>
+ , random_access_traversal_tag
+ >
+ {
+ //BOOST_FUSION_INDEX_CHECK(Pos, Array::static_size+1);
+
+ template <typename ItRef>
+ struct value_of
+ {
+ typedef typename
+ detail::remove_reference<
+ typename detail::remove_reference<ItRef>::type::array_type
+ >::type::value_type
+ type;
+ };
+
+ template <typename ItRef>
+ struct deref
+ {
+ typedef typename detail::remove_reference<ItRef>::type it;
+
+ typedef typename
+ detail::result_of_forward_as<
+ typename it::array_type
+ , typename detail::remove_reference<
+ typename it::array_type
+ >::type::value_type
+ >::type
+ type;
+
+ static type
+ call(ItRef it)
+ {
+ return (*it.array)[it::index::value];
+ }
+ };
+
+ template <typename ItRef, typename N>
+ struct advance
+ {
+ typedef typename detail::remove_reference<ItRef>::type it;
+
+ typedef
+ array_iterator<
+ typename it::array_type
+ , it::index::value + N::value
+ >
+ type;
+
+ static type
+ call(ItRef it)
+ {
+ return type(*it.array,0);
+ }
+ };
+
+ template <typename ItRef>
+ struct next
+ : advance<ItRef, mpl::int_<1> >
+ {};
+
+ template <typename ItRef>
+ struct prior
+ : advance<ItRef, mpl::int_<-1> >
+ {};
+
+ template <typename It1Ref, typename It2Ref>
+ struct distance
+ : mpl::minus<
+ typename detail::remove_reference<It2Ref>::type::index
+ , typename detail::remove_reference<It1Ref>::type::index
+ >
+ {};
+
+ typedef mpl::int_<Pos> index;
+ typedef ArrayRef array_type;
+
+ template<typename OtherZipViewIt>
+ array_iterator(OtherZipViewIt const& it)
+ : array(it.array)
+ {}
+
+ array_iterator(ArrayRef a, int)
+ : array(&a)
+ {}
+
+ template<typename OtherZipViewIt>
+ array_iterator&
+ operator=(OtherZipViewIt const& it)
+ {
+ array=it.array;
+ return *this;
+ }
+
+ typename detail::remove_reference<ArrayRef>::type* array;
+ };
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_AT_IMPL_HPP
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct at_impl;
+
+ template<>
+ struct at_impl<array_tag>
+ {
+ template<typename SeqRef, typename N>
+ struct apply
+ {
+ typedef typename
+ detail::result_of_forward_as<
+ SeqRef
+ , typename detail::remove_reference<
+ SeqRef
+ >::type::value_type
+ >::type
+ type;
+
+ static type
+ call(SeqRef seq)
+ {
+ return seq[N::value];
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_BEGIN_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_BEGIN_IMPL_HPP
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<array_tag>
+ {
+ template <typename SeqRef>
+ struct apply
+ {
+ typedef array_iterator<SeqRef, 0> type;
+
+ static type
+ call(SeqRef seq)
+ {
+ return type(seq,0);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/category_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/category_of_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,36 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_CATEGORY_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_CATEGORY_OF_IMPL_HPP
+
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+ struct random_access_traversal_tag;
+
+ namespace extension
+ {
+ template<typename SeqRef>
+ struct category_of_impl;
+
+ template<>
+ struct category_of_impl<array_tag>
+ {
+ template<typename SeqRef>
+ struct apply
+ {
+ typedef random_access_traversal_tag type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_END_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_END_IMPL_HPP
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<array_tag>
+ {
+ template <typename SeqRef>
+ struct apply
+ {
+ typedef
+ array_iterator<
+ SeqRef
+ , detail::remove_reference<
+ SeqRef
+ >::type::static_size
+ >
+ type;
+
+ static type
+ call(SeqRef seq)
+ {
+ return type(seq,0);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/is_sequence_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_IS_SEQUENCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_IS_SEQUENCE_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_sequence_impl;
+
+ template<>
+ struct is_sequence_impl<array_tag>
+ {
+ template<typename SeqRef>
+ struct apply
+ : mpl::true_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/is_view_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/is_view_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_IS_VIEW_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_IS_VIEW_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct array_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_view_impl;
+
+ template<>
+ struct is_view_impl<array_tag>
+ {
+ template<typename SeqRef>
+ struct apply
+ : mpl::false_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/size_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/size_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_SIZE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_SIZE_IMPL_HPP
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct size_impl;
+
+ template<>
+ struct size_impl<array_tag>
+ {
+ template<typename SeqRef>
+ struct apply
+ : mpl::int_<detail::remove_reference<SeqRef>::type::static_size>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/tag_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/tag_of.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_TAG_OF_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_TAG_OF_HPP
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#include <cstddef>
+
+namespace boost
+{
+ template<typename T, std::size_t N>
+ class array;
+}
+
+namespace boost { namespace fusion
+{
+ struct array_tag;
+
+ namespace traits
+ {
+#define TAG_OF_SPECIALIZATION(COMBINATION)\
+ template<typename T, std::size_t N>\
+ struct tag_of<boost::array<T,N> COMBINATION>\
+ {\
+ typedef array_tag type;\
+ };
+
+ TAG_OF_SPECIALIZATION(BOOST_PP_EMPTY());
+ BOOST_FUSION_ALL_CV_REF_COMBINATIONS(TAG_OF_SPECIALIZATION)
+
+#undef TAG_OF_SPECIALIZATION
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/value_at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_VALUE_AT_IMPL_HPP
+
+namespace boost { namespace fusion {
+
+ struct array_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct value_at_impl;
+
+ template <>
+ struct value_at_impl<array_tag>
+ {
+ template <typename SeqRef, typename N>
+ struct apply
+ {
+ typedef typename SeqRef::value_type type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_AT_IMPL_HPP
+
+#include <boost/tuple/tuple.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct at_impl;
+
+ template <>
+ struct at_impl<boost_tuple_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ typedef typename
+ tuples::element<N::value, Sequence>::type
+ element;
+
+ typedef typename
+ mpl::if_<
+ is_const<Sequence>
+ , typename tuples::access_traits<element>::const_type
+ , typename tuples::access_traits<element>::non_const_type
+ >::type
+ type;
+
+ static type
+ call(Sequence& seq)
+ {
+ return tuples::get<N::value>(seq);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,40 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BEGIN_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BEGIN_IMPL_HPP
+
+#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<boost_tuple_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef boost_tuple_iterator<Sequence> type;
+
+ static type
+ call(Sequence& v)
+ {
+ return type(v);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,148 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BOOST_TUPLE_ITERATOR_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BOOST_TUPLE_ITERATOR_HPP
+
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/tuple/tuple.hpp>
+
+namespace boost { namespace fusion
+{
+ struct forward_traversal_tag;
+
+ namespace detail
+ {
+ template <typename T>
+ struct boost_tuple_is_empty : mpl::false_ {};
+
+ template <>
+ struct boost_tuple_is_empty<tuples::null_type> : mpl::true_ {};
+
+ template <>
+ struct boost_tuple_is_empty<tuples::null_type const> : mpl::true_ {};
+
+ template <>
+ struct boost_tuple_is_empty<tuples::tuple<> > : mpl::true_ {};
+
+ template <>
+ struct boost_tuple_is_empty<tuples::tuple<> const> : mpl::true_ {};
+ }
+
+ template <typename Cons = tuples::null_type>
+ struct boost_tuple_iterator
+ : iterator_facade<boost_tuple_iterator<Cons>, forward_traversal_tag>
+ {
+ typedef Cons cons_type;
+
+ explicit boost_tuple_iterator(Cons& cons)
+ : cons(cons) {}
+ Cons& cons;
+
+ template <typename Iterator>
+ struct value_of : mpl::identity<typename Iterator::cons_type::head_type> {};
+
+ template <typename Iterator>
+ struct deref
+ {
+ typedef typename value_of<Iterator>::type element;
+
+ typedef typename
+ mpl::if_<
+ is_const<typename Iterator::cons_type>
+ , typename tuples::access_traits<element>::const_type
+ , typename tuples::access_traits<element>::non_const_type
+ >::type
+ type;
+
+ static type
+ call(Iterator const& iter)
+ {
+ return iter.cons.get_head();
+ }
+ };
+
+ template <typename Iterator>
+ struct next
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::tail_type tail_type;
+
+ typedef boost_tuple_iterator<
+ typename mpl::eval_if<
+ is_const<cons_type>
+ , add_const<tail_type>
+ , mpl::identity<tail_type>
+ >::type>
+ type;
+
+ static type
+ call(Iterator const& iter)
+ {
+ return type(iter.cons.get_tail());
+ }
+ };
+ };
+
+ template <typename Null>
+ struct boost_tuple_null_iterator
+ : iterator_facade<boost_tuple_iterator<Null>, forward_traversal_tag>
+ {
+ typedef Null cons_type;
+
+ template <typename I1, typename I2>
+ struct equal_to
+ : mpl::or_<
+ is_same<I1, I2>
+ , mpl::and_<
+ detail::boost_tuple_is_empty<typename I1::cons_type>
+ , detail::boost_tuple_is_empty<typename I2::cons_type>
+ >
+ >
+ {};
+ };
+
+ template <>
+ struct boost_tuple_iterator<tuples::null_type>
+ : boost_tuple_null_iterator<tuples::null_type>
+ {
+ template <typename Cons>
+ explicit boost_tuple_iterator(Cons const&) {}
+ };
+
+ template <>
+ struct boost_tuple_iterator<tuples::null_type const>
+ : boost_tuple_null_iterator<tuples::null_type const>
+ {
+ template <typename Cons>
+ explicit boost_tuple_iterator(Cons const&) {}
+ };
+
+ template <>
+ struct boost_tuple_iterator<tuples::tuple<> >
+ : boost_tuple_null_iterator<tuples::tuple<> >
+ {
+ template <typename Cons>
+ explicit boost_tuple_iterator(Cons const&) {}
+ };
+
+ template <>
+ struct boost_tuple_iterator<tuples::tuple<> const>
+ : boost_tuple_null_iterator<tuples::tuple<> const>
+ {
+ template <typename Cons>
+ explicit boost_tuple_iterator(Cons const&) {}
+ };
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_CATEGORY_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_CATEGORY_OF_IMPL_HPP
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+ struct forward_traversal_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct category_of_impl;
+
+ template<>
+ struct category_of_impl<boost_tuple_tag>
+ {
+ template<typename T>
+ struct apply
+ {
+ typedef forward_traversal_tag type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_END_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_END_IMPL_HPP
+
+#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace tuples
+{
+ struct null_type;
+}}
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<boost_tuple_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef
+ boost_tuple_iterator<
+ typename mpl::if_<
+ is_const<Sequence>
+ , tuples::null_type const
+ , tuples::null_type
+ >::type
+ >
+ type;
+
+ static type
+ call(Sequence& seq)
+ {
+ return type(seq);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/is_sequence_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_IS_SEQUENCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_IS_SEQUENCE_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_sequence_impl;
+
+ template<>
+ struct is_sequence_impl<boost_tuple_tag>
+ {
+ template<typename Sequence>
+ struct apply
+ : mpl::true_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/is_view_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/is_view_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_IS_VIEW_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_IS_VIEW_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_view_impl;
+
+ template<>
+ struct is_view_impl<boost_tuple_tag>
+ {
+ template<typename T>
+ struct apply
+ : mpl::false_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/size_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/size_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_SIZE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_SIZE_IMPL_HPP
+
+#include <boost/tuple/tuple.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct size_impl;
+
+ template <>
+ struct size_impl<boost_tuple_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ : mpl::int_<tuples::length<Sequence>::value>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_TAG_OF_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_TAG_OF_HPP
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+
+namespace boost { namespace tuples
+{
+ struct null_type;
+
+ template <
+ class T0, class T1, class T2, class T3, class T4,
+ class T5, class T6, class T7, class T8, class T9
+ >
+ class tuple;
+
+ template <class Head, class Tail>
+ struct cons;
+}}
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace traits
+ {
+ template <
+ class T0, class T1, class T2, class T3, class T4,
+ class T5, class T6, class T7, class T8, class T9
+ >
+ struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
+ {
+ typedef boost_tuple_tag type;
+ };
+
+ template <class Head, class Tail>
+ struct tag_of<tuples::cons<Head, Tail> >
+ {
+ typedef boost_tuple_tag type;
+ };
+
+ template <>
+ struct tag_of<tuples::null_type>
+ {
+ typedef boost_tuple_tag type;
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_VALUE_AT_IMPL_HPP
+
+#include <boost/tuple/tuple.hpp>
+
+namespace boost { namespace fusion
+{
+ struct boost_tuple_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct value_at_impl;
+
+ template <>
+ struct value_at_impl<boost_tuple_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ : tuples::element<N::value, Sequence>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/advance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/advance_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_ADVANCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_ADVANCE_IMPL_HPP
+
+#include <boost/mpl/advance.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct advance_impl;
+
+ template <>
+ struct advance_impl<mpl_iterator_tag>
+ {
+ template <typename ItRef, typename N>
+ struct apply
+ {
+ typedef
+ mpl_iterator<
+ typename mpl::advance<
+ typename detail::identity<ItRef>::type
+ , N
+ >::type
+ >
+ type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,43 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_AT_IMPL_HPP
+
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct at_impl;
+
+ template <>
+ struct at_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef, typename N>
+ struct apply
+ {
+ typedef typename
+ mpl::at<typename detail::identity<SeqRef>::type, N>::type
+ type;
+
+ static type
+ call(SeqRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/begin_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_BEGIN_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_BEGIN_IMPL_HPP
+
+#include <boost/mpl/begin.hpp>
+
+namespace boost { namespace fusion {
+
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef>
+ struct apply
+ {
+ typedef
+ mpl_iterator<
+ typename mpl::begin<
+ typename detail::identity<SeqRef>::type
+ >::type
+ >
+ type;
+
+ static type
+ call(SeqRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_CATEGORY_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_CATEGORY_OF_IMPL_HPP
+
+#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
+
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/is_sequence.hpp>
+
+namespace boost { namespace fusion {
+
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct category_of_impl;
+
+ template<>
+ struct category_of_impl<mpl_sequence_tag>
+ {
+ template<typename SeqRef>
+ struct apply
+ {
+ //TODO get_category?
+ typedef typename
+ detail::mpl_iterator_category<
+ typename mpl::begin<
+ typename detail::identity<SeqRef>::type
+ >::type::category
+ >::type
+ type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/deref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/deref_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,42 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_DEREF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_DEREF_IMPL_HPP
+
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<mpl_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef typename
+ mpl::deref<typename detail::identity<ItRef>::type>::type
+ type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/distance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/distance_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_DISTANCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_DISTANCE_IMPL_HPP
+
+#include <boost/fusion/adapted/detail/mpl/get_mpl_it.hpp>
+
+#include <boost/mpl/distance.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct distance_to_impl;
+
+ template <>
+ struct distance_to_impl<mpl_iterator_tag>
+ {
+ template <typename I1Ref, typename I2Ref>
+ struct apply
+ : mpl::distance<
+ typename detail::identity<I1Ref>::type
+ , typename detail::get_mpl_it<
+ typename detail::identity<I2Ref>::type
+ >::type
+ >
+ {
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/empty_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/empty_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_EMPTY_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_EMPTY_IMPL_HPP
+
+#include <boost/mpl/empty.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct empty_impl;
+
+ template <>
+ struct empty_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef>
+ struct apply
+ : mpl::empty<typename detail::identity<SeqRef>::type>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_END_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_END_IMPL_HPP
+
+#include <boost/mpl/end.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef>
+ struct apply
+ {
+ typedef
+ mpl_iterator<
+ typename mpl::end<
+ typename detail::identity<SeqRef>::type
+ >::type
+ >
+ type;
+
+ static type
+ call(SeqRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/equal_to_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/equal_to_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_EQUAL_TO_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_EQUAL_TO_IMPL_HPP
+
+#include <boost/fusion/adapted/detail/mpl/get_mpl_it.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct equal_to_impl;
+
+ template <>
+ struct equal_to_impl<mpl_iterator_tag>
+ {
+ template <typename I1Ref, typename I2Ref>
+ struct apply
+ : is_same<
+ typename detail::identity<I1Ref>::type
+ , typename detail::get_mpl_it<
+ typename detail::identity<I2Ref>::type
+ >::type
+ >
+ {
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/get_mpl_it.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/get_mpl_it.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,24 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_FUSION_ADAPTED_MPL_DETAIL_GET_MPL_IT_HPP
+#define BOOST_FUSION_ADAPTED_MPL_DETAIL_GET_MPL_IT_HPP
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename It, typename Active = void>
+ struct get_mpl_it
+ {
+ typedef It type;
+ };
+
+ template <typename It>
+ struct get_mpl_it<It, typename It::void_>
+ {
+ typedef typename It::it_type type;
+ };
+}}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/has_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/has_key_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_HAS_KEY_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_HAS_KEY_IMPL_HPP
+
+#include <boost/mpl/has_key.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct has_key_impl;
+
+ template <>
+ struct has_key_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef, typename Key>
+ struct apply
+ : mpl::has_key<typename detail::identity<SeqRef>::type, Key>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/is_sequence_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_IS_SEQUENCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_IS_SEQUENCE_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_sequence_impl;
+
+ template<>
+ struct is_sequence_impl<mpl_sequence_tag>
+ {
+ template<typename T>
+ struct apply
+ : mpl::true_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/is_view_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/is_view_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_IS_VIEW_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_IS_VIEW_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_view_impl;
+
+ template<>
+ struct is_view_impl<mpl_sequence_tag>
+ {
+ template<typename T>
+ struct apply
+ : mpl::true_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,126 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_MPL_ITERATOR_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_MPL_ITERATOR_HPP
+
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/fusion/support/category_of.hpp>
+
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+
+namespace boost { namespace fusion
+{
+ template <typename It>
+ struct mpl_iterator
+ : iterator_facade<
+ mpl_iterator<It>
+ , typename traits::category_of<It>::type
+ >
+ {
+ //cschmidt: void typedef to enable fast SFINAE in equal_to_impl.hpp!
+ typedef void void_;
+
+ typedef It it_type;
+
+ template <typename ItRef>
+ struct value_of
+ : result_of::value_of<
+ typename detail::remove_reference<ItRef>::type::it_type
+ >
+ {};
+
+ template <typename It1Ref, typename It2Ref>
+ struct equal_to
+ : result_of::equal_to<
+ typename detail::remove_reference<It1Ref>::type::it_type
+ , It2Ref
+ >
+ {};
+
+ template <typename ItRef>
+ struct deref
+ {
+ typedef typename
+ detail::remove_reference<ItRef>::type::it_type
+ it_type;
+
+ typedef typename result_of::deref<it_type>::type type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+
+ template <typename ItRef>
+ struct next
+ {
+ typedef typename
+ detail::remove_reference<ItRef>::type::it_type
+ it_type;
+
+ typedef typename result_of::next<it_type>::type type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+
+ template <typename ItRef>
+ struct prior
+ {
+ typedef typename
+ detail::remove_reference<ItRef>::type::it_type
+ it_type;
+
+ typedef typename result_of::prior<it_type>::type type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+
+ template <typename ItRef, typename N>
+ struct advance
+ {
+ typedef typename
+ detail::remove_reference<ItRef>::type::it_type
+ it_type;
+
+ typedef typename fusion::result_of::advance<it_type,N>::type type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+
+ template <typename It1Ref, typename It2Ref>
+ struct distance
+ : result_of::distance<
+ typename detail::remove_reference<It1Ref>::type::it_type
+ , It2Ref
+ >
+
+ {};
+ };
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/next_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/next_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_NEXT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_NEXT_IMPL_HPP
+
+#include <boost/mpl/next.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<mpl_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef
+ mpl_iterator<
+ typename mpl::next<
+ typename detail::identity<ItRef>::type
+ >::type
+ >
+ type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/prior_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/prior_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_PRIOR_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_PRIOR_IMPL_HPP
+
+#include <boost/mpl/prior.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct prior_impl;
+
+ template <>
+ struct prior_impl<mpl_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef
+ mpl_iterator<
+ typename mpl::prior<
+ typename detail::identity<ItRef>::type
+ >::type
+ >
+ type;
+
+ static type
+ call(ItRef)
+ {
+ return type();
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/size_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/size_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_SIZE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_SIZE_IMPL_HPP
+
+#include <boost/mpl/size.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct size_impl;
+
+ template <>
+ struct size_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef>
+ struct apply
+ : mpl::size<typename detail::identity<SeqRef>::type>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/value_at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_VALUE_AT_IMPL_HPP
+
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_sequence_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct value_at_impl;
+
+ template <>
+ struct value_at_impl<mpl_sequence_tag>
+ {
+ template <typename SeqRef, typename N>
+ struct apply
+ : mpl::at<typename detail::identity<SeqRef>::type, N>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/value_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/value_of_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_MPL_VALUE_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_MPL_VALUE_OF_IMPL_HPP
+
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace fusion
+{
+ struct mpl_iterator_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct value_of_impl;
+
+ template <>
+ struct value_of_impl<mpl_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ : mpl::deref<typename detail::identity<ItRef>::type>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,74 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_AT_IMPL_HPP
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/assert.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct at_impl;
+
+ template <>
+ struct at_impl<std_pair_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ static int const n_value = N::value;
+ BOOST_FUSION_INDEX_CHECK(n_value, 2);
+
+ typedef typename
+ mpl::if_c<
+ (n_value == 0)
+ , typename Sequence::first_type
+ , typename Sequence::second_type
+ >
+ element;
+
+ typedef typename
+ mpl::eval_if<
+ is_const<Sequence>
+ , detail::cref_result<element>
+ , detail::ref_result<element>
+ >::type
+ type;
+
+ template <typename RT>
+ static RT get(Sequence& p, mpl::int_<0>)
+ {
+ return p.first;
+ }
+
+ template <typename RT>
+ static RT get(Sequence& p, mpl::int_<1>)
+ {
+ return p.second;
+ }
+
+ static type
+ call(Sequence& p)
+ {
+ return get<type>(p, N());
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/begin_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_BEGIN_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_BEGIN_IMPL_HPP
+
+#include <boost/fusion/adapted/std_pair/std_pair_iterator.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<std_pair_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef std_pair_iterator<Sequence, 0> type;
+
+ static type
+ call(Sequence& v)
+ {
+ return type(v);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/category_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/category_of_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,36 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_CATEGORY_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_CATEGORY_OF_IMPL_HPP
+
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+ struct random_access_traversal_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct category_of_impl;
+
+ template<>
+ struct category_of_impl<std_pair_tag>
+ {
+ template<typename T>
+ struct apply
+ {
+ typedef random_access_traversal_tag type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/end_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_END_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_END_IMPL_HPP
+
+#include <boost/fusion/adapted/std_pair/std_pair_iterator.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<std_pair_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef std_pair_iterator<Sequence, 2> type;
+
+ static type
+ call(Sequence& v)
+ {
+ return type(v);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/is_sequence_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_IS_SEQUENCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_IS_SEQUENCE_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_sequence_impl;
+
+ template<>
+ struct is_sequence_impl<std_pair_tag>
+ {
+ template<typename Sequence>
+ struct apply
+ : mpl::true_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/is_view_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/is_view_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_IS_VIEW_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_IS_VIEW_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_view_impl;
+
+ template<>
+ struct is_view_impl<std_pair_tag>
+ {
+ template<typename T>
+ struct apply
+ : mpl::false_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/size_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/size_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_SIZE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_SIZE_IMPL_HPP
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct size_impl;
+
+ template <>
+ struct size_impl<std_pair_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ : mpl::int_<2>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/std_pair_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/std_pair_iterator.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,126 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_STD_PAIR_ITERATOR_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_STD_PAIR_ITERATOR_HPP
+
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/fusion/support/assert.hpp>
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion
+{
+ struct random_access_traversal_tag;
+
+ template <typename Pair_, int N_>
+ struct std_pair_iterator
+ : iterator_facade<std_pair_iterator<Pair_, N_>, random_access_traversal_tag>
+ {
+ BOOST_FUSION_INDEX_CHECK(N_,2);
+
+ typedef mpl::int_<N_> index;
+ typedef Pair_ pair_type;
+
+ std_pair_iterator(Pair_& pair)
+ : pair(pair) {}
+ Pair_& pair;
+
+ template <typename Iterator>
+ struct value_of;
+
+ template <typename Pair>
+ struct value_of<std_pair_iterator<Pair, 0> >
+ : mpl::identity<typename Pair::first_type> {};
+
+ template <typename Pair>
+ struct value_of<std_pair_iterator<Pair, 1> >
+ : mpl::identity<typename Pair::second_type> {};
+
+ template <typename Iterator>
+ struct deref;
+
+ template <typename Pair>
+ struct deref<std_pair_iterator<Pair, 0> >
+ {
+ typedef typename
+ mpl::if_<
+ is_const<Pair>
+ , typename Pair::first_type const&
+ , typename Pair::first_type&
+ >::type
+ type;
+
+ static type
+ call(std_pair_iterator<Pair, 0> const& iter)
+ {
+ return iter.pair.first;
+ }
+ };
+
+ template <typename Pair>
+ struct deref<std_pair_iterator<Pair, 1> >
+ {
+ typedef typename
+ mpl::if_<
+ is_const<Pair>
+ , typename Pair::second_type const&
+ , typename Pair::second_type&
+ >::type
+ type;
+
+ static type
+ call(std_pair_iterator<Pair, 1> const& iter)
+ {
+ return iter.pair.second;
+ }
+ };
+
+ template <typename Iterator, typename N>
+ struct advance
+ {
+ typedef typename Iterator::index index;
+ typedef typename Iterator::pair_type pair_type;
+ typedef std_pair_iterator<pair_type, index::value + N::value> type;
+
+ static type
+ call(Iterator const& iter)
+ {
+ return type(iter.pair);
+ }
+ };
+
+ template <typename Iterator>
+ struct next : advance<Iterator, mpl::int_<1> > {};
+
+ template <typename Iterator>
+ struct prior : advance<Iterator, mpl::int_<-1> > {};
+
+ template <typename I1, typename I2>
+ struct distance : mpl::minus<typename I2::index, typename I1::index>
+ {
+ typedef typename
+ mpl::minus<
+ typename I2::index, typename I1::index
+ >::type
+ type;
+
+ static type
+ call(I1 const&, I2 const&)
+ {
+ return type();
+ }
+ };
+ };
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/tag_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/tag_of.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_TAG_OF_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_TAG_OF_HPP
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace traits
+ {
+ template<typename T1, typename T2>
+ struct tag_of<std::pair<T1, T2> >
+ {
+ typedef std_pair_tag type;
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/std_pair/value_at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STD_PAIR_VALUE_AT_IMPL_HPP
+
+#include <boost/fusion/support/assert.hpp>
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion {
+
+ struct std_pair_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct value_at_impl;
+
+ template <>
+ struct value_at_impl<std_pair_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ static int const n_value = N::value;
+ BOOST_FUSION_INDEX_CHECK(n_value,2);
+
+ typedef typename
+ mpl::if_c<
+ (n_value == 0)
+ , typename Sequence::first_type
+ , typename Sequence::second_type
+ >::type
+ type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_assoc_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_assoc_struct.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,95 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_ADAPT_ASSOC_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_ADAPT_ASSOC_STRUCT_HPP
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+#include <boost/fusion/adapted/struct/extension.hpp>
+#include <boost/fusion/adapted/struct/struct_iterator.hpp>
+#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/end_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/size_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/has_key_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/at_key_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_key_impl.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion { namespace extension {
+ template<typename Struct, typename Key>
+ struct struct_assoc_member;
+}}}
+
+
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT(name, bseq) \
+ BOOST_FUSION_ADAPT_ASSOC_STRUCT_I( \
+ name, BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_X bseq, 0)) \
+ /***/
+
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_X(x, y, z) ((x, y, z)) BOOST_FUSION_ADAPT_ASSOC_STRUCT_Y
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_Y(x, y, z) ((x, y, z)) BOOST_FUSION_ADAPT_ASSOC_STRUCT_X
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_X0
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_Y0
+
+// BOOST_FUSION_ADAPT_ASSOC_STRUCT_I generates the overarching structure and uses
+// SEQ_FOR_EACH_I to generate the "linear" substructures.
+// Thanks to Paul Mensonides for the PP macro help
+
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_I(name, seq) \
+ namespace boost { namespace fusion { namespace traits \
+ { \
+ template <> \
+ struct tag_of<name> \
+ { \
+ typedef struct_tag type; \
+ }; \
+ }}} \
+ namespace boost { namespace fusion { namespace extension \
+ { \
+ template <> \
+ struct struct_size<name> : mpl::int_<BOOST_PP_SEQ_SIZE(seq)> {}; \
+ BOOST_PP_SEQ_FOR_EACH_I(BOOST_FUSION_ADAPT_ASSOC_STRUCT_C, name, seq) \
+ }}} \
+ /***/
+
+#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_C(r, name, i, xy) \
+ template <> \
+ struct struct_member<name, i> \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(3, 0, xy) type; \
+ static type& call(name& struct_) \
+ { \
+ return struct_.BOOST_PP_TUPLE_ELEM(3, 1, xy); \
+ }; \
+ }; \
+ template<> \
+ struct struct_assoc_member<name, BOOST_PP_TUPLE_ELEM(3, 2, xy)> \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(3, 0, xy) type; \
+ static type& call(name& struct_) \
+ { \
+ return struct_.BOOST_PP_TUPLE_ELEM(3, 1, xy); \
+ }; \
+ };
+ /***/
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_struct.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,76 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_ADAPT_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_ADAPT_STRUCT_HPP
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+#include <boost/fusion/adapted/struct/extension.hpp>
+#include <boost/fusion/adapted/struct/struct_iterator.hpp>
+#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/end_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/size_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/config/no_tr1/utility.hpp>
+
+#define BOOST_FUSION_ADAPT_STRUCT(name, bseq) \
+ BOOST_FUSION_ADAPT_STRUCT_I( \
+ name, BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_X bseq, 0)) \
+ /***/
+
+#define BOOST_FUSION_ADAPT_STRUCT_X(x, y) ((x, y)) BOOST_FUSION_ADAPT_STRUCT_Y
+#define BOOST_FUSION_ADAPT_STRUCT_Y(x, y) ((x, y)) BOOST_FUSION_ADAPT_STRUCT_X
+#define BOOST_FUSION_ADAPT_STRUCT_X0
+#define BOOST_FUSION_ADAPT_STRUCT_Y0
+
+// BOOST_FUSION_ADAPT_STRUCT_I generates the overarching structure and uses
+// SEQ_FOR_EACH_I to generate the "linear" substructures.
+// Thanks to Paul Mensonides for the PP macro help
+
+#define BOOST_FUSION_ADAPT_STRUCT_I(name, seq) \
+ namespace boost { namespace fusion { namespace traits \
+ { \
+ template <> \
+ struct tag_of<name> \
+ { \
+ typedef struct_tag type; \
+ }; \
+ }}} \
+ namespace boost { namespace fusion { namespace extension \
+ { \
+ template <> \
+ struct struct_size<name> : mpl::int_<BOOST_PP_SEQ_SIZE(seq)> {}; \
+ BOOST_PP_SEQ_FOR_EACH_I(BOOST_FUSION_ADAPT_STRUCT_C, name, seq) \
+ }}} \
+ /***/
+
+#define BOOST_FUSION_ADAPT_STRUCT_C(r, name, i, xy) \
+ template <> \
+ struct struct_member<name, i> \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(2, 0, xy) type; \
+ static type& call(name& struct_) \
+ { \
+ return struct_.BOOST_PP_TUPLE_ELEM(2, 1, xy); \
+ }; \
+ }; \
+ /***/
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_IMPL_HPP
+
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct at_impl;
+
+ template <typename Struct, int N>
+ struct struct_member;
+
+ template <typename Struct>
+ struct struct_size;
+
+ template <>
+ struct at_impl<struct_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ static int const n_value = N::value;
+ BOOST_FUSION_INDEX_CHECK(n_value,
+ extension::struct_size<Sequence>::value);
+
+ typedef typename
+ extension::struct_member<Sequence, N::value>
+ element;
+
+ typedef typename
+ mpl::eval_if<
+ is_const<Sequence>
+ , detail::cref_result<element>
+ , detail::ref_result<element>
+ >::type
+ type;
+
+ static type
+ call(Sequence& seq)
+ {
+ return extension::
+ struct_member<Sequence, N::value>::call(seq);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_key_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2005-2007 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_KEY_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_KEY_IMPL_HPP
+
+#include <boost/fusion/support/detail/access.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct at_key_impl;
+
+ template <typename Struct, typename Key>
+ struct struct_assoc_member;
+
+ template <>
+ struct at_key_impl<struct_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply
+ {
+ typedef typename
+ extension::struct_assoc_member<Sequence, Key>
+ element;
+
+ typedef typename
+ mpl::eval_if<
+ is_const<Sequence>
+ , detail::cref_result<element>
+ , detail::ref_result<element>
+ >::type
+ type;
+
+ static type
+ call(Sequence& seq)
+ {
+ return extension::
+ struct_assoc_member<Sequence, Key>::call(seq);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_BEGIN_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_BEGIN_IMPL_HPP
+
+#include <boost/fusion/adapted/struct/struct_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<struct_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef struct_iterator<Sequence, 0> type;
+
+ static type
+ call(Sequence& v)
+ {
+ return type(v);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,36 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_CATEGORY_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_CATEGORY_OF_IMPL_HPP
+
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+ struct random_access_traversal_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct category_of_impl;
+
+ template<>
+ struct category_of_impl<struct_tag>
+ {
+ template<typename T>
+ struct apply
+ {
+ typedef random_access_traversal_tag type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_END_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_END_IMPL_HPP
+
+#include <boost/fusion/adapted/struct/struct_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct end_impl;
+
+ template <typename Struct>
+ struct struct_size;
+
+ template <>
+ struct end_impl<struct_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef
+ struct_iterator<
+ Sequence
+ , struct_size<Sequence>::value
+ >
+ type;
+
+ static type
+ call(Sequence& v)
+ {
+ return type(v);
+ }
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,67 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_EXTENSION_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_EXTENSION_HPP
+
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Struct, int N>
+ struct struct_member;
+
+ template <typename Struct>
+ struct struct_size;
+
+ template <typename Struct, int N>
+ struct struct_member<Struct const, N>
+ {
+ typedef typename
+ add_const<typename struct_member<Struct, N>::type>::type
+ type;
+
+ static type&
+ call(Struct const& struct_)
+ {
+ return struct_member<Struct, N>::call(
+ const_cast<Struct&>(struct_));
+ }
+ };
+
+ template <typename Struct>
+ struct struct_size<Struct const>
+ : struct_size<Struct>
+ {};
+
+ struct no_such_member;
+
+ template<typename Struct, typename Key>
+ struct struct_assoc_member
+ {
+ typedef no_such_member type;
+ };
+
+ template<typename Struct, typename Key>
+ struct struct_assoc_member<Struct const, Key>
+ {
+ typedef typename
+ add_const<typename struct_assoc_member<Struct, Key>::type>::type
+ type;
+
+ static type&
+ call(Struct const& struct_)
+ {
+ return struct_assoc_member<Struct, Key>::call(
+ const_cast<Struct&>(struct_));
+ }
+ };
+
+}}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/has_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/has_key_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2005-2007 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_HAS_KEY_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_HAS_KEY_IMPL_HPP
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace fusion {
+
+ struct struct_tag;
+
+ namespace extension
+ {
+ struct no_such_member;
+
+ template<typename T>
+ struct has_key_impl;
+
+ template<typename Struct, typename Key>
+ struct struct_assoc_member;
+
+ template<>
+ struct has_key_impl<struct_tag>
+ {
+ template<typename Sequence, typename Key>
+ struct apply
+ : mpl::not_<is_same<no_such_member, typename struct_assoc_member<Sequence, Key>::type> >
+ {
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/is_sequence_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_IS_SEQUENCE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_IS_SEQUENCE_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_sequence_impl;
+
+ template<>
+ struct is_sequence_impl<struct_tag>
+ {
+ template<typename Sequence>
+ struct apply
+ : mpl::true_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/is_view_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/is_view_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_IS_VIEW_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_IS_VIEW_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_view_impl;
+
+ template<>
+ struct is_view_impl<struct_tag>
+ {
+ template<typename T>
+ struct apply
+ : mpl::false_
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/size_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/size_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,40 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_SIZE_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_SIZE_IMPL_HPP
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace extension
+ {
+ template <typename Struct>
+ struct struct_size;
+ }
+
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct size_impl;
+
+ template <>
+ struct size_impl<struct_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ : extension::struct_size<Sequence>
+ {};
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/struct_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/struct_iterator.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,102 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_STRUCT_ITERATOR_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_STRUCT_ITERATOR_HPP
+
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/fusion/adapted/struct/extension.hpp>
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion
+{
+ struct random_access_traversal_tag;
+
+ template <typename Struct, int N_>
+ struct struct_iterator
+ : iterator_facade<struct_iterator<Struct, N_>, random_access_traversal_tag>
+ {
+ BOOST_FUSION_INDEX_CHECK(N,extension::struct_size<Struct>::value);
+
+ typedef mpl::int_<N_> index;
+ typedef Struct struct_type;
+
+ struct_iterator(Struct& struct_)
+ : struct_(struct_) {}
+ Struct& struct_;
+
+ template <typename Iterator>
+ struct value_of
+ : extension::struct_member<Struct, N_>
+ {
+ };
+
+ template <typename Iterator>
+ struct deref
+ {
+ typedef typename
+ add_reference<
+ typename extension::struct_member<Struct, N_>::type
+ >::type
+ type;
+
+ static type
+ call(Iterator const& iter)
+ {
+ return extension::struct_member<Struct, N_>::
+ call(iter.struct_);
+ }
+ };
+
+ template <typename Iterator, typename N>
+ struct advance
+ {
+ typedef typename Iterator::index index;
+ typedef typename Iterator::struct_type struct_type;
+ typedef struct_iterator<struct_type, index::value + N::value> type;
+
+ static type
+ call(Iterator const& iter)
+ {
+ return type(iter.struct_);
+ }
+ };
+
+ template <typename Iterator>
+ struct next : advance<Iterator, mpl::int_<1> > {};
+
+ template <typename Iterator>
+ struct prior : advance<Iterator, mpl::int_<-1> > {};
+
+ template <typename I1, typename I2>
+ struct distance : mpl::minus<typename I2::index, typename I1::index>
+ {
+ typedef typename
+ mpl::minus<
+ typename I2::index, typename I1::index
+ >::type
+ type;
+
+ static type
+ call(I1 const&, I2 const&)
+ {
+ return type();
+ }
+ };
+ };
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_VALUE_AT_IMPL_HPP
+
+#include <boost/fusion/support/assert.hpp>
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct value_at_impl;
+
+ template <typename Struct, int N>
+ struct struct_member;
+
+ template <typename Struct>
+ struct struct_size;
+
+ template <>
+ struct value_at_impl<struct_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply
+ {
+ static int const n_value = N::value;
+ BOOST_FUSION_INDEX_CHECK(n_value,
+ extension::struct_size<Sequence>::value);
+
+ typedef typename
+ extension::struct_member<Sequence, N::value>::type
+ type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_key_impl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,40 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2005-2007 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_VALUE_AT_KEY_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_VALUE_AT_KEY_IMPL_HPP
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace extension
+ {
+ template<typename T>
+ struct value_at_key_impl;
+
+ template <typename Struct, typename Key>
+ struct struct_assoc_member;
+
+ template <>
+ struct value_at_key_impl<struct_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply
+ {
+ typedef typename
+ extension::struct_assoc_member<Sequence, Key>::type
+ type;
+ };
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_MPL_HPP
+#define BOOST_FUSION_ADAPTED_MPL_HPP
+
+#include <boost/fusion/support/ref.hpp>
+
+#include <boost/fusion/adapted/detail/mpl/mpl_iterator.hpp>
+#include <boost/fusion/adapted/detail/mpl/advance_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/at_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/begin_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/category_of_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/deref_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/distance_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/empty_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/end_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/equal_to_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/has_key_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/is_view_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/next_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/prior_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/size_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/value_at_impl.hpp>
+#include <boost/fusion/adapted/detail/mpl/value_of_impl.hpp>
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/std_pair.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/std_pair.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,71 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_STD_PAIR_HPP
+#define BOOST_FUSION_ADAPTED_STD_PAIR_HPP
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+#include <boost/fusion/adapted/struct.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost { namespace fusion
+{
+ struct struct_tag;
+
+ namespace traits
+ {
+ template <typename T1, typename T2>
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+ struct tag_of<std::pair<T1, T2>, void >
+#else
+ struct tag_of<std::pair<T1, T2> >
+#endif
+ {
+ typedef struct_tag type;
+ };
+ }
+
+ namespace extension
+ {
+ template <typename Struct, int N>
+ struct struct_member;
+
+ template <typename Struct>
+ struct struct_size;
+
+ template <typename T1, typename T2>
+ struct struct_member<std::pair<T1, T2>, 0>
+ {
+ typedef T1 type;
+
+ static type& call(std::pair<T1, T2>& pair)
+ {
+ return pair.first;
+ }
+ };
+
+ template <typename T1, typename T2>
+ struct struct_member<std::pair<T1, T2>, 1>
+ {
+ typedef T2 type;
+
+ static type& call(std::pair<T1, T2>& pair)
+ {
+ return pair.second;
+ }
+ };
+
+ template <typename T1, typename T2>
+ struct struct_size<std::pair<T1, T2> > : mpl::int_<2>
+ {
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp 2009-07-08 15:24:55 EDT (Wed, 08 Jul 2009)
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/extension.hpp>
+#include <boost/fusion/adapted/struct/adapt_struct.hpp>
+#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
+#include <boost/fusion/adapted/struct/struct_iterator.hpp>
+
+#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/at_key_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/end_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/has_key_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/size_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_key_impl.hpp>
+
+#endif


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk