$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
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