summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2013-01-12 18:41:34 (GMT)
committerSwift Review <review@swift.im>2013-01-13 10:36:26 (GMT)
commitf3bc816af1b0d61452de973963e453bf3b3f95a2 (patch)
treee895f8afa3580e6cff6f5ad2017d45bf147a17c2 /3rdParty/Boost/src/boost/fusion/sequence/intrinsic
parent188fc285c6555eadd3c9d50ab8a94adcade78d89 (diff)
downloadswift-f3bc816af1b0d61452de973963e453bf3b3f95a2.zip
swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.tar.bz2
Adding in the spirit Boost stuff
Change-Id: I4f127ce61667243b64081b0aa309028d5077045f
Diffstat (limited to '3rdParty/Boost/src/boost/fusion/sequence/intrinsic')
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp111
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_c.hpp13
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp93
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp43
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp95
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp43
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp92
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp39
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp59
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp54
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp61
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp95
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp42
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp79
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/segments.hpp76
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp88
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp68
-rw-r--r--3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp66
18 files changed, 1217 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp
new file mode 100644
index 0000000..92da7bb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp
@@ -0,0 +1,111 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_AT_05042005_0722)
+#define FUSION_AT_05042005_0722
+
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_tuple_tag; // boost::tuples::tuple tag
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+ struct std_tuple_tag; // std::tuple tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct at_impl
+ {
+ template <typename Sequence, typename N>
+ struct apply;
+ };
+
+ template <>
+ struct at_impl<sequence_facade_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply : Sequence::template at<Sequence, N> {};
+ };
+
+ template <>
+ struct at_impl<boost_tuple_tag>;
+
+ template <>
+ struct at_impl<boost_array_tag>;
+
+ template <>
+ struct at_impl<mpl_sequence_tag>;
+
+ template <>
+ struct at_impl<std_pair_tag>;
+
+ template <>
+ struct at_impl<std_tuple_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence, typename N>
+ struct at
+ : extension::at_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence, N>
+ {};
+
+ template <typename Sequence, int N>
+ struct at_c
+ : at<Sequence, mpl::int_<N> >
+ {};
+ }
+
+
+ template <typename N, typename Sequence>
+ inline typename
+ lazy_disable_if<
+ is_const<Sequence>
+ , result_of::at<Sequence, N>
+ >::type
+ at(Sequence& seq)
+ {
+ return result_of::at<Sequence, N>::call(seq);
+ }
+
+ template <typename N, typename Sequence>
+ inline typename result_of::at<Sequence const, N>::type
+ at(Sequence const& seq)
+ {
+ return result_of::at<Sequence const, N>::call(seq);
+ }
+
+ template <int N, typename Sequence>
+ inline typename
+ lazy_disable_if<
+ is_const<Sequence>
+ , result_of::at_c<Sequence, N>
+ >::type
+ at_c(Sequence& seq)
+ {
+ return fusion::at<mpl::int_<N> >(seq);
+ }
+
+ template <int N, typename Sequence>
+ inline typename result_of::at_c<Sequence const, N>::type
+ at_c(Sequence const& seq)
+ {
+ return fusion::at<mpl::int_<N> >(seq);
+ }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_c.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_c.hpp
new file mode 100644
index 0000000..449e3f4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_c.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_AT_C_08252008_0308)
+#define FUSION_AT_C_08252008_0308
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp
new file mode 100644
index 0000000..24c2fff
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp
@@ -0,0 +1,93 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_AT_KEY_20060304_1755)
+#define BOOST_FUSION_AT_KEY_20060304_1755
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/iterator/deref_data.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct at_key_impl
+ {
+ template <typename Seq, typename Key>
+ struct apply
+ {
+ typedef typename
+ result_of::deref_data<
+ typename result_of::find<Seq, Key>::type
+ >::type
+ type;
+
+ static type
+ call(Seq& seq)
+ {
+ return fusion::deref_data(fusion::find<Key>(seq));
+ }
+ };
+ };
+
+ template <>
+ struct at_key_impl<sequence_facade_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply : Sequence::template at_key_impl<Sequence, Key> {};
+ };
+
+ template <>
+ struct at_key_impl<boost_array_tag>;
+
+ template <>
+ struct at_key_impl<mpl_sequence_tag>;
+
+ template <>
+ struct at_key_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence, typename Key>
+ struct at_key
+ : extension::at_key_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence, Key>
+ {};
+ }
+
+ template <typename Key, typename Sequence>
+ inline typename
+ lazy_disable_if<
+ is_const<Sequence>
+ , result_of::at_key<Sequence, Key>
+ >::type
+ at_key(Sequence& seq)
+ {
+ return result_of::at_key<Sequence, Key>::call(seq);
+ }
+
+ template <typename Key, typename Sequence>
+ inline typename result_of::at_key<Sequence const, Key>::type
+ at_key(Sequence const& seq)
+ {
+ return result_of::at_key<Sequence const, Key>::call(seq);
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp
new file mode 100644
index 0000000..0a4d482
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_BACK_09162005_0350)
+#define FUSION_BACK_09162005_0350
+
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct fusion_sequence_tag;
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct back
+ : result_of::deref<typename result_of::prior<typename result_of::end<Sequence>::type>::type>
+ {};
+ }
+
+ template <typename Sequence>
+ inline typename result_of::back<Sequence>::type
+ back(Sequence& seq)
+ {
+ return *fusion::prior(fusion::end(seq));
+ }
+
+ template <typename Sequence>
+ inline typename result_of::back<Sequence const>::type
+ back(Sequence const& seq)
+ {
+ return *fusion::prior(fusion::end(seq));
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp
new file mode 100644
index 0000000..7a7ecf6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp
@@ -0,0 +1,95 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_04052005_1132)
+#define FUSION_BEGIN_04052005_1132
+
+#include <boost/blank.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/is_segmented.hpp>
+#include <boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag; // iterator facade tag
+ struct boost_tuple_tag; // boost::tuples::tuple tag
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct begin_impl
+ {
+ template <typename Sequence>
+ struct apply
+ : mpl::if_<
+ traits::is_segmented<Sequence>
+ , detail::segmented_begin<Sequence>
+ , blank
+ >::type
+ {};
+ };
+
+ template <>
+ struct begin_impl<sequence_facade_tag>
+ {
+ template <typename Sequence>
+ struct apply : Sequence::template begin<Sequence> {};
+ };
+
+ template <>
+ struct begin_impl<boost_tuple_tag>;
+
+ template <>
+ struct begin_impl<boost_array_tag>;
+
+ template <>
+ struct begin_impl<mpl_sequence_tag>;
+
+ template <>
+ struct begin_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct begin
+ : extension::begin_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence>
+ {};
+ }
+
+ template <typename Sequence>
+ inline typename
+ lazy_enable_if<
+ traits::is_sequence<Sequence>
+ , result_of::begin<Sequence>
+ >::type const
+ begin(Sequence& seq)
+ {
+ return result_of::begin<Sequence>::call(seq);
+ }
+
+ template <typename Sequence>
+ inline typename
+ lazy_enable_if<
+ traits::is_sequence<Sequence>
+ , result_of::begin<Sequence const>
+ >::type const
+ begin(Sequence const& seq)
+ {
+ return result_of::begin<Sequence const>::call(seq);
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
new file mode 100644
index 0000000..968718e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+ Copyright (c) 2011 Eric Niebler
+
+ 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED)
+#define BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED
+
+#include <boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp>
+#include <boost/fusion/iterator/segmented_iterator.hpp>
+#include <boost/fusion/view/iterator_range.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/fusion/container/list/cons.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ //auto segmented_begin( seq )
+ //{
+ // return make_segmented_iterator( segmented_begin_impl( seq, nil ) );
+ //}
+
+ template <typename Sequence, typename Nil = fusion::nil>
+ struct segmented_begin
+ {
+ typedef
+ segmented_iterator<
+ typename segmented_begin_impl<Sequence, Nil>::type
+ >
+ type;
+
+ static type call(Sequence& seq)
+ {
+ return type(
+ segmented_begin_impl<Sequence, Nil>::call(seq, Nil()));
+ }
+ };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
new file mode 100644
index 0000000..5069432
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
@@ -0,0 +1,92 @@
+/*=============================================================================
+ Copyright (c) 2011 Eric Niebler
+
+ 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED)
+#define BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED
+
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/fusion/container/list/cons_fwd.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/is_segmented.hpp>
+#include <boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp>
+#include <boost/fusion/support/detail/segmented_fold_until_impl.hpp>
+
+namespace boost { namespace fusion
+{
+ template <typename First, typename Last>
+ struct iterator_range;
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+ struct segmented_begin_fun
+ {
+ template <typename Sequence, typename State, typename Context>
+ struct apply
+ {
+ typedef
+ iterator_range<
+ typename fusion::result_of::begin<Sequence>::type
+ , typename fusion::result_of::end<Sequence>::type
+ >
+ range_type;
+
+ typedef cons<range_type, Context> type;
+ typedef mpl::false_ continue_type;
+
+ static type call(Sequence& seq, State const&, Context const& context, segmented_begin_fun)
+ {
+ return type(range_type(fusion::begin(seq), fusion::end(seq)), context);
+ }
+ };
+ };
+
+ template <typename Sequence, typename Stack, bool IsSegmented = traits::is_segmented<Sequence>::type::value>
+ struct segmented_begin_impl_aux
+ {
+ typedef
+ segmented_end_impl<Sequence, Stack>
+ end_impl;
+
+ typedef
+ segmented_fold_until_impl<
+ Sequence
+ , typename end_impl::type
+ , Stack
+ , segmented_begin_fun
+ >
+ fold_impl;
+
+ typedef typename fold_impl::type type;
+
+ static type call(Sequence& seq, Stack const& stack)
+ {
+ return fold_impl::call(seq, end_impl::call(seq, stack), stack, segmented_begin_fun());
+ }
+ };
+
+ template <typename Sequence, typename Stack>
+ struct segmented_begin_impl_aux<Sequence, Stack, false>
+ {
+ typedef typename result_of::begin<Sequence>::type begin_type;
+ typedef typename result_of::end<Sequence>::type end_type;
+ typedef iterator_range<begin_type, end_type> pair_type;
+ typedef cons<pair_type, Stack> type;
+
+ static type call(Sequence& seq, Stack stack)
+ {
+ return type(pair_type(fusion::begin(seq), fusion::end(seq)), stack);
+ }
+ };
+
+ template <typename Sequence, typename Stack>
+ struct segmented_begin_impl
+ : segmented_begin_impl_aux<Sequence, Stack>
+ {};
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
new file mode 100644
index 0000000..469862a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2011 Eric Niebler
+
+ 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED)
+#define BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED
+
+#include <boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp>
+#include <boost/fusion/iterator/segmented_iterator.hpp>
+#include <boost/fusion/container/list/cons.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ //auto segmented_end( seq )
+ //{
+ // return make_segmented_iterator( segmented_end_impl( seq ) );
+ //}
+
+ template <typename Sequence, typename Nil = fusion::nil>
+ struct segmented_end
+ {
+ typedef
+ segmented_iterator<
+ typename segmented_end_impl<Sequence, Nil>::type
+ >
+ type;
+
+ static type call(Sequence & seq)
+ {
+ return type(
+ segmented_end_impl<Sequence, Nil>::call(seq, Nil()));
+ }
+ };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
new file mode 100644
index 0000000..149027b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2011 Eric Niebler
+
+ 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED)
+#define BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED
+
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/container/list/cons_fwd.hpp>
+#include <boost/fusion/support/is_segmented.hpp>
+
+namespace boost { namespace fusion
+{
+ template <typename First, typename Last>
+ struct iterator_range;
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+ //auto segmented_end_impl( seq, stack )
+ //{
+ // assert(is_segmented(seq));
+ // auto it = end(segments(seq));
+ // return cons(iterator_range(it, it), stack);
+ //}
+
+ template <typename Sequence, typename Stack>
+ struct segmented_end_impl
+ {
+ BOOST_MPL_ASSERT((traits::is_segmented<Sequence>));
+
+ typedef
+ typename result_of::end<
+ typename remove_reference<
+ typename add_const<
+ typename result_of::segments<Sequence>::type
+ >::type
+ >::type
+ >::type
+ end_type;
+
+ typedef iterator_range<end_type, end_type> pair_type;
+ typedef cons<pair_type, Stack> type;
+
+ static type call(Sequence & seq, Stack stack)
+ {
+ end_type end = fusion::end(fusion::segments(seq));
+ return type(pair_type(end, end), stack);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp
new file mode 100644
index 0000000..03cef28
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2011 Eric Niebler
+
+ 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEGMENTED_SIZE_08112006_1141)
+#define BOOST_FUSION_SEGMENTED_SIZE_08112006_1141
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/mpl/begin.hpp>
+#include <boost/fusion/mpl/end.hpp>
+#include <boost/fusion/support/is_segmented.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////
+ // calculates the size of any segmented data structure.
+ template<typename Sequence>
+ struct segmented_size;
+
+ ///////////////////////////////////////////////////////////////////////////
+ template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value>
+ struct segmented_size_impl
+ : mpl::fold<
+ typename remove_reference<
+ typename add_const<
+ typename result_of::segments<Sequence>::type
+ >::type
+ >::type
+ , mpl::size_t<0>
+ , mpl::plus<mpl::_1, segmented_size<remove_reference<mpl::_2> > >
+ >::type
+ {};
+
+ template<typename Sequence>
+ struct segmented_size_impl<Sequence, false>
+ : result_of::size<Sequence>::type
+ {};
+
+ template<typename Sequence>
+ struct segmented_size
+ : segmented_size_impl<Sequence>
+ {};
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp
new file mode 100644
index 0000000..a9928ab
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp
@@ -0,0 +1,61 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_EMPTY_09162005_0335)
+#define FUSION_EMPTY_09162005_0335
+
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct mpl_sequence_tag; // mpl sequence tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct empty_impl
+ {
+ template <typename Sequence>
+ struct apply
+ : mpl::bool_<(result_of::size<Sequence>::value == 0)>
+ {};
+ };
+
+ template <>
+ struct empty_impl<sequence_facade_tag>
+ {
+ template <typename Sequence>
+ struct apply : Sequence::template empty<Sequence> {};
+ };
+
+ template <>
+ struct empty_impl<mpl_sequence_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct empty
+ : extension::empty_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence>
+ {};
+ }
+
+ template <typename Sequence>
+ inline typename result_of::empty<Sequence>::type
+ empty(Sequence const&)
+ {
+ typedef typename result_of::empty<Sequence>::type result;
+ return result();
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp
new file mode 100644
index 0000000..995ed7a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp
@@ -0,0 +1,95 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_END_04052005_1141)
+#define FUSION_END_04052005_1141
+
+#include <boost/blank.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/is_segmented.hpp>
+#include <boost/fusion/sequence/intrinsic/detail/segmented_end.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_tuple_tag; // boost::tuples::tuple tag
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct end_impl
+ {
+ template <typename Sequence>
+ struct apply
+ : mpl::if_<
+ traits::is_segmented<Sequence>
+ , detail::segmented_end<Sequence>
+ , blank
+ >::type
+ {};
+ };
+
+ template <>
+ struct end_impl<sequence_facade_tag>
+ {
+ template <typename Sequence>
+ struct apply : Sequence::template end<Sequence> {};
+ };
+
+ template <>
+ struct end_impl<boost_tuple_tag>;
+
+ template <>
+ struct end_impl<boost_array_tag>;
+
+ template <>
+ struct end_impl<mpl_sequence_tag>;
+
+ template <>
+ struct end_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct end
+ : extension::end_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence>
+ {};
+ }
+
+ template <typename Sequence>
+ inline typename
+ lazy_enable_if<
+ traits::is_sequence<Sequence>
+ , result_of::end<Sequence>
+ >::type const
+ end(Sequence& seq)
+ {
+ return result_of::end<Sequence>::call(seq);
+ }
+
+ template <typename Sequence>
+ inline typename
+ lazy_enable_if<
+ traits::is_sequence<Sequence>
+ , result_of::end<Sequence const>
+ >::type const
+ end(Sequence const& seq)
+ {
+ return result_of::end<Sequence const>::call(seq);
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp
new file mode 100644
index 0000000..0e50e3c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_FRONT_09162005_0343)
+#define FUSION_FRONT_09162005_0343
+
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ struct fusion_sequence_tag;
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct front
+ : result_of::deref<typename result_of::begin<Sequence>::type>
+ {};
+ }
+
+ template <typename Sequence>
+ inline typename result_of::front<Sequence>::type
+ front(Sequence& seq)
+ {
+ return *fusion::begin(seq);
+ }
+
+ template <typename Sequence>
+ inline typename result_of::front<Sequence const>::type
+ front(Sequence const& seq)
+ {
+ return *fusion::begin(seq);
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp
new file mode 100644
index 0000000..9e0969a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_HAS_KEY_09232005_1454)
+#define FUSION_HAS_KEY_09232005_1454
+
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace fusion
+{
+ struct void_;
+
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct has_key_impl
+ {
+ template <typename Seq, typename Key>
+ struct apply
+ : mpl::not_<
+ typename result_of::equal_to<
+ typename result_of::find<Seq, Key>::type
+ , typename result_of::end<Seq>::type
+ >::type
+ >::type
+ {};
+ };
+
+ template <>
+ struct has_key_impl<sequence_facade_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply : Sequence::template has_key<Sequence, Key> {};
+ };
+
+ template <>
+ struct has_key_impl<boost_array_tag>;
+
+ template <>
+ struct has_key_impl<mpl_sequence_tag>;
+
+ template <>
+ struct has_key_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence, typename Key>
+ struct has_key
+ : extension::has_key_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence, Key>
+ {};
+ }
+
+ template <typename Key, typename Sequence>
+ inline typename result_of::has_key<Sequence, Key>::type
+ has_key(Sequence const&)
+ {
+ typedef typename result_of::has_key<Sequence, Key>::type result;
+ return result();
+ }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/segments.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/segments.hpp
new file mode 100644
index 0000000..afd5d40
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/segments.hpp
@@ -0,0 +1,76 @@
+/*=============================================================================
+ Copyright (c) 2006 Eric Niebler
+
+ 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)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEGMENTS_04052005_1141)
+#define BOOST_FUSION_SEGMENTS_04052005_1141
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct iterator_range_tag;
+
+ // segments: returns a sequence of sequences
+ namespace extension
+ {
+ template <typename Tag>
+ struct segments_impl
+ {
+ template <typename Sequence>
+ struct apply {};
+ };
+
+ template <>
+ struct segments_impl<sequence_facade_tag>
+ {
+ template <typename Sequence>
+ struct apply : Sequence::template segments<Sequence> {};
+ };
+
+ template <>
+ struct segments_impl<iterator_range_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct segments
+ {
+ typedef typename traits::tag_of<Sequence>::type tag_type;
+
+ typedef typename
+ extension::segments_impl<tag_type>::template apply<Sequence>::type
+ type;
+ };
+ }
+
+ template <typename Sequence>
+ inline typename
+ lazy_disable_if<
+ is_const<Sequence>
+ , result_of::segments<Sequence>
+ >::type
+ segments(Sequence& seq)
+ {
+ typedef typename traits::tag_of<Sequence>::type tag_type;
+ return extension::segments_impl<tag_type>::template apply<Sequence>::call(seq);
+ }
+
+ template <typename Sequence>
+ inline typename result_of::segments<Sequence const>::type
+ segments(Sequence const& seq)
+ {
+ typedef typename traits::tag_of<Sequence const>::type tag_type;
+ return extension::segments_impl<tag_type>::template apply<Sequence const>::call(seq);
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp
new file mode 100644
index 0000000..0a1c165
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp
@@ -0,0 +1,88 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_SIZE_05052005_0214)
+#define FUSION_SIZE_05052005_0214
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/is_segmented.hpp>
+#include <boost/fusion/sequence/intrinsic/detail/segmented_size.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_tuple_tag; // boost::tuples::tuple tag
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct size_impl
+ {
+ template<typename Sequence>
+ struct unsegmented_size : Sequence::size {};
+
+ template <typename Sequence>
+ struct apply
+ : mpl::if_<
+ traits::is_segmented<Sequence>
+ , detail::segmented_size<Sequence>
+ , unsegmented_size<Sequence>
+ >::type
+ {};
+ };
+
+ template <>
+ struct size_impl<sequence_facade_tag>
+ {
+ template <typename Sequence>
+ struct apply : Sequence::template size<Sequence> {};
+ };
+
+ template <>
+ struct size_impl<boost_tuple_tag>;
+
+ template <>
+ struct size_impl<boost_array_tag>;
+
+ template <>
+ struct size_impl<mpl_sequence_tag>;
+
+ template <>
+ struct size_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence>
+ struct size
+ : extension::size_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence>
+
+ {
+ typedef typename extension::size_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence>::type size_application;
+ BOOST_STATIC_CONSTANT(int, value = size_application::value);
+ };
+ }
+
+ template <typename Sequence>
+ inline typename result_of::size<Sequence>::type
+ size(Sequence const&)
+ {
+ typedef typename result_of::size<Sequence>::type result;
+ return result();
+ }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp
new file mode 100644
index 0000000..ce314a8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 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)
+==============================================================================*/
+#if !defined(FUSION_VALUE_AT_05052005_0229)
+#define FUSION_VALUE_AT_05052005_0229
+
+#include <boost/mpl/int.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_tuple_tag; // boost::tuples::tuple tag
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct value_at_impl
+ {
+ template <typename Sequence, typename N>
+ struct apply;
+ };
+
+ template <>
+ struct value_at_impl<sequence_facade_tag>
+ {
+ template <typename Sequence, typename N>
+ struct apply : Sequence::template value_at<Sequence, N> {};
+ };
+
+ template <>
+ struct value_at_impl<boost_tuple_tag>;
+
+ template <>
+ struct value_at_impl<boost_array_tag>;
+
+ template <>
+ struct value_at_impl<mpl_sequence_tag>;
+
+ template <>
+ struct value_at_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence, typename N>
+ struct value_at
+ : extension::value_at_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence, N>
+ {};
+
+ template <typename Sequence, int N>
+ struct value_at_c
+ : fusion::result_of::value_at<Sequence, mpl::int_<N> >
+ {};
+ }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp
new file mode 100644
index 0000000..23d34ee
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp
@@ -0,0 +1,66 @@
+/*=============================================================================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 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)
+==============================================================================*/
+#if !defined(FUSION_VALUE_AT_KEY_05052005_0229)
+#define FUSION_VALUE_AT_KEY_05052005_0229
+
+#include <boost/mpl/int.hpp>
+#include <boost/fusion/sequence/intrinsic_fwd.hpp>
+#include <boost/fusion/iterator/value_of_data.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+ // Special tags:
+ struct sequence_facade_tag;
+ struct boost_array_tag; // boost::array tag
+ struct mpl_sequence_tag; // mpl sequence tag
+ struct std_pair_tag; // std::pair tag
+
+ namespace extension
+ {
+ template <typename Tag>
+ struct value_at_key_impl
+ {
+ template <typename Seq, typename Key>
+ struct apply
+ : result_of::value_of_data<
+ typename result_of::find<Seq, Key>::type
+ >
+ {};
+ };
+
+ template <>
+ struct value_at_key_impl<sequence_facade_tag>
+ {
+ template <typename Sequence, typename Key>
+ struct apply : Sequence::template value_at_key<Sequence, Key> {};
+ };
+
+ template <>
+ struct value_at_key_impl<boost_array_tag>;
+
+ template <>
+ struct value_at_key_impl<mpl_sequence_tag>;
+
+ template <>
+ struct value_at_key_impl<std_pair_tag>;
+ }
+
+ namespace result_of
+ {
+ template <typename Sequence, typename N>
+ struct value_at_key
+ : extension::value_at_key_impl<typename detail::tag_of<Sequence>::type>::
+ template apply<Sequence, N>
+ {};
+ }
+}}
+
+#endif
+