diff options
author | Vlad Voicu <vladv@rosedu.org> | 2012-03-02 10:01:11 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2012-03-09 15:04:05 (GMT) |
commit | 1c8cd160b79b6bbcec72042bdb104ba530508a93 (patch) | |
tree | cff302b81e74c557fbc9e30fd43144d981b613d0 /3rdParty/Boost/src/boost/fusion | |
parent | 2944711aefec9a9dd66052440bc4f921910dd780 (diff) | |
download | swift-contrib-1c8cd160b79b6bbcec72042bdb104ba530508a93.zip swift-contrib-1c8cd160b79b6bbcec72042bdb104ba530508a93.tar.bz2 |
Added spirit to bundled boost
Diffstat (limited to '3rdParty/Boost/src/boost/fusion')
252 files changed, 12393 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl.hpp new file mode 100644 index 0000000..f825784 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_MPL_31122005_1152) +#define BOOST_FUSION_MPL_31122005_1152 + +#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/end_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/size_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/value_at_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/at_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/has_key_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/category_of_impl.hpp> +#include <boost/fusion/adapted/mpl/detail/is_view_impl.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/at_impl.hpp new file mode 100644 index 0000000..6f3be1c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/at_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(BOOST_FUSION_AT_IMPL_31122005_1642) +#define BOOST_FUSION_AT_IMPL_31122005_1642 + +#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 Sequence, typename N> + struct apply + { + typedef typename mpl::at<Sequence, N>::type type; + + static type + call(Sequence) + { + return type(); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/begin_impl.hpp new file mode 100644 index 0000000..1ec77d8 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/begin_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(BOOST_FUSION_BEGIN_IMPL_31122005_1209) +#define BOOST_FUSION_BEGIN_IMPL_31122005_1209 + +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/mpl/begin.hpp> +#include <boost/type_traits/remove_const.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 Sequence> + struct apply + { + typedef typename mpl::begin< + typename remove_const<Sequence>::type + >::type iterator; + typedef mpl_iterator<iterator> type; + + static type + call(Sequence) + { + return type(); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp new file mode 100644 index 0000000..ad68fcc --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp @@ -0,0 +1,54 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141) +#define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141 + +#include <boost/fusion/support/detail/mpl_iterator_category.hpp> +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/is_sequence.hpp> +#include <boost/static_assert.hpp> + +namespace boost { namespace fusion { + + namespace detail + { + template <typename T> + struct mpl_sequence_category_of + { + // assumes T is an mpl sequence + // there should be no way this will ever be + // called where T is an mpl iterator + + BOOST_STATIC_ASSERT(mpl::is_sequence<T>::value); + typedef typename + mpl_iterator_category< + typename mpl::begin<T>::type::category + >::type + type; + }; + } + + struct mpl_sequence_tag; + + namespace extension + { + template<typename Tag> + struct category_of_impl; + + template<> + struct category_of_impl<mpl_sequence_tag> + { + template<typename T> + struct apply + : detail::mpl_sequence_category_of<T> + {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/end_impl.hpp new file mode 100644 index 0000000..e346695 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/end_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(BOOST_FUSION_END_IMPL_31122005_1237) +#define BOOST_FUSION_END_IMPL_31122005_1237 + +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/mpl/end.hpp> +#include <boost/type_traits/add_const.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 Sequence> + struct apply + { + typedef typename mpl::end< + typename remove_const<Sequence>::type + >::type iterator; + typedef mpl_iterator<iterator> type; + + static type + call(Sequence) + { + return type(); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp new file mode 100644 index 0000000..bfecbc7 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_HAS_KEY_IMPL_31122005_1647) +#define BOOST_FUSION_HAS_KEY_IMPL_31122005_1647 + +#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 Sequence, typename Key> + struct apply : mpl::has_key<Sequence, Key> {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp new file mode 100644 index 0000000..bf9b349 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505) +#define BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505 + +#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 diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp new file mode 100644 index 0000000..5ae48c9 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(BOOST_FUSION_IS_VIEW_IMPL_03202006_0048) +#define BOOST_FUSION_IS_VIEW_IMPL_03202006_0048 + +#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 diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/size_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/size_impl.hpp new file mode 100644 index 0000000..6289351 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/size_impl.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SIZE_IMPL_31122005_1508) +#define BOOST_FUSION_SIZE_IMPL_31122005_1508 + +#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 Sequence> + struct apply : mpl::size<Sequence> {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp new file mode 100644 index 0000000..5f39e4e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VALUE_AT_IMPL_31122005_1621) +#define BOOST_FUSION_VALUE_AT_IMPL_31122005_1621 + +#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 Sequence, typename N> + struct apply : mpl::at<Sequence, N> {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/mpl_iterator.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/mpl_iterator.hpp new file mode 100644 index 0000000..9c82028 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/mpl_iterator.hpp @@ -0,0 +1,113 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_MPL_ITERATOR_05052005_0731) +#define FUSION_MPL_ITERATOR_05052005_0731 + +#include <boost/fusion/support/detail/mpl_iterator_category.hpp> +#include <boost/fusion/iterator/iterator_facade.hpp> +#include <boost/type_traits/remove_const.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/next.hpp> +#include <boost/mpl/prior.hpp> +#include <boost/mpl/advance.hpp> +#include <boost/mpl/distance.hpp> + +namespace boost { namespace fusion +{ + template <typename Iterator_> + struct mpl_iterator + : iterator_facade< + mpl_iterator<Iterator_> + , typename detail::mpl_iterator_category<typename Iterator_::category>::type + > + { + typedef typename remove_const<Iterator_>::type iterator_type; + + template <typename Iterator> + struct value_of : mpl::deref<typename Iterator::iterator_type> {}; + + template <typename Iterator> + struct deref + { + typedef typename mpl::deref< + typename Iterator::iterator_type>::type + type; + + static type + call(Iterator) + { + return type(); + } + }; + + template <typename Iterator> + struct next + { + typedef mpl_iterator< + typename mpl::next<typename Iterator::iterator_type>::type> + type; + + static type + call(Iterator) + { + return type(); + } + }; + + template <typename Iterator> + struct prior + { + typedef mpl_iterator< + typename mpl::prior<typename Iterator::iterator_type>::type> + type; + + static type + call(Iterator) + { + return type(); + } + }; + + template <typename Iterator, typename N> + struct advance + { + typedef mpl_iterator< + typename mpl::advance<typename Iterator::iterator_type, N>::type> + type; + + static type + call(Iterator const& /*i*/) + { + return type(); + } + }; + + template <typename I1, typename I2> + struct distance : + mpl::distance< + typename I1::iterator_type + , typename I2::iterator_type> + { + typedef typename + mpl::distance< + typename I1::iterator_type + , typename I2::iterator_type + >::type + type; + + static type + call(I1 const&, I2 const&) + { + return type(); + } + }; + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/fold.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/fold.hpp new file mode 100644 index 0000000..56302fb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/fold.hpp @@ -0,0 +1,436 @@ +/*============================================================================= + Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2006 Dan Marsden + Copyright (c) 2009-2010 Christopher Schmidt + + 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_ALGORITHM_ITERATION_DETAIL_FOLD_HPP +#define BOOST_FUSION_ALGORITHM_ITERATION_DETAIL_FOLD_HPP + +#include <boost/config.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/sequence/intrinsic/size.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/iterator/prior.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/preprocessor/cat.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/utility/result_of.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/type_traits/add_reference.hpp> + +#endif + +#ifdef BOOST_FUSION_REVERSE_FOLD +# ifdef BOOST_FUSION_ITER_FOLD +# define BOOST_FUSION_FOLD_NAME reverse_iter_fold +# else +# define BOOST_FUSION_FOLD_NAME reverse_fold +# endif + +# define BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION end +# define BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION prior +# define BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(IT) \ + typename fusion::result_of::prior<IT>::type +# define BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(IT) fusion::prior(IT) +#else +# ifdef BOOST_FUSION_ITER_FOLD +# define BOOST_FUSION_FOLD_NAME iter_fold +# else +# define BOOST_FUSION_FOLD_NAME fold +# endif + +# define BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION begin +# define BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION next +# define BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(IT) IT +# define BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(IT) IT +#endif +#ifdef BOOST_FUSION_ITER_FOLD +# define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(IT) IT& +# define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(IT) IT +#else +# define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(IT) \ + typename fusion::result_of::deref<IT>::type +# define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(IT) fusion::deref(IT) +#endif + +namespace boost { namespace fusion +{ + namespace detail + { + template<typename State, typename It, typename F> + struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state) + : boost::result_of< + F( + typename add_reference<typename add_const<State>::type>::type, + BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(It)) + > + {}; + + template<typename Result,int N> + struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME) + { + template<typename State, typename It0, typename F> + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It0 const + >::type + It1; + It1 it1 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0); + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It1 + >::type + It2; + It2 it2 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it1); + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It2 + >::type + It3; + It3 it3 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it2); + + typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State,It0,F>::type State1; + State1 const state1=f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)); + + typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State1,It1,F>::type State2; + State2 const state2=f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1)); + + typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State2,It2,F>::type State3; + State3 const state3=f(state2,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it2)); + + return BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)< + Result + , N-4 + >::call( + f(state3,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it3)), + fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it3), + f); + } + }; + + template<typename Result> + struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,3> + { + template<typename State, typename It0, typename F> + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It0 const + >::type + It1; + It1 it1 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0); + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It1 + >::type + It2; + It2 it2 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it1); + + typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State,It0,F>::type State1; + State1 const state1=f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)); + + typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State1,It1,F>::type State2; + State2 const state2=f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1)); + + return f(state2,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it2)); + } + }; + + template<typename Result> + struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,2> + { + template<typename State, typename It0, typename F> + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State,It0,F>::type State1; + State1 const state1=f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)); + + return f( + state1, + BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM( + fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0))); + } + }; + + template<typename Result> + struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,1> + { + template<typename State, typename It0, typename F> + static Result + call(State const& state,It0 const& it0,F f) + { + return f(state, + BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)); + } + }; + + template<typename Result> + struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,0> + { + template<typename State, typename It0, typename F> + static Result + call(State const& state,It0 const& it0,F f) + { + return static_cast<Result>(state); + } + }; + + template<typename StateRef, typename It0, typename F, int N> + struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME) + { + typedef typename + BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It0 const + >::type + it1; + typedef typename + BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + rest1 + , it1 + , F + >::type + rest2; + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<it1>::type + it2; + typedef typename + BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + rest2 + , it2 + , F + >::type + rest3; + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<it2>::type + it3; + + typedef typename + BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)< + typename BOOST_PP_CAT( + BOOST_FUSION_FOLD_NAME, _lvalue_state)< + rest3 + , it3 + , F + >::type + , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + it3 + >::type + , F + , N-4 + >::type + type; + }; + + template<typename StateRef, typename It0, typename F> + struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)< + StateRef + , It0 + , F + , 3 + > + { + typedef typename + BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It0 const + >::type + it1; + + typedef typename + BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + typename BOOST_PP_CAT( + BOOST_FUSION_FOLD_NAME, _lvalue_state)< + rest1 + , it1 + , F + >::type + , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + it1 const + >::type const + , F + >::type + type; + }; + + template<typename StateRef, typename It0, typename F> + struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)< + StateRef + , It0 + , F + , 2 + > + : BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + StateRef + , It0 const + , F + >::type + , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It0 const + >::type const + , F + > + {}; + + template<typename StateRef, typename It0, typename F> + struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)< + StateRef + , It0 + , F + , 1 + > + : BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)< + StateRef + , It0 const + , F + > + {}; + + template<typename StateRef, typename It0, typename F> + struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)< + StateRef + , It0 + , F + , 0 + > + { + typedef StateRef type; + }; + + template<typename StateRef, typename It0, typename F, int SeqSize> + struct BOOST_PP_CAT(result_of_first_unrolled,BOOST_FUSION_FOLD_NAME) + { + typedef typename + BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)< + typename boost::result_of< + F( + StateRef, + BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM( + It0 const) + ) + >::type + , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION< + It0 const + >::type + , F + , SeqSize-1 + >::type + type; + }; + + template<int SeqSize, typename StateRef, typename It0, typename F> + struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl) + { + typedef typename + BOOST_PP_CAT( + result_of_first_unrolled,BOOST_FUSION_FOLD_NAME)< + StateRef + , BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(It0) + , F + , SeqSize + >::type + type; + + static type + call(StateRef state, It0 const& it0, F f) + { + return BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)< + type + , SeqSize + >::call(state,BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(it0),f); + } + }; + + template<typename StateRef, typename It0, typename F> + struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<0,StateRef,It0,F> + { + typedef StateRef type; + + static StateRef + call(StateRef state, It0 const&, F) + { + return static_cast<StateRef>(state); + } + }; + } + + namespace result_of + { + template<typename Seq, typename State, typename F> + struct BOOST_FUSION_FOLD_NAME + : detail::BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)< + size<Seq>::value + , typename add_reference< + typename add_const<State>::type + >::type + , typename BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION<Seq>::type + , F + > + {}; + } + + template<typename Seq, typename State, typename F> + inline typename result_of::BOOST_FUSION_FOLD_NAME< + Seq + , State const + , F + >::type + BOOST_FUSION_FOLD_NAME(Seq& seq,State const& state,F f) + { + return result_of::BOOST_FUSION_FOLD_NAME<Seq,State const,F>::call( + state, + fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq), + f); + } + + template<typename Seq, typename State, typename F> + inline typename result_of::BOOST_FUSION_FOLD_NAME< + Seq const + , State const + , F + >::type + BOOST_FUSION_FOLD_NAME(Seq const& seq,State const& state,F f) + { + return result_of::BOOST_FUSION_FOLD_NAME<Seq const,State const,F>::call( + state, + fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq), + f); + } +}} + +#undef BOOST_FUSION_FOLD_NAME +#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION +#undef BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION +#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM +#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM +#undef BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM +#undef BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/for_each.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/for_each.hpp new file mode 100644 index 0000000..a23517c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/for_each.hpp @@ -0,0 +1,130 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_FOR_EACH_05052005_1028) +#define FUSION_FOR_EACH_05052005_1028 + +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/iterator/distance.hpp> +#include <boost/mpl/bool.hpp> + +namespace boost { namespace fusion { +namespace detail +{ + template <typename First, typename Last, typename F> + inline void + for_each_linear(First const&, Last const&, F const&, mpl::true_) + { + } + + template <typename First, typename Last, typename F> + inline void + for_each_linear(First const& first, Last const& last, F const& f, mpl::false_) + { + f(*first); + detail::for_each_linear(fusion::next(first), last, f, + result_of::equal_to<typename result_of::next<First>::type, Last>()); + } + + + template <typename Sequence, typename F, typename Tag> + inline void + for_each(Sequence& seq, F const& f, Tag) + { + detail::for_each_linear( + fusion::begin(seq) + , fusion::end(seq) + , f + , result_of::equal_to< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type>()); + } + + template<int N> + struct for_each_unrolled + { + template<typename I0, typename F> + static void call(I0 const& i0, F const& f) + { + f(*i0); + typedef typename result_of::next<I0>::type I1; + I1 i1(fusion::next(i0)); + f(*i1); + typedef typename result_of::next<I1>::type I2; + I2 i2(fusion::next(i1)); + f(*i2); + typedef typename result_of::next<I2>::type I3; + I3 i3(fusion::next(i2)); + f(*i3); + for_each_unrolled<N-4>::call(fusion::next(i3), f); + } + }; + + template<> + struct for_each_unrolled<3> + { + template<typename I0, typename F> + static void call(I0 const& i0, F const& f) + { + f(*i0); + typedef typename result_of::next<I0>::type I1; + I1 i1(fusion::next(i0)); + f(*i1); + typedef typename result_of::next<I1>::type I2; + I2 i2(fusion::next(i1)); + f(*i2); + } + }; + + template<> + struct for_each_unrolled<2> + { + template<typename I0, typename F> + static void call(I0 const& i0, F const& f) + { + f(*i0); + typedef typename result_of::next<I0>::type I1; + I1 i1(fusion::next(i0)); + f(*i1); + } + }; + + template<> + struct for_each_unrolled<1> + { + template<typename I0, typename F> + static void call(I0 const& i0, F const& f) + { + f(*i0); + } + }; + + template<> + struct for_each_unrolled<0> + { + template<typename It, typename F> + static void call(It const&, F const&) + { + } + }; + + template <typename Sequence, typename F> + inline void + for_each(Sequence& seq, F const& f, random_access_traversal_tag) + { + typedef typename result_of::begin<Sequence>::type begin; + typedef typename result_of::end<Sequence>::type end; + for_each_unrolled<result_of::distance<begin, end>::type::value>::call(fusion::begin(seq), f); + } +}}} + + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/fold.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/fold.hpp new file mode 100644 index 0000000..347fb4f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/fold.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2001-2007 Joel de Guzman + Copyright (c) 2007 Dan Marsden + Copyright (c) 2009-2010 Christopher Schmidt + + 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_ALGORITHM_ITERATION_FOLD_HPP +#define BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP + +#include <boost/fusion/algorithm/iteration/detail/fold.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/for_each.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/for_each.hpp new file mode 100644 index 0000000..fffb0f0 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/for_each.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_FOR_EACH_20070527_0943) +#define BOOST_FUSION_FOR_EACH_20070527_0943 + +#include <boost/fusion/algorithm/iteration/detail/for_each.hpp> + +#include <boost/fusion/support/category_of.hpp> + +namespace boost { namespace fusion { + + namespace result_of + { + template <typename Sequence, typename F> + struct for_each + { + typedef void type; + }; + } + + struct random_access_traversal_tag; + + template <typename Sequence, typename F> + inline void + for_each(Sequence& seq, F const& f) + { + detail::for_each(seq, f, typename traits::category_of<Sequence>::type()); + } + + template <typename Sequence, typename F> + inline void + for_each(Sequence const& seq, F const& f) + { + detail::for_each(seq, f, typename traits::category_of<Sequence>::type()); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/any.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/any.hpp new file mode 100644 index 0000000..be4ef09 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/any.hpp @@ -0,0 +1,35 @@ +/*============================================================================= + Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005 Eric Niebler + 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) +==============================================================================*/ +#if !defined(FUSION_ANY_05052005_1230) +#define FUSION_ANY_05052005_1230 + +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/algorithm/query/detail/any.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename F> + struct any + { + typedef bool type; + }; + } + + template <typename Sequence, typename F> + inline bool + any(Sequence const& seq, F f) + { + return detail::any(seq, f, typename traits::category_of<Sequence>::type()); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/any.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/any.hpp new file mode 100644 index 0000000..31bbaa5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/any.hpp @@ -0,0 +1,130 @@ +/*============================================================================= + Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005 Eric Niebler + 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) +==============================================================================*/ +#if !defined(FUSION_ANY_05052005_1229) +#define FUSION_ANY_05052005_1229 + +#include <boost/mpl/bool.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/advance.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/iterator/distance.hpp> + +namespace boost { namespace fusion { + struct random_access_traversal_tag; +namespace detail +{ + template <typename First, typename Last, typename F> + inline bool + linear_any(First const&, Last const&, F const&, mpl::true_) + { + return false; + } + + template <typename First, typename Last, typename F> + inline bool + linear_any(First const& first, Last const& last, F& f, mpl::false_) + { + typename result_of::deref<First>::type x = *first; + return f(x) || + detail::linear_any( + fusion::next(first) + , last + , f + , result_of::equal_to<typename result_of::next<First>::type, Last>()); + } + + template <typename Sequence, typename F, typename Tag> + inline bool + any(Sequence const& seq, F f, Tag) + { + return detail::linear_any( + fusion::begin(seq) + , fusion::end(seq) + , f + , result_of::equal_to< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type>()); + } + + template<int N> + struct unrolled_any + { + template <typename It, typename F> + static bool call(It const& it, F f) + { + return + f(*it) || + f(*fusion::advance_c<1>(it))|| + f(*fusion::advance_c<2>(it)) || + f(*fusion::advance_c<3>(it)) || + detail::unrolled_any<N-4>::call(fusion::advance_c<4>(it), f); + } + }; + + template<> + struct unrolled_any<3> + { + template <typename It, typename F> + static bool call(It const& it, F f) + { + return + f(*it) || + f(*fusion::advance_c<1>(it)) || + f(*fusion::advance_c<2>(it)); + } + }; + + template<> + struct unrolled_any<2> + { + template <typename It, typename F> + static bool call(It const& it, F f) + { + return + f(*it) || + f(*fusion::advance_c<1>(it)); + } + }; + + template<> + struct unrolled_any<1> + { + template <typename It, typename F> + static bool call(It const& it, F f) + { + return f(*it); + } + }; + + template<> + struct unrolled_any<0> + { + template <typename It, typename F> + static bool call(It const& it, F f) + { + return false; + } + }; + + template <typename Sequence, typename F> + inline bool + any(Sequence const& seq, F f, random_access_traversal_tag) + { + typedef typename result_of::begin<Sequence>::type begin; + typedef typename result_of::end<Sequence>::type end; + return detail::unrolled_any<result_of::distance<begin, end>::type::value>::call( + fusion::begin(seq), f); + } +}}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/find_if.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/find_if.hpp new file mode 100644 index 0000000..5d2a741 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/find_if.hpp @@ -0,0 +1,232 @@ +/*============================================================================= + Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2007 Dan Marsden + Copyright (c) 2009 Christopher Schmidt + + 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_FIND_IF_05052005_1107) +#define FUSION_FIND_IF_05052005_1107 + +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/or.hpp> +#include <boost/mpl/lambda.hpp> +#include <boost/mpl/apply.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/iterator/advance.hpp> +#include <boost/fusion/iterator/distance.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/identity.hpp> + +namespace boost { namespace fusion { + struct random_access_traversal_tag; +namespace detail +{ + template <typename Iterator, typename Pred> + struct apply_filter + { + typedef typename mpl::apply1< + Pred, Iterator>::type type; + BOOST_STATIC_CONSTANT(int, value = type::value); + }; + + template <typename First, typename Last, typename Pred> + struct main_find_if; + + template <typename First, typename Last, typename Pred> + struct recursive_find_if + { + typedef typename + main_find_if< + typename result_of::next<First>::type, Last, Pred + >::type + type; + }; + + template <typename First, typename Last, typename Pred> + struct main_find_if + { + typedef mpl::or_< + result_of::equal_to<First, Last> + , apply_filter<First, Pred> > + filter; + + typedef typename + mpl::eval_if< + filter + , mpl::identity<First> + , recursive_find_if<First, Last, Pred> + >::type + type; + }; + + template< + typename First, typename Last, + typename Pred, bool> + struct choose_find_if; + + template<typename First, typename Last, typename Pred> + struct choose_find_if<First, Last, Pred, false> + : main_find_if<First, Last, Pred> + {}; + + template<typename Iter, typename Pred, int n, int unrolling> + struct unroll_again; + + template <typename Iter, typename Pred, int offset> + struct apply_offset_filter + { + typedef typename result_of::advance_c<Iter, offset>::type Shifted; + typedef typename + mpl::apply1< + Pred + , Shifted + >::type + type; + BOOST_STATIC_CONSTANT(int, value = type::value); + }; + + template<typename Iter, typename Pred, int n> + struct unrolled_find_if + { + typedef typename mpl::eval_if< + apply_filter<Iter, Pred>, + mpl::identity<Iter>, + mpl::eval_if< + apply_offset_filter<Iter, Pred, 1>, + result_of::advance_c<Iter, 1>, + mpl::eval_if< + apply_offset_filter<Iter, Pred, 2>, + result_of::advance_c<Iter, 2>, + mpl::eval_if< + apply_offset_filter<Iter, Pred, 3>, + result_of::advance_c<Iter, 3>, + unroll_again< + Iter, + Pred, + n, + 4> > > > >::type type; + }; + + template<typename Iter, typename Pred> + struct unrolled_find_if<Iter, Pred, 3> + { + typedef typename mpl::eval_if< + apply_filter<Iter, Pred>, + mpl::identity<Iter>, + mpl::eval_if< + apply_offset_filter<Iter, Pred, 1>, + result_of::advance_c<Iter, 1>, + mpl::eval_if< + apply_offset_filter<Iter, Pred, 2>, + result_of::advance_c<Iter, 2>, + result_of::advance_c<Iter, 3> > > >::type type; + }; + + template<typename Iter, typename Pred> + struct unrolled_find_if<Iter, Pred, 2> + { + typedef typename mpl::eval_if< + apply_filter<Iter, Pred>, + mpl::identity<Iter>, + mpl::eval_if< + apply_offset_filter<Iter, Pred, 1>, + result_of::advance_c<Iter, 1>, + result_of::advance_c<Iter, 2> > >::type type; + }; + + template<typename Iter, typename Pred> + struct unrolled_find_if<Iter, Pred, 1> + { + typedef typename mpl::eval_if< + apply_filter<Iter, Pred>, + mpl::identity<Iter>, + result_of::advance_c<Iter, 1> >::type type; + }; + + template<typename Iter, typename Pred, int n, int unrolling> + struct unroll_again + { + typedef typename unrolled_find_if< + typename result_of::advance_c<Iter, unrolling>::type, + Pred, + n-unrolling>::type type; + }; + + template<typename Iter, typename Pred> + struct unrolled_find_if<Iter, Pred, 0> + { + typedef Iter type; + }; + + template<typename First, typename Last, typename Pred> + struct choose_find_if<First, Last, Pred, true> + { + typedef typename result_of::distance<First, Last>::type N; + typedef typename unrolled_find_if<First, Pred, N::value>::type type; + }; + + template <typename First, typename Last, typename Pred> + struct static_find_if + { + typedef typename + choose_find_if< + First + , Last + , typename mpl::lambda<Pred>::type + , is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value + >::type + type; + + template <typename Iterator> + static type + recursive_call(Iterator const& iter, mpl::true_) + { + return iter; + } + + template <typename Iterator> + static type + recursive_call(Iterator const& iter, mpl::false_) + { + return recursive_call(fusion::next(iter)); + } + + template <typename Iterator> + static type + recursive_call(Iterator const& iter) + { + typedef result_of::equal_to<Iterator, type> found; + return recursive_call(iter, found()); + } + + template <typename Iterator, typename Tag> + static type + choose_call(Iterator const& iter, Tag) + { + return recursive_call(iter); + } + + template <typename Iterator> + static type + choose_call(Iterator const& iter, random_access_traversal_tag) + { + typedef typename result_of::distance<Iterator, type>::type N; + return fusion::advance<N>(iter); + } + + template <typename Iterator> + static type + call(Iterator const& iter) + { + return choose_call(iter, typename traits::category_of<Iterator>::type()); + } + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/find.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/find.hpp new file mode 100644 index 0000000..6beb900 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/find.hpp @@ -0,0 +1,72 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_FIND_05052005_1107) +#define FUSION_FIND_05052005_1107 + +#include <boost/fusion/algorithm/query/detail/find_if.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/key_of.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/mpl/if.hpp> +#include <boost/type_traits/is_same.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/utility/enable_if.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template < + typename Sequence + , typename T + > + struct find + { + typedef + detail::static_find_if< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type + , is_same< + typename mpl::if_< + traits::is_associative<Sequence> + , key_of<mpl::_1> + , value_of<mpl::_1> + >::type + , T + > + > + filter; + + typedef typename filter::type type; + }; + } + + template <typename T, typename Sequence> + inline typename + lazy_disable_if< + is_const<Sequence> + , result_of::find<Sequence, T> + >::type const + find(Sequence& seq) + { + typedef typename result_of::find<Sequence, T>::filter filter; + return filter::call(fusion::begin(seq)); + } + + template <typename T, typename Sequence> + inline typename result_of::find<Sequence const, T>::type const + find(Sequence const& seq) + { + typedef typename result_of::find<Sequence const, T>::filter filter; + return filter::call(fusion::begin(seq)); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase.hpp new file mode 100644 index 0000000..d0405c3 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase.hpp @@ -0,0 +1,108 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ERASE_07232005_0534) +#define FUSION_ERASE_07232005_0534 + +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/container/vector/vector10.hpp> +#include <boost/fusion/view/joint_view/joint_view.hpp> +#include <boost/fusion/view/iterator_range/iterator_range.hpp> +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename First> + struct compute_erase_last // put this in detail!!! + { + typedef typename result_of::end<Sequence>::type seq_last_type; + typedef typename convert_iterator<First>::type first_type; + typedef typename + mpl::if_< + result_of::equal_to<first_type, seq_last_type> + , first_type + , typename result_of::next<first_type>::type + >::type + type; + + static type + call(First const& first, mpl::false_) + { + return fusion::next(convert_iterator<First>::call(first)); + } + + static type + call(First const& first, mpl::true_) + { + return convert_iterator<First>::call(first); + } + + static type + call(First const& first) + { + return call(first, result_of::equal_to<first_type, seq_last_type>()); + } + }; + + template < + typename Sequence + , typename First + , typename Last = typename compute_erase_last<Sequence, First>::type> + struct erase + { + typedef typename result_of::begin<Sequence>::type seq_first_type; + typedef typename result_of::end<Sequence>::type seq_last_type; + BOOST_STATIC_ASSERT((!result_of::equal_to<seq_first_type, seq_last_type>::value)); + + typedef typename convert_iterator<First>::type first_type; + typedef typename convert_iterator<Last>::type last_type; + typedef iterator_range<seq_first_type, first_type> left_type; + typedef iterator_range<last_type, seq_last_type> right_type; + typedef joint_view<left_type, right_type> type; + }; + } + + template <typename Sequence, typename First> + typename result_of::erase<Sequence const, First>::type + erase(Sequence const& seq, First const& first) + { + typedef result_of::erase<Sequence const, First> result_of; + typedef typename result_of::left_type left_type; + typedef typename result_of::right_type right_type; + typedef typename result_of::type result_type; + + left_type left( + fusion::begin(seq) + , convert_iterator<First>::call(first)); + right_type right( + fusion::result_of::compute_erase_last<Sequence const, First>::call(first) + , fusion::end(seq)); + return result_type(left, right); + } + + template <typename Sequence, typename First, typename Last> + typename result_of::erase<Sequence const, First, Last>::type + erase(Sequence const& seq, First const& first, Last const& last) + { + typedef result_of::erase<Sequence const, First, Last> result_of; + typedef typename result_of::left_type left_type; + typedef typename result_of::right_type right_type; + typedef typename result_of::type result_type; + + left_type left(fusion::begin(seq), first); + right_type right(last, fusion::end(seq)); + return result_type(left, right); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase_key.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase_key.hpp new file mode 100644 index 0000000..0312869 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase_key.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_ERASE_KEY_10022005_1851) +#define FUSION_ERASE_KEY_10022005_1851 + +#include <boost/fusion/algorithm/query/find.hpp> +#include <boost/fusion/algorithm/transformation/erase.hpp> +#include <boost/mpl/not.hpp> +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename Key> + struct erase_key + : erase<Sequence, typename find<Sequence, Key>::type> + {}; + } + + template <typename Key, typename Sequence> + inline typename result_of::erase_key<Sequence const, Key>::type + erase_key(Sequence const& seq) + { + return erase(seq, find<Key>(seq)); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/filter_if.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/filter_if.hpp new file mode 100644 index 0000000..d13113b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/filter_if.hpp @@ -0,0 +1,32 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_FILTER_IF_07172005_0818) +#define FUSION_FILTER_IF_07172005_0818 + +#include <boost/fusion/view/filter_view/filter_view.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename Pred> + struct filter_if + { + typedef filter_view<Sequence, Pred> type; + }; + } + + template <typename Pred, typename Sequence> + inline typename result_of::filter_if<Sequence const, Pred>::type + filter_if(Sequence const& seq) + { + return filter_view<Sequence const, Pred>(seq); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert.hpp new file mode 100644 index 0000000..1702bc1 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert.hpp @@ -0,0 +1,63 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INSERT_07222005_0730) +#define FUSION_INSERT_07222005_0730 + +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/container/vector/vector10.hpp> +#include <boost/fusion/view/joint_view/joint_view.hpp> +#include <boost/fusion/view/single_view/single_view.hpp> +#include <boost/fusion/view/iterator_range/iterator_range.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename Position, typename T> + struct insert + { + typedef typename detail::as_fusion_element<T>::type element_type; + typedef typename convert_iterator<Position>::type pos_type; + typedef typename result_of::begin<Sequence>::type first_type; + typedef typename result_of::end<Sequence>::type last_type; + + typedef iterator_range<first_type, pos_type> left_type; + typedef iterator_range<pos_type, last_type> right_type; + typedef fusion::single_view<element_type> single_view; + typedef joint_view<left_type, single_view const> left_insert_type; + typedef joint_view<left_insert_type, right_type> type; + }; + } + + template <typename Sequence, typename Position, typename T> + inline typename result_of::insert< + Sequence const, Position, T>::type + insert(Sequence const& seq, Position const& pos, T const& x) + { + typedef result_of::insert< + Sequence const, Position, T> + result_of; + typedef typename result_of::left_type left_type; + typedef typename result_of::right_type right_type; + typedef typename result_of::single_view single_view; + typedef typename result_of::left_insert_type left_insert_type; + typedef typename result_of::type result; + + left_type left(fusion::begin(seq), convert_iterator<Position>::call(pos)); + right_type right(convert_iterator<Position>::call(pos), fusion::end(seq)); + single_view insert(x); + left_insert_type left_insert(left, insert); + return result(left_insert, right); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert_range.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert_range.hpp new file mode 100644 index 0000000..1915c41 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert_range.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_INSERT_RANGE_009172005_1147) +#define FUSION_INSERT_RANGE_009172005_1147 + +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/container/vector/vector10.hpp> +#include <boost/fusion/view/joint_view/joint_view.hpp> +#include <boost/fusion/view/iterator_range/iterator_range.hpp> +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename Position, typename Range> + struct insert_range + { + typedef typename convert_iterator<Position>::type pos_type; + typedef typename result_of::begin<Sequence>::type first_type; + typedef typename result_of::end<Sequence>::type last_type; + + typedef iterator_range<first_type, pos_type> left_type; + typedef iterator_range<pos_type, last_type> right_type; + typedef joint_view<left_type, Range> left_insert_type; + typedef joint_view<left_insert_type, right_type> type; + }; + } + + template <typename Sequence, typename Position, typename Range> + inline typename result_of::insert_range<Sequence const, Position, Range const>::type + insert_range(Sequence const& seq, Position const& pos, Range const& range) + { + typedef result_of::insert_range<Sequence const, Position, Range const> result_of; + typedef typename result_of::left_type left_type; + typedef typename result_of::right_type right_type; + typedef typename result_of::left_insert_type left_insert_type; + typedef typename result_of::type result; + + left_type left(fusion::begin(seq), convert_iterator<Position>::call(pos)); + right_type right(convert_iterator<Position>::call(pos), fusion::end(seq)); + left_insert_type left_insert(left, range); + return result(left_insert, right); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_back.hpp new file mode 100644 index 0000000..6eb743f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_back.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_POP_BACK_09172005_1038) +#define FUSION_POP_BACK_09172005_1038 + +#include <boost/fusion/view/iterator_range/iterator_range.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence> + struct pop_back + { + typedef + iterator_range< + typename begin<Sequence>::type + , typename prior< + typename end<Sequence>::type + >::type + > + type; + }; + } + + template <typename Sequence> + inline typename result_of::pop_back<Sequence const>::type + pop_back(Sequence const& seq) + { + typedef typename result_of::pop_back<Sequence const>::type result; + return result(fusion::begin(seq), fusion::prior(fusion::end(seq))); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_front.hpp new file mode 100644 index 0000000..aed524d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_front.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_POP_FRONT_09172005_1115) +#define FUSION_POP_FRONT_09172005_1115 + +#include <boost/fusion/view/iterator_range/iterator_range.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/next.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence> + struct pop_front + { + typedef + iterator_range< + typename next< + typename begin<Sequence>::type + >::type + , typename end<Sequence>::type + > + type; + }; + } + + template <typename Sequence> + inline typename result_of::pop_front<Sequence const>::type + pop_front(Sequence const& seq) + { + typedef typename result_of::pop_front<Sequence const>::type result; + return result(fusion::next(fusion::begin(seq)), fusion::end(seq)); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_back.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_back.hpp new file mode 100644 index 0000000..4fadc79 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_back.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PUSH_BACK_07162005_0235) +#define FUSION_PUSH_BACK_07162005_0235 + +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/view/joint_view/joint_view.hpp> +#include <boost/fusion/view/single_view/single_view.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename T> + struct push_back + { + typedef fusion::single_view<typename detail::as_fusion_element<T>::type> single_view; + typedef joint_view<Sequence, single_view const> type; + }; + } + + template <typename Sequence, typename T> + inline typename result_of::push_back<Sequence const, T>::type + push_back(Sequence const& seq, T const& x) + { + typedef typename result_of::push_back<Sequence const, T> push_back; + typedef typename push_back::single_view single_view; + typedef typename push_back::type result; + single_view x_(x); + return result(seq, x_); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_front.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_front.hpp new file mode 100644 index 0000000..10f9fc1 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_front.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PUSH_FRONT_07162005_0749) +#define FUSION_PUSH_FRONT_07162005_0749 + +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/view/joint_view/joint_view.hpp> +#include <boost/fusion/view/single_view/single_view.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence, typename T> + struct push_front + { + typedef fusion::single_view<typename detail::as_fusion_element<T>::type> single_view; + typedef joint_view<single_view const, Sequence> type; + }; + } + + template <typename Sequence, typename T> + inline typename result_of::push_front<Sequence const, T>::type + push_front(Sequence const& seq, T const& x) + { + typedef typename result_of::push_front<Sequence const, T> push_front; + typedef typename push_front::single_view single_view; + typedef typename push_front::type result; + single_view x_(x); + return result(x_, seq); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/reverse.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/reverse.hpp new file mode 100644 index 0000000..b95461c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/reverse.hpp @@ -0,0 +1,32 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_REVERSE_07212005_1230) +#define FUSION_REVERSE_07212005_1230 + +#include <boost/fusion/view/reverse_view/reverse_view.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence> + struct reverse + { + typedef reverse_view<Sequence> type; + }; + } + + template <typename Sequence> + inline reverse_view<Sequence const> + reverse(Sequence const& view) + { + return reverse_view<Sequence const>(view); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/transform.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/transform.hpp new file mode 100644 index 0000000..681319b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/transform.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_TRANSFORM_07052005_1057) +#define FUSION_TRANSFORM_07052005_1057 + +#include <boost/fusion/view/transform_view/transform_view.hpp> + +namespace boost { namespace fusion +{ + struct void_; + + namespace result_of + { + template <typename Sequence1, typename Sequence2, typename F = void_> + struct transform + { + typedef transform_view<Sequence1, Sequence2, F> type; + }; + + template <typename Sequence, typename F> +#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) + struct transform<Sequence, F, void_> +#else + struct transform<Sequence, F> +#endif + { + typedef transform_view<Sequence, F> type; + }; + } + + template <typename Sequence, typename F> + inline typename result_of::transform<Sequence const, F>::type + transform(Sequence const& seq, F f) + { + return transform_view<Sequence const, F>(seq, f); + } + + template <typename Sequence1, typename Sequence2, typename F> + inline typename result_of::transform<Sequence1 const, Sequence2 const, F>::type + transform(Sequence1 const& seq1, Sequence2 const& seq2, F f) + { + return transform_view<Sequence1 const, Sequence2 const, F>(seq1, seq2, f); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/deque/deque_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/deque/deque_fwd.hpp new file mode 100644 index 0000000..415bb2f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/deque/deque_fwd.hpp @@ -0,0 +1,24 @@ +/*============================================================================= + Copyright (c) 2005-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) +==============================================================================*/ +#if !defined(FUSION_DEQUE_FORWARD_02092007_0749) +#define FUSION_DEQUE_FORWARD_02092007_0749 + +#include <boost/fusion/container/deque/limits.hpp> +#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> + +namespace boost { namespace fusion +{ + struct void_; + + template< + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_DEQUE_SIZE, typename T, void_)> + struct deque; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/deque/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/deque/limits.hpp new file mode 100644 index 0000000..2262f17 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/deque/limits.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737) +#define BOOST_FUSION_DEQUE_LIMITS_26112006_1737 + +#if !defined(FUSION_MAX_DEQUE_SIZE) +#define FUSION_MAX_DEQUE_SIZE 10 +#endif + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/generation/make_cons.hpp b/3rdParty/Boost/src/boost/fusion/container/generation/make_cons.hpp new file mode 100644 index 0000000..47a2f46 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/generation/make_cons.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_MAKE_CONS_07172005_0918) +#define FUSION_MAKE_CONS_07172005_0918 + +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/container/list/cons.hpp> + +namespace boost { namespace fusion +{ + struct nil; + + namespace result_of + { + template <typename Car, typename Cdr = nil> + struct make_cons + { + typedef cons<typename detail::as_fusion_element<Car>::type, Cdr> type; + }; + } + + template <typename Car> + inline cons<typename detail::as_fusion_element<Car>::type> + make_cons(Car const& car) + { + return cons<typename detail::as_fusion_element<Car>::type>(car); + } + + template <typename Car, typename Cdr> + inline cons<typename detail::as_fusion_element<Car>::type, Cdr> + make_cons(Car const& car, Cdr const& cdr) + { + return cons<typename detail::as_fusion_element<Car>::type, Cdr>(car, cdr); + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/generation/make_vector.hpp b/3rdParty/Boost/src/boost/fusion/container/generation/make_vector.hpp new file mode 100644 index 0000000..868ad0c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/generation/make_vector.hpp @@ -0,0 +1,91 @@ +/*============================================================================= + 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_PP_IS_ITERATING +#if !defined(FUSION_MAKE_VECTOR_07162005_0243) +#define FUSION_MAKE_VECTOR_07162005_0243 + +#include <boost/preprocessor/iterate.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> +#include <boost/fusion/container/vector/vector.hpp> +#include <boost/fusion/support/detail/as_fusion_element.hpp> + +namespace boost { namespace fusion +{ + struct void_; + + namespace result_of + { + template < + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_VECTOR_SIZE, typename T, void_) + , typename Extra = void_ + > + struct make_vector; + + template <> + struct make_vector<> + { + typedef vector0<> type; + }; + } + + inline vector0<> + make_vector() + { + return vector0<>(); + } + +#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \ + typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type + +#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_vector.hpp> +#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) +#include BOOST_PP_ITERATE() + +#undef BOOST_FUSION_AS_FUSION_ELEMENT + +}} + +#endif +#else // defined(BOOST_PP_IS_ITERATING) +/////////////////////////////////////////////////////////////////////////////// +// +// Preprocessor vertical repetition code +// +/////////////////////////////////////////////////////////////////////////////// + +#define N BOOST_PP_ITERATION() + + namespace result_of + { + template <BOOST_PP_ENUM_PARAMS(N, typename T)> +#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) + #define TEXT(z, n, text) , text + struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) > + #undef TEXT +#else + struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)> +#endif + { + typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type; + }; + } + + template <BOOST_PP_ENUM_PARAMS(N, typename T)> + inline BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> + make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _)) + { + return BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>( + BOOST_PP_ENUM_PARAMS(N, _)); + } + +#undef N +#endif // defined(BOOST_PP_IS_ITERATING) + diff --git a/3rdParty/Boost/src/boost/fusion/container/list/cons.hpp b/3rdParty/Boost/src/boost/fusion/container/list/cons.hpp new file mode 100644 index 0000000..e274561 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/cons.hpp @@ -0,0 +1,143 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_CONS_07172005_0843) +#define FUSION_CONS_07172005_0843 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/container/list/cons_iterator.hpp> +#include <boost/fusion/container/list/detail/begin_impl.hpp> +#include <boost/fusion/container/list/detail/end_impl.hpp> +#include <boost/fusion/container/list/detail/at_impl.hpp> +#include <boost/fusion/container/list/detail/value_at_impl.hpp> +#include <boost/fusion/container/list/detail/empty_impl.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/utility/enable_if.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/or.hpp> + +namespace boost { namespace fusion +{ + struct void_; + struct cons_tag; + struct forward_traversal_tag; + struct fusion_sequence_tag; + + struct nil : sequence_base<nil> + { + typedef mpl::int_<0> size; + typedef cons_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::false_ is_view; + typedef forward_traversal_tag category; + typedef void_ car_type; + typedef void_ cdr_type; + + nil() {} + + template <typename Iterator> + nil(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/) + {} + + template <typename Iterator> + void assign_from_iter(Iterator const& /*iter*/) + { + } + }; + + template <typename Car, typename Cdr = nil> + struct cons : sequence_base<cons<Car, Cdr> > + { + typedef mpl::int_<Cdr::size::value+1> size; + typedef cons_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::false_ is_view; + typedef forward_traversal_tag category; + typedef Car car_type; + typedef Cdr cdr_type; + + cons() + : car(), cdr() {} + + explicit cons(typename detail::call_param<Car>::type in_car) + : car(in_car), cdr() {} + + cons( + typename detail::call_param<Car>::type in_car + , typename detail::call_param<Cdr>::type in_cdr) + : car(in_car), cdr(in_cdr) {} + + template <typename Car2, typename Cdr2> + cons(cons<Car2, Cdr2> const& rhs) + : car(rhs.car), cdr(rhs.cdr) {} + + cons(cons const& rhs) + : car(rhs.car), cdr(rhs.cdr) {} + + template <typename Sequence> + cons( + Sequence const& seq + , typename disable_if< + mpl::or_< + is_convertible<Sequence, cons> // use copy ctor instead + , is_convertible<Sequence, Car> // use copy to car instead + > + >::type* /*dummy*/ = 0 + ) + : car(*fusion::begin(seq)) + , cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {} + + template <typename Iterator> + cons(Iterator const& iter, mpl::true_ /*this_is_an_iterator*/) + : car(*iter) + , cdr(fusion::next(iter), mpl::true_()) {} + + template <typename Car2, typename Cdr2> + cons& operator=(cons<Car2, Cdr2> const& rhs) + { + car = rhs.car; + cdr = rhs.cdr; + return *this; + } + + cons& operator=(cons const& rhs) + { + car = rhs.car; + cdr = rhs.cdr; + return *this; + } + + template <typename Sequence> + typename disable_if<is_convertible<Sequence, Car>, cons&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin<Sequence const>::type Iterator; + Iterator iter = fusion::begin(seq); + this->assign_from_iter(iter); + return *this; + } + + template <typename Iterator> + void assign_from_iter(Iterator const& iter) + { + car = *iter; + cdr.assign_from_iter(fusion::next(iter)); + } + + car_type car; + cdr_type cdr; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/list/cons_iterator.hpp b/3rdParty/Boost/src/boost/fusion/container/list/cons_iterator.hpp new file mode 100644 index 0000000..1eff153 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/cons_iterator.hpp @@ -0,0 +1,89 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_CONS_ITERATOR_07172005_0849) +#define FUSION_CONS_ITERATOR_07172005_0849 + +#include <boost/type_traits/add_const.hpp> +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/container/list/detail/deref_impl.hpp> +#include <boost/fusion/container/list/detail/next_impl.hpp> +#include <boost/fusion/container/list/detail/value_of_impl.hpp> +#include <boost/fusion/container/list/detail/equal_to_impl.hpp> +#include <boost/fusion/container/list/list_fwd.hpp> + +namespace boost { namespace fusion +{ + struct nil; + struct cons_iterator_tag; + struct forward_traversal_tag; + + template <typename Cons> + struct cons_iterator_identity; + + template <typename Cons = nil> + struct cons_iterator : iterator_base<cons_iterator<Cons> > + { + typedef cons_iterator_tag fusion_tag; + typedef forward_traversal_tag category; + typedef Cons cons_type; + typedef cons_iterator_identity< + typename add_const<Cons>::type> + identity; + + explicit cons_iterator(cons_type& in_cons) + : cons(in_cons) {} + + cons_type& cons; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + cons_iterator& operator= (cons_iterator const&); + }; + + struct nil_iterator : iterator_base<nil_iterator> + { + typedef forward_traversal_tag category; + typedef cons_iterator_tag fusion_tag; + typedef nil cons_type; + typedef cons_iterator_identity< + add_const<nil>::type> + identity; + nil_iterator() {} + explicit nil_iterator(nil const&) {} + }; + + template <> + struct cons_iterator<nil> : nil_iterator + { + cons_iterator() {} + explicit cons_iterator(nil const&) {} + }; + + template <> + struct cons_iterator<nil const> : nil_iterator + { + cons_iterator() {} + explicit cons_iterator(nil const&) {} + }; + + template <> + struct cons_iterator<list<> > : nil_iterator + { + cons_iterator() {} + explicit cons_iterator(nil const&) {} + }; + + template <> + struct cons_iterator<list<> const> : nil_iterator + { + cons_iterator() {} + explicit cons_iterator(nil const&) {} + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/convert.hpp b/3rdParty/Boost/src/boost/fusion/container/list/convert.hpp new file mode 100644 index 0000000..418158c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/convert.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_CONVERT_09232005_1215) +#define FUSION_CONVERT_09232005_1215 + +#include <boost/fusion/container/list/cons.hpp> +#include <boost/fusion/container/list/detail/build_cons.hpp> +#include <boost/fusion/container/list/detail/convert_impl.hpp> +#include <boost/fusion/sequence/intrinsic/empty.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence> + struct as_list + { + typedef typename + detail::build_cons< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type + > + build_cons; + + typedef typename build_cons::type type; + + static type + call(Sequence& seq) + { + return build_cons::call(fusion::begin(seq), fusion::end(seq)); + } + }; + } + + template <typename Sequence> + inline typename result_of::as_list<Sequence>::type + as_list(Sequence& seq) + { + return result_of::as_list<Sequence>::call(seq); + } + + template <typename Sequence> + inline typename result_of::as_list<Sequence const>::type + as_list(Sequence const& seq) + { + return result_of::as_list<Sequence const>::call(seq); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/at_impl.hpp new file mode 100644 index 0000000..4dee15d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/at_impl.hpp @@ -0,0 +1,132 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_AT_IMPL_07172005_0726) +#define FUSION_AT_IMPL_07172005_0726 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/bool.hpp> + +namespace boost { namespace fusion +{ + namespace detail + { + template <typename Cons> + struct cons_deref + { + typedef typename Cons::car_type type; + }; + + template <typename Cons, int I> + struct cons_advance + { + typedef typename + cons_advance<Cons, I-1>::type::cdr_type + type; + }; + + template <typename Cons> + struct cons_advance<Cons, 0> + { + typedef Cons type; + }; + + template <typename Cons> + struct cons_advance<Cons, 1> + { + typedef typename Cons::cdr_type type; + }; + + template <typename Cons> + struct cons_advance<Cons, 2> + { +#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above + typedef typename Cons::cdr_type::cdr_type type; +#else + typedef typename Cons::cdr_type _a; + typedef typename _a::cdr_type type; +#endif + }; + + template <typename Cons> + struct cons_advance<Cons, 3> + { +#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above + typedef typename Cons::cdr_type::cdr_type::cdr_type type; +#else + typedef typename Cons::cdr_type _a; + typedef typename _a::cdr_type _b; + typedef typename _b::cdr_type type; +#endif + }; + + template <typename Cons> + struct cons_advance<Cons, 4> + { +#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above + typedef typename Cons::cdr_type::cdr_type::cdr_type::cdr_type type; +#else + typedef typename Cons::cdr_type _a; + typedef typename _a::cdr_type _b; + typedef typename _b::cdr_type _c; + typedef typename _c::cdr_type type; +#endif + }; + } + + struct cons_tag; + + namespace extension + { + template <typename Tag> + struct at_impl; + + template <> + struct at_impl<cons_tag> + { + template <typename Sequence, typename N> + struct apply + { + typedef detail::cons_deref< + typename detail::cons_advance<Sequence, N::value>::type> + element; + + typedef typename + mpl::eval_if< + is_const<Sequence> + , detail::cref_result<element> + , detail::ref_result<element> + >::type + type; + + template <typename Cons, int N2> + static type + call(Cons& s, mpl::int_<N2>) + { + return call(s.cdr, mpl::int_<N2-1>()); + } + + template <typename Cons> + static type + call(Cons& s, mpl::int_<0>) + { + return s.car; + } + + static type + call(Sequence& s) + { + return call(s, mpl::int_<N::value>()); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/begin_impl.hpp new file mode 100644 index 0000000..a22c9a3 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/begin_impl.hpp @@ -0,0 +1,49 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_BEGIN_IMPL_07172005_0824) +#define FUSION_BEGIN_IMPL_07172005_0824 + +#include <boost/mpl/if.hpp> +#include <boost/type_traits/is_const.hpp> + +namespace boost { namespace fusion +{ + struct nil; + + struct cons_tag; + + template <typename Car, typename Cdr> + struct cons; + + template <typename Cons> + struct cons_iterator; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<cons_tag> + { + template <typename Sequence> + struct apply + { + typedef cons_iterator<Sequence> type; + + static type + call(Sequence& t) + { + return type(t); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/build_cons.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/build_cons.hpp new file mode 100644 index 0000000..8e6276e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/build_cons.hpp @@ -0,0 +1,58 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BUILD_CONS_09232005_1222) +#define FUSION_BUILD_CONS_09232005_1222 + +#include <boost/fusion/container/list/cons.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/iterator/deref.hpp> + +namespace boost { namespace fusion { namespace detail +{ + template < + typename First + , typename Last + , bool is_empty = result_of::equal_to<First, Last>::value> + struct build_cons; + + template <typename First, typename Last> + struct build_cons<First, Last, true> + { + typedef nil type; + + static nil + call(First const&, Last const&) + { + return nil(); + } + }; + + template <typename First, typename Last> + struct build_cons<First, Last, false> + { + typedef + build_cons<typename result_of::next<First>::type, Last> + next_build_cons; + + typedef cons< + typename result_of::value_of<First>::type + , typename next_build_cons::type> + type; + + static type + call(First const& f, Last const& l) + { + typename result_of::deref<First>::type v = *f; + return type(v, next_build_cons::call(fusion::next(f), l)); + } + }; + +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/convert_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/convert_impl.hpp new file mode 100644 index 0000000..cfe7a1d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/convert_impl.hpp @@ -0,0 +1,51 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_CONVERT_IMPL_09232005_1215) +#define FUSION_CONVERT_IMPL_09232005_1215 + +#include <boost/fusion/container/list/cons.hpp> +#include <boost/fusion/container/list/detail/build_cons.hpp> +#include <boost/fusion/sequence/intrinsic/empty.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> + +namespace boost { namespace fusion +{ + struct cons_tag; + + namespace extension + { + template <typename T> + struct convert_impl; + + template <> + struct convert_impl<cons_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + detail::build_cons< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type + > + build_cons; + + typedef typename build_cons::type type; + + static type + call(Sequence& seq) + { + return build_cons::call(fusion::begin(seq), fusion::end(seq)); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/deref_impl.hpp new file mode 100644 index 0000000..5292dce --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/deref_impl.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_DEREF_IMPL_07172005_0831) +#define FUSION_DEREF_IMPL_07172005_0831 + +#include <boost/mpl/eval_if.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/type_traits/add_reference.hpp> + +namespace boost { namespace fusion +{ + struct cons_iterator_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + template <> + struct deref_impl<cons_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::cons_type cons_type; + typedef typename cons_type::car_type value_type; + + typedef typename mpl::eval_if< + is_const<cons_type> + , add_reference<typename add_const<value_type>::type> + , add_reference<value_type> >::type + type; + + static type + call(Iterator const& i) + { + return i.cons.car; + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/empty_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/empty_impl.hpp new file mode 100644 index 0000000..5c92c73 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/empty_impl.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + Copyright (c) 2007 Tobias Schwinger + + 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_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED + +#include <boost/type_traits/is_convertible.hpp> + +namespace boost { namespace fusion +{ + struct cons_tag; + + struct nil; + + template <typename Car, typename Cdr> + struct cons; + + namespace extension + { + template <typename Tag> + struct empty_impl; + + template <> + struct empty_impl<cons_tag> + { + template <typename Sequence> + struct apply + : boost::is_convertible<Sequence, nil> + {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/end_impl.hpp new file mode 100644 index 0000000..03b5e21 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/end_impl.hpp @@ -0,0 +1,51 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_END_IMPL_07172005_0828) +#define FUSION_END_IMPL_07172005_0828 + +#include <boost/mpl/if.hpp> +#include <boost/type_traits/is_const.hpp> + +namespace boost { namespace fusion +{ + struct nil; + + struct cons_tag; + + template <typename Car, typename Cdr> + struct cons; + + template <typename Cons> + struct cons_iterator; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<cons_tag> + { + template <typename Sequence> + struct apply + { + typedef cons_iterator< + typename mpl::if_<is_const<Sequence>, nil const, nil>::type> + type; + + static type + call(Sequence&) + { + return type(); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/equal_to_impl.hpp new file mode 100644 index 0000000..1192588 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/equal_to_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_EQUAL_TO_IMPL_09172005_1120) +#define FUSION_EQUAL_TO_IMPL_09172005_1120 + +#include <boost/type_traits/is_same.hpp> +#include <boost/mpl/equal_to.hpp> +#include <boost/mpl/and.hpp> + +namespace boost { namespace fusion +{ + struct cons_iterator_tag; + + namespace extension + { + template <typename Tag> + struct equal_to_impl; + + template <> + struct equal_to_impl<cons_iterator_tag> + { + template <typename I1, typename I2> + struct apply + : is_same< + typename I1::identity + , typename I2::identity + > + { + }; + }; + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/next_impl.hpp new file mode 100644 index 0000000..dafa83c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/next_impl.hpp @@ -0,0 +1,59 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_NEXT_IMPL_07172005_0836) +#define FUSION_NEXT_IMPL_07172005_0836 + +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/type_traits/add_const.hpp> + +namespace boost { namespace fusion +{ + struct cons_iterator_tag; + + template <typename Cons> + struct cons_iterator; + + namespace extension + { + template <typename Tag> + struct next_impl; + + template <> + struct next_impl<cons_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::cons_type cons_type; + typedef typename cons_type::cdr_type cdr_type; + + typedef cons_iterator< + typename mpl::eval_if< + is_const<cons_type> + , add_const<cdr_type> + , mpl::identity<cdr_type> + >::type> + type; + + static type + call(Iterator const& i) + { + return type(i.cons.cdr); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_at_impl.hpp new file mode 100644 index 0000000..5f0ff16 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_at_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_VALUE_AT_IMPL_07172005_0952) +#define FUSION_VALUE_AT_IMPL_07172005_0952 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/bool.hpp> + +namespace boost { namespace fusion +{ + struct cons_tag; + + namespace extension + { + template <typename Tag> + struct value_at_impl; + + template <> + struct value_at_impl<cons_tag> + { + template <typename Sequence, typename N> + struct apply + { + typedef typename + mpl::eval_if< + mpl::bool_<N::value == 0> + , mpl::identity<typename Sequence::car_type> + , apply<typename Sequence::cdr_type, mpl::int_<N::value-1> > + >::type + type; + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_of_impl.hpp new file mode 100644 index 0000000..f8175c6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_of_impl.hpp @@ -0,0 +1,36 @@ +/*============================================================================= + Copyright (c) 2005 Joel de Guzman + Copyright (c) 2005 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(FUSION_VALUE_OF_IMPL_07172005_0838) +#define FUSION_VALUE_OF_IMPL_07172005_0838 + +namespace boost { namespace fusion +{ + struct cons_iterator_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + template <> + struct value_of_impl<cons_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::cons_type cons_type; + typedef typename cons_type::car_type type; + }; + }; + } + +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/container/list/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/list/limits.hpp new file mode 100644 index 0000000..20ff6dd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/limits.hpp @@ -0,0 +1,19 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_LIST_LIMITS_07172005_0112) +#define FUSION_LIST_LIMITS_07172005_0112 + +#if !defined(FUSION_MAX_LIST_SIZE) +# define FUSION_MAX_LIST_SIZE 10 +#else +# if FUSION_MAX_LIST_SIZE < 3 +# undef FUSION_MAX_LIST_SIZE +# define FUSION_MAX_LIST_SIZE 10 +# endif +#endif + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/list/list_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/list/list_fwd.hpp new file mode 100644 index 0000000..90c088b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/list/list_fwd.hpp @@ -0,0 +1,24 @@ +/*============================================================================= + Copyright (c) 2005 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_LIST_FORWARD_07172005_0224) +#define FUSION_LIST_FORWARD_07172005_0224 + +#include <boost/fusion/container/list/limits.hpp> +#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> + +namespace boost { namespace fusion +{ + struct void_; + + template < + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_LIST_SIZE, typename T, void_) + > + struct list; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/map/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/map/limits.hpp new file mode 100644 index 0000000..738abff --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/map/limits.hpp @@ -0,0 +1,25 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_MAP_LIMITS_07212005_1104) +#define FUSION_MAP_LIMITS_07212005_1104 + +#include <boost/fusion/container/vector/limits.hpp> + +#if !defined(FUSION_MAX_MAP_SIZE) +# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE +#else +# if FUSION_MAX_MAP_SIZE < 3 +# undef FUSION_MAX_MAP_SIZE +# if (FUSION_MAX_VECTOR_SIZE > 10) +# define FUSION_MAX_MAP_SIZE 10 +# else +# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE +# endif +# endif +#endif + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/map/map_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/map/map_fwd.hpp new file mode 100644 index 0000000..d8a9c1b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/map/map_fwd.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + Copyright (c) 2005 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_MAP_FORWARD_07212005_1105) +#define FUSION_MAP_FORWARD_07212005_1105 + +#include <boost/fusion/container/map/limits.hpp> +#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> + +namespace boost { namespace fusion +{ + struct void_; + struct map_tag; + struct map_iterator_tag; + + template < + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_MAP_SIZE, typename T, void_) + > + struct map; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/set/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/set/limits.hpp new file mode 100644 index 0000000..35eb080 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/set/limits.hpp @@ -0,0 +1,25 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SET_LIMITS_09162005_1103) +#define FUSION_SET_LIMITS_09162005_1103 + +#include <boost/fusion/container/vector/limits.hpp> + +#if !defined(FUSION_MAX_SET_SIZE) +# define FUSION_MAX_SET_SIZE FUSION_MAX_VECTOR_SIZE +#else +# if FUSION_MAX_SET_SIZE < 3 +# undef FUSION_MAX_SET_SIZE +# if (FUSION_MAX_VECTOR_SIZE > 10) +# define FUSION_MAX_SET_SIZE 10 +# else +# define FUSION_MAX_SET_SIZE FUSION_MAX_VECTOR_SIZE +# endif +# endif +#endif + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/set/set_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/set/set_fwd.hpp new file mode 100644 index 0000000..082422f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/set/set_fwd.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + Copyright (c) 2005 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_SET_FORWARD_09162005_1102) +#define FUSION_SET_FORWARD_09162005_1102 + +#include <boost/fusion/container/set/limits.hpp> +#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> + +namespace boost { namespace fusion +{ + struct void_; + struct set_tag; + struct set_iterator_tag; + + template < + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_SET_SIZE, typename T, void_) + > + struct set; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector.hpp b/3rdParty/Boost/src/boost/fusion/container/vector.hpp new file mode 100644 index 0000000..389a102 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602) +#define FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602 + +#include <boost/fusion/container/vector/limits.hpp> +#include <boost/fusion/container/vector/vector10.hpp> +#include <boost/fusion/container/vector/vector20.hpp> +#include <boost/fusion/container/vector/vector30.hpp> +#include <boost/fusion/container/vector/vector40.hpp> +#include <boost/fusion/container/vector/vector50.hpp> +#include <boost/fusion/container/vector/vector.hpp> +#include <boost/fusion/container/vector/vector_fwd.hpp> +#include <boost/fusion/container/vector/vector_iterator.hpp> +#include <boost/fusion/container/vector/convert.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/convert.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/convert.hpp new file mode 100644 index 0000000..a31578a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/convert.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_CONVERT_09222005_1104) +#define FUSION_CONVERT_09222005_1104 + +#include <boost/fusion/container/vector/detail/as_vector.hpp> +#include <boost/fusion/container/vector/detail/convert_impl.hpp> +#include <boost/fusion/container/vector/vector.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> + +namespace boost { namespace fusion +{ + namespace result_of + { + template <typename Sequence> + struct as_vector + { + typedef typename detail::as_vector<result_of::size<Sequence>::value> gen; + typedef typename gen:: + template apply<typename result_of::begin<Sequence>::type>::type + type; + }; + } + + template <typename Sequence> + inline typename result_of::as_vector<Sequence>::type + as_vector(Sequence& seq) + { + typedef typename result_of::as_vector<Sequence>::gen gen; + return gen::call(fusion::begin(seq)); + } + + template <typename Sequence> + inline typename result_of::as_vector<Sequence const>::type + as_vector(Sequence const& seq) + { + typedef typename result_of::as_vector<Sequence const>::gen gen; + return gen::call(fusion::begin(seq)); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/advance_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/advance_impl.hpp new file mode 100644 index 0000000..c2c97b1 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/advance_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_ADVANCE_IMPL_09172005_1156) +#define FUSION_ADVANCE_IMPL_09172005_1156 + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + + template <typename Vector, int N> + struct vector_iterator; + + namespace extension + { + template <typename Tag> + struct advance_impl; + + template <> + struct advance_impl<vector_iterator_tag> + { + template <typename Iterator, typename N> + struct apply + { + typedef typename Iterator::index index; + typedef typename Iterator::vector vector; + typedef vector_iterator<vector, index::value+N::value> type; + + static type + call(Iterator const& i) + { + return type(i.vec); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/as_vector.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/as_vector.hpp new file mode 100644 index 0000000..a70fd4a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/as_vector.hpp @@ -0,0 +1,101 @@ +/*============================================================================= + 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_PP_IS_ITERATING +#if !defined(FUSION_AS_VECTOR_09222005_0950) +#define FUSION_AS_VECTOR_09222005_0950 + +#include <boost/preprocessor/iterate.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/repeat.hpp> +#include <boost/preprocessor/cat.hpp> +#include <boost/preprocessor/inc.hpp> +#include <boost/preprocessor/dec.hpp> +#include <boost/fusion/container/vector/vector.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/iterator/next.hpp> + +namespace boost { namespace fusion { namespace detail +{ + template <int size> + struct as_vector; + + template <> + struct as_vector<0> + { + template <typename Iterator> + struct apply + { + typedef vector0<> type; + }; + + template <typename Iterator> + static typename apply<Iterator>::type + call(Iterator) + { + return vector0<>(); + } + }; + +#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \ + typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \ + BOOST_PP_CAT(I, BOOST_PP_INC(n)); + +#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data) \ + typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n)) \ + BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n)); + +#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data) \ + typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type \ + BOOST_PP_CAT(T, n); + +#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/as_vector.hpp> +#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) +#include BOOST_PP_ITERATE() + +#undef BOOST_FUSION_NEXT_ITERATOR +#undef BOOST_FUSION_NEXT_CALL_ITERATOR +#undef BOOST_FUSION_VALUE_OF_ITERATOR + +}}} + +#endif +#else // defined(BOOST_PP_IS_ITERATING) +/////////////////////////////////////////////////////////////////////////////// +// +// Preprocessor vertical repetition code +// +/////////////////////////////////////////////////////////////////////////////// + +#define N BOOST_PP_ITERATION() + + template <> + struct as_vector<N> + { + template <typename I0> + struct apply + { + BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _) + BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _) + typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> type; + }; + + template <typename Iterator> + static typename apply<Iterator>::type + call(Iterator const& i0) + { + typedef apply<Iterator> gen; + typedef typename gen::type result; + BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _) + return result(BOOST_PP_ENUM_PARAMS(N, *i)); + } + }; + +#undef N +#endif // defined(BOOST_PP_IS_ITERATING) + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/at_impl.hpp new file mode 100644 index 0000000..1366ec9 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/at_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_AT_IMPL_05042005_0741) +#define FUSION_AT_IMPL_05042005_0741 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/int.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + + namespace extension + { + template <typename Tag> + struct at_impl; + + template <> + struct at_impl<vector_tag> + { + template <typename Sequence, typename N> + struct apply + { + typedef mpl::at<typename Sequence::types, N> element; + typedef typename detail::ref_result<element>::type type; + + static type + call(Sequence& v) + { + return v.at_impl(N()); + } + }; + + template <typename Sequence, typename N> + struct apply <Sequence const, N> + { + typedef mpl::at<typename Sequence::types, N> element; + typedef typename detail::cref_result<element>::type type; + + static type + call(Sequence const& v) + { + return v.at_impl(N()); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/begin_impl.hpp new file mode 100644 index 0000000..d2d687b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/begin_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_05042005_1136) +#define FUSION_BEGIN_IMPL_05042005_1136 + +#include <boost/fusion/container/vector/vector_iterator.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<vector_tag> + { + template <typename Sequence> + struct apply + { + typedef vector_iterator<Sequence, 0> type; + + static type + call(Sequence& v) + { + return type(v); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/convert_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/convert_impl.hpp new file mode 100644 index 0000000..5e1d080 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/convert_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_CONVERT_IMPL_09222005_1104) +#define FUSION_CONVERT_IMPL_09222005_1104 + +#include <boost/fusion/container/vector/detail/as_vector.hpp> +#include <boost/fusion/container/vector/vector.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + + namespace extension + { + template <typename T> + struct convert_impl; + + template <> + struct convert_impl<vector_tag> + { + template <typename Sequence> + struct apply + { + typedef typename detail::as_vector<result_of::size<Sequence>::value> gen; + typedef typename gen:: + template apply<typename result_of::begin<Sequence>::type>::type + type; + + static type call(Sequence& seq) + { + return gen::call(fusion::begin(seq)); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/deref_impl.hpp new file mode 100644 index 0000000..bd9f3d0 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/deref_impl.hpp @@ -0,0 +1,53 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_IMPL_05042005_1037) +#define FUSION_DEREF_IMPL_05042005_1037 + +#include <boost/mpl/at.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/type_traits/is_const.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + template <> + struct deref_impl<vector_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::vector vector; + typedef typename Iterator::index index; + typedef typename mpl::at< + typename vector::types, index> + element; + + typedef typename + mpl::eval_if< + is_const<vector> + , fusion::detail::cref_result<element> + , fusion::detail::ref_result<element> + >::type + type; + + static type + call(Iterator const& i) + { + return i.vec.at_impl(index()); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/distance_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/distance_impl.hpp new file mode 100644 index 0000000..9664d5c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/distance_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_DISTANCE_IMPL_09172005_0751) +#define FUSION_DISTANCE_IMPL_09172005_0751 + +#include <boost/mpl/minus.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + + namespace extension + { + template <typename Tag> + struct distance_impl; + + template <> + struct distance_impl<vector_iterator_tag> + { + template <typename First, typename Last> + struct apply : mpl::minus<typename Last::index, typename First::index> + { + static typename mpl::minus< + typename Last::index, typename First::index>::type + call(First const&, Last const&) + { + typedef typename mpl::minus< + typename Last::index, typename First::index>::type + result; + return result(); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/end_impl.hpp new file mode 100644 index 0000000..f33282d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/end_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_05042005_1142) +#define FUSION_END_IMPL_05042005_1142 + +#include <boost/fusion/container/vector/vector_iterator.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<vector_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::size size; + typedef vector_iterator<Sequence, size::value> type; + + static type + call(Sequence& v) + { + return type(v); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/equal_to_impl.hpp new file mode 100644 index 0000000..5ff81c6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/equal_to_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_EQUAL_TO_IMPL_05052005_1215) +#define FUSION_EQUAL_TO_IMPL_05052005_1215 + +#include <boost/type_traits/is_same.hpp> +#include <boost/mpl/equal_to.hpp> +#include <boost/mpl/and.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + + namespace extension + { + template <typename Tag> + struct equal_to_impl; + + template <> + struct equal_to_impl<vector_iterator_tag> + { + template <typename I1, typename I2> + struct apply + : is_same< + typename I1::identity + , typename I2::identity + > + { + }; + }; + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/next_impl.hpp new file mode 100644 index 0000000..b11cfdb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/next_impl.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_NEXT_IMPL_05042005_1058) +#define FUSION_NEXT_IMPL_05042005_1058 + +#include <boost/fusion/container/vector/vector_iterator.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + template <typename Vector, int N> + struct vector_iterator; + + namespace extension + { + template <typename Tag> + struct next_impl; + + template <> + struct next_impl<vector_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::vector vector; + typedef typename Iterator::index index; + typedef vector_iterator<vector, index::value+1> type; + + static type + call(Iterator const& i) + { + return type(i.vec); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/prior_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/prior_impl.hpp new file mode 100644 index 0000000..610591b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/prior_impl.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PRIOR_IMPL_05042005_1145) +#define FUSION_PRIOR_IMPL_05042005_1145 + +#include <boost/fusion/container/vector/vector_iterator.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + template <typename Vector, int N> + struct vector_iterator; + + namespace extension + { + template <typename Tag> + struct prior_impl; + + template <> + struct prior_impl<vector_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::vector vector; + typedef typename Iterator::index index; + typedef vector_iterator<vector, index::value-1> type; + + static type + call(Iterator const& i) + { + return type(i.vec); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_at_impl.hpp new file mode 100644 index 0000000..0178054 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_at_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_VALUE_AT_IMPL_05052005_0232) +#define FUSION_VALUE_AT_IMPL_05052005_0232 + +#include <boost/mpl/at.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + + namespace extension + { + template <typename Tag> + struct value_at_impl; + + template <> + struct value_at_impl<vector_tag> + { + template <typename Sequence, typename N> + struct apply + { + typedef typename mpl::at<typename Sequence::types, N>::type type; + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_of_impl.hpp new file mode 100644 index 0000000..3a775fb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_of_impl.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VALUE_OF_IMPL_05052005_1128) +#define FUSION_VALUE_OF_IMPL_05052005_1128 + +#include <boost/mpl/at.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + template <> + struct value_of_impl<vector_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::vector vector; + typedef typename Iterator::index index; + typedef typename mpl::at< + typename vector::types, index>::type + type; + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp new file mode 100644 index 0000000..e4680bb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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_PP_IS_ITERATING +#if !defined(FUSION_VECTOR_FORWARD_CTOR_07122005_1123) +#define FUSION_VECTOR_FORWARD_CTOR_07122005_1123 + +#include <boost/preprocessor/iterate.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> + +#define BOOST_PP_FILENAME_1 \ + <boost/fusion/container/vector/detail/vector_forward_ctor.hpp> +#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) +#include BOOST_PP_ITERATE() + +#endif +#else // defined(BOOST_PP_IS_ITERATING) +/////////////////////////////////////////////////////////////////////////////// +// +// Preprocessor vertical repetition code +// +/////////////////////////////////////////////////////////////////////////////// + +#define N BOOST_PP_ITERATION() + +#if N == 1 + explicit +#endif + vector(BOOST_PP_ENUM_BINARY_PARAMS( + N, typename detail::call_param<T, >::type _)) + : vec(BOOST_PP_ENUM_PARAMS(N, _)) {} + +#undef N +#endif // defined(BOOST_PP_IS_ITERATING) + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n.hpp new file mode 100644 index 0000000..33484c5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n.hpp @@ -0,0 +1,149 @@ +/*============================================================================= + 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) +==============================================================================*/ +// No include guard. This file is meant to be included many times + +#if !defined(FUSION_MACRO_05042005) +#define FUSION_MACRO_05042005 + +#define FUSION_MEMBER_DEFAULT_INIT(z, n, _) m##n() +#define FUSION_MEMBER_INIT(z, n, _) m##n(_##n) +#define FUSION_COPY_INIT(z, n, _) m##n(other.m##n) +#define FUSION_MEMBER_DECL(z, n, _) T##n m##n; + +#define FUSION_MEMBER_ASSIGN(z, n, _) \ + this->BOOST_PP_CAT(m, n) = vec.BOOST_PP_CAT(m, n); + +#define FUSION_DEREF_MEMBER_ASSIGN(z, n, _) \ + this->BOOST_PP_CAT(m, n) = *BOOST_PP_CAT(i, n); + +#define FUSION_AT_IMPL(z, n, _) \ + typename add_reference<T##n>::type \ + at_impl(mpl::int_<n>) { return this->m##n; } \ + typename add_reference<typename add_const<T##n>::type>::type \ + at_impl(mpl::int_<n>) const { return this->m##n; } + +#define FUSION_ITER_DECL_VAR(z, n, _) \ + typedef typename result_of::next< \ + BOOST_PP_CAT(I, BOOST_PP_DEC(n))>::type BOOST_PP_CAT(I, n); \ + BOOST_PP_CAT(I, n) BOOST_PP_CAT(i, n) \ + = fusion::next(BOOST_PP_CAT(i, BOOST_PP_DEC(n))); + +#endif + +#define N BOOST_PP_ITERATION() + + template <BOOST_PP_ENUM_PARAMS(N, typename T)> + struct BOOST_PP_CAT(vector_data, N) + { + BOOST_PP_CAT(vector_data, N)() + : BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {} + + BOOST_PP_CAT(vector_data, N)( + BOOST_PP_ENUM_BINARY_PARAMS( + N, typename detail::call_param<T, >::type _)) + : BOOST_PP_ENUM(N, FUSION_MEMBER_INIT, _) {} + + BOOST_PP_CAT(vector_data, N)( + BOOST_PP_CAT(vector_data, N) const& other) + : BOOST_PP_ENUM(N, FUSION_COPY_INIT, _) {} + + BOOST_PP_CAT(vector_data, N)& + operator=(BOOST_PP_CAT(vector_data, N) const& vec) + { + BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _) + return *this; + } + + template <typename Sequence> + static BOOST_PP_CAT(vector_data, N) + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin<Sequence const>::type I0; + I0 i0 = fusion::begin(seq); + BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) + return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); + } + + BOOST_PP_REPEAT(N, FUSION_MEMBER_DECL, _) + }; + + template <BOOST_PP_ENUM_PARAMS(N, typename T)> + struct BOOST_PP_CAT(vector, N) + : BOOST_PP_CAT(vector_data, N)<BOOST_PP_ENUM_PARAMS(N, T)> + , sequence_base<BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> > + { + typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> this_type; + typedef BOOST_PP_CAT(vector_data, N)<BOOST_PP_ENUM_PARAMS(N, T)> base_type; + typedef mpl::BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<N> size; + + BOOST_PP_CAT(vector, N)() {} + +#if (N == 1) + explicit +#endif + BOOST_PP_CAT(vector, N)( + BOOST_PP_ENUM_BINARY_PARAMS( + N, typename detail::call_param<T, >::type _)) + : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {} + + template <BOOST_PP_ENUM_PARAMS(N, typename U)> + BOOST_PP_CAT(vector, N)( + BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec) + : base_type(BOOST_PP_ENUM_PARAMS(N, vec.m)) {} + + template <typename Sequence> + BOOST_PP_CAT(vector, N)( + Sequence const& seq +#if (N == 1) + , typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0 +#endif + ) + : base_type(base_type::init_from_sequence(seq)) {} + + template <BOOST_PP_ENUM_PARAMS(N, typename U)> + BOOST_PP_CAT(vector, N)& + operator=(BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec) + { + BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _) + return *this; + } + + template <typename Sequence> + typename disable_if<is_convertible<Sequence, T0>, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin<Sequence const>::type I0; + I0 i0 = fusion::begin(seq); + BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) + BOOST_PP_REPEAT(N, FUSION_DEREF_MEMBER_ASSIGN, _) + return *this; + } + + BOOST_PP_REPEAT(N, FUSION_AT_IMPL, _) + + template<typename I> + typename add_reference<typename mpl::at<types, I>::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_<I::value>()); + } + + template<typename I> + typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_<I::value>()); + } + }; + +#undef N + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n_chooser.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n_chooser.hpp new file mode 100644 index 0000000..f4b85d8 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n_chooser.hpp @@ -0,0 +1,81 @@ +/*============================================================================= + 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_PP_IS_ITERATING +#if !defined(FUSION_VECTOR_N_CHOOSER_07072005_1248) +#define FUSION_VECTOR_N_CHOOSER_07072005_1248 + +#include <boost/fusion/container/vector/limits.hpp> + +// include vector0..N where N is FUSION_MAX_VECTOR_SIZE +#include <boost/fusion/container/vector/vector10.hpp> +#if (FUSION_MAX_VECTOR_SIZE > 10) +#include <boost/fusion/container/vector/vector20.hpp> +#endif +#if (FUSION_MAX_VECTOR_SIZE > 20) +#include <boost/fusion/container/vector/vector30.hpp> +#endif +#if (FUSION_MAX_VECTOR_SIZE > 30) +#include <boost/fusion/container/vector/vector40.hpp> +#endif +#if (FUSION_MAX_VECTOR_SIZE > 40) +#include <boost/fusion/container/vector/vector50.hpp> +#endif + +#include <boost/preprocessor/cat.hpp> +#include <boost/preprocessor/arithmetic/dec.hpp> +#include <boost/preprocessor/arithmetic/sub.hpp> +#include <boost/preprocessor/facilities/intercept.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_trailing_params.hpp> + +namespace boost { namespace fusion +{ + struct void_; +}} + +namespace boost { namespace fusion { namespace detail +{ + template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)> + struct vector_n_chooser + { + typedef BOOST_PP_CAT(vector, FUSION_MAX_VECTOR_SIZE)<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> type; + }; + + template <> + struct vector_n_chooser<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, void_ BOOST_PP_INTERCEPT)> + { + typedef vector0<> type; + }; + +#define BOOST_PP_FILENAME_1 \ + <boost/fusion/container/vector/detail/vector_n_chooser.hpp> +#define BOOST_PP_ITERATION_LIMITS (1, BOOST_PP_DEC(FUSION_MAX_VECTOR_SIZE)) +#include BOOST_PP_ITERATE() + +}}} + +#endif + +/////////////////////////////////////////////////////////////////////////////// +// +// Preprocessor vertical repetition code +// +/////////////////////////////////////////////////////////////////////////////// +#else // defined(BOOST_PP_IS_ITERATING) + +#define N BOOST_PP_ITERATION() + + template <BOOST_PP_ENUM_PARAMS(N, typename T)> + struct vector_n_chooser< + BOOST_PP_ENUM_PARAMS(N, T) + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(FUSION_MAX_VECTOR_SIZE, N), void_ BOOST_PP_INTERCEPT)> + { + typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> type; + }; + +#undef N +#endif // defined(BOOST_PP_IS_ITERATING) diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/limits.hpp new file mode 100644 index 0000000..0e7e3a0 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/limits.hpp @@ -0,0 +1,19 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR_LIMITS_07072005_1246) +#define FUSION_VECTOR_LIMITS_07072005_1246 + +#if !defined(FUSION_MAX_VECTOR_SIZE) +# define FUSION_MAX_VECTOR_SIZE 10 +#else +# if FUSION_MAX_VECTOR_SIZE < 3 +# undef FUSION_MAX_VECTOR_SIZE +# define FUSION_MAX_VECTOR_SIZE 10 +# endif +#endif + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector.hpp new file mode 100644 index 0000000..8eaa6a6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector.hpp @@ -0,0 +1,151 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR_07072005_1244) +#define FUSION_VECTOR_07072005_1244 + +#include <boost/fusion/container/vector/vector_fwd.hpp> +#include <boost/fusion/container/vector/detail/vector_n_chooser.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/type_traits/add_reference.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/type_traits/is_base_of.hpp> +#include <boost/detail/workaround.hpp> + +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + + template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)> + struct vector + : sequence_base<vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> > + { + private: + + typedef typename detail::vector_n_chooser< + BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>::type + vector_n; + + template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)> + friend struct vector; + + public: + + typedef typename vector_n::types types; + typedef typename vector_n::fusion_tag fusion_tag; + typedef typename vector_n::tag tag; + typedef typename vector_n::size size; + typedef typename vector_n::category category; + typedef typename vector_n::is_view is_view; + + vector() + : vec() {} + + template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)> + vector(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs) + : vec(rhs.vec) {} + + vector(vector const& rhs) + : vec(rhs.vec) {} + + template <typename Sequence> + vector(Sequence const& rhs) +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) + : vec(ctor_helper(rhs, is_base_of<vector, Sequence>())) {} +#else + : vec(rhs) {} +#endif + + // Expand a couple of forwarding constructors for arguments + // of type (T0), (T0, T1), (T0, T1, T2) etc. Example: + // + // vector( + // typename detail::call_param<T0>::type _0 + // , typename detail::call_param<T1>::type _1) + // : vec(_0, _1) {} + #include <boost/fusion/container/vector/detail/vector_forward_ctor.hpp> + + template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)> + vector& + operator=(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs) + { + vec = rhs.vec; + return *this; + } + + template <typename T> + vector& + operator=(T const& rhs) + { + vec = rhs; + return *this; + } + + template <int N> + typename add_reference< + typename mpl::at_c<types, N>::type + >::type + at_impl(mpl::int_<N> index) + { + return vec.at_impl(index); + } + + template <int N> + typename add_reference< + typename add_const< + typename mpl::at_c<types, N>::type + >::type + >::type + at_impl(mpl::int_<N> index) const + { + return vec.at_impl(index); + } + + template <typename I> + typename add_reference< + typename mpl::at<types, I>::type + >::type + at_impl(I /*index*/) + { + return vec.at_impl(mpl::int_<I::value>()); + } + + template<typename I> + typename add_reference< + typename add_const< + typename mpl::at<types, I>::type + >::type + >::type + at_impl(I /*index*/) const + { + return vec.at_impl(mpl::int_<I::value>()); + } + + private: + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) + static vector_n const& + ctor_helper(vector const& rhs, mpl::true_) + { + return rhs.vec; + } + + template <typename T> + static T const& + ctor_helper(T const& rhs, mpl::false_) + { + return rhs; + } +#endif + + vector_n vec; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector10.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector10.hpp new file mode 100644 index 0000000..f1af70d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector10.hpp @@ -0,0 +1,67 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR10_05042005_0257) +#define FUSION_VECTOR10_05042005_0257 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/container/vector/detail/at_impl.hpp> +#include <boost/fusion/container/vector/detail/value_at_impl.hpp> +#include <boost/fusion/container/vector/detail/begin_impl.hpp> +#include <boost/fusion/container/vector/detail/end_impl.hpp> + +#include <boost/mpl/void.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/vector/vector10.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/utility/enable_if.hpp> + +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/iteration/iterate.hpp> +#include <boost/preprocessor/repetition/enum.hpp> +#include <boost/preprocessor/repetition/enum_shifted.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + + template <typename Dummy = void> + struct vector0 : sequence_base<vector0<Dummy> > + { + typedef mpl::vector0<> types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<0> size; + + vector0() {} + + template<typename Sequence> + vector0(Sequence const& /*seq*/) + {} + }; + +// expand vector1 to vector10 +#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp> +#define BOOST_PP_ITERATION_LIMITS (1, 10) +#include BOOST_PP_ITERATE() + +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector20.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector20.hpp new file mode 100644 index 0000000..be71100 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector20.hpp @@ -0,0 +1,50 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR20_05052005_0205) +#define FUSION_VECTOR20_05052005_0205 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/container/vector/detail/at_impl.hpp> +#include <boost/fusion/container/vector/detail/value_at_impl.hpp> +#include <boost/fusion/container/vector/detail/begin_impl.hpp> +#include <boost/fusion/container/vector/detail/end_impl.hpp> + +#include <boost/mpl/void.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/vector/vector20.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/utility/enable_if.hpp> + +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/iteration/iterate.hpp> +#include <boost/preprocessor/repetition/enum.hpp> +#include <boost/preprocessor/repetition/enum_shifted.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + +// expand vector11 to vector20 +#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp> +#define BOOST_PP_ITERATION_LIMITS (11, 20) +#include BOOST_PP_ITERATE() + +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector30.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector30.hpp new file mode 100644 index 0000000..efbe929 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector30.hpp @@ -0,0 +1,50 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR30_05052005_0206) +#define FUSION_VECTOR30_05052005_0206 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/container/vector/detail/at_impl.hpp> +#include <boost/fusion/container/vector/detail/value_at_impl.hpp> +#include <boost/fusion/container/vector/detail/begin_impl.hpp> +#include <boost/fusion/container/vector/detail/end_impl.hpp> + +#include <boost/mpl/void.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/vector/vector30.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/utility/enable_if.hpp> + +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/iteration/iterate.hpp> +#include <boost/preprocessor/repetition/enum.hpp> +#include <boost/preprocessor/repetition/enum_shifted.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + +// expand vector21 to vector30 +#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp> +#define BOOST_PP_ITERATION_LIMITS (21, 30) +#include BOOST_PP_ITERATE() + +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector40.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector40.hpp new file mode 100644 index 0000000..b72a23c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector40.hpp @@ -0,0 +1,50 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR40_05052005_0208) +#define FUSION_VECTOR40_05052005_0208 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/container/vector/detail/at_impl.hpp> +#include <boost/fusion/container/vector/detail/value_at_impl.hpp> +#include <boost/fusion/container/vector/detail/begin_impl.hpp> +#include <boost/fusion/container/vector/detail/end_impl.hpp> + +#include <boost/mpl/void.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/vector/vector40.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/utility/enable_if.hpp> + +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/iteration/iterate.hpp> +#include <boost/preprocessor/repetition/enum.hpp> +#include <boost/preprocessor/repetition/enum_shifted.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + +// expand vector31 to vector40 +#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp> +#define BOOST_PP_ITERATION_LIMITS (31, 40) +#include BOOST_PP_ITERATE() + +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector50.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector50.hpp new file mode 100644 index 0000000..ab8515d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector50.hpp @@ -0,0 +1,50 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR50_05052005_0207) +#define FUSION_VECTOR50_05052005_0207 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/container/vector/detail/at_impl.hpp> +#include <boost/fusion/container/vector/detail/value_at_impl.hpp> +#include <boost/fusion/container/vector/detail/begin_impl.hpp> +#include <boost/fusion/container/vector/detail/end_impl.hpp> + +#include <boost/mpl/void.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/at.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/vector/vector50.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/utility/enable_if.hpp> + +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/iteration/iterate.hpp> +#include <boost/preprocessor/repetition/enum.hpp> +#include <boost/preprocessor/repetition/enum_shifted.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition/enum_binary_params.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + +// expand vector41 to vector50 +#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp> +#define BOOST_PP_ITERATION_LIMITS (41, 50) +#include BOOST_PP_ITERATE() + +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector_fwd.hpp new file mode 100644 index 0000000..2c4848d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector_fwd.hpp @@ -0,0 +1,25 @@ +/*============================================================================= + Copyright (c) 1999-2003 Jaakko Jarvi + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR_FORWARD_07072005_0125) +#define FUSION_VECTOR_FORWARD_07072005_0125 + +#include <boost/fusion/container/vector/limits.hpp> +#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> + +namespace boost { namespace fusion +{ + struct void_; + + template < + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_VECTOR_SIZE, typename T, void_) + > + struct vector; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector_iterator.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector_iterator.hpp new file mode 100644 index 0000000..8faa13a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector_iterator.hpp @@ -0,0 +1,50 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VECTOR_ITERATOR_05042005_0635) +#define FUSION_VECTOR_ITERATOR_05042005_0635 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/container/vector/detail/deref_impl.hpp> +#include <boost/fusion/container/vector/detail/value_of_impl.hpp> +#include <boost/fusion/container/vector/detail/next_impl.hpp> +#include <boost/fusion/container/vector/detail/prior_impl.hpp> +#include <boost/fusion/container/vector/detail/equal_to_impl.hpp> +#include <boost/fusion/container/vector/detail/distance_impl.hpp> +#include <boost/fusion/container/vector/detail/advance_impl.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/mpl/int.hpp> + +namespace boost { namespace fusion +{ + struct vector_iterator_tag; + struct random_access_traversal_tag; + + template <typename Vector, int N> + struct vector_iterator_identity; + + template <typename Vector, int N> + struct vector_iterator : iterator_base<vector_iterator<Vector, N> > + { + typedef mpl::int_<N> index; + typedef Vector vector; + typedef vector_iterator_tag fusion_tag; + typedef random_access_traversal_tag category; + typedef vector_iterator_identity< + typename add_const<Vector>::type, N> identity; + + vector_iterator(Vector& in_vec) + : vec(in_vec) {} + Vector& vec; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + vector_iterator& operator= (vector_iterator const&); + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/include/any.hpp b/3rdParty/Boost/src/boost/fusion/include/any.hpp new file mode 100644 index 0000000..e5c7306 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/any.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_ANY) +#define FUSION_INCLUDE_ANY + +#include <boost/fusion/algorithm/query/any.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/as_list.hpp b/3rdParty/Boost/src/boost/fusion/include/as_list.hpp new file mode 100644 index 0000000..6c477d2 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/as_list.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_AS_LIST) +#define FUSION_INCLUDE_AS_LIST + +#include <boost/fusion/container/list/convert.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/as_vector.hpp b/3rdParty/Boost/src/boost/fusion/include/as_vector.hpp new file mode 100644 index 0000000..4c9b39d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/as_vector.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_AS_VECTOR) +#define FUSION_INCLUDE_AS_VECTOR + +#include <boost/fusion/container/vector/convert.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/at.hpp b/3rdParty/Boost/src/boost/fusion/include/at.hpp new file mode 100644 index 0000000..eacd7bb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/at.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_AT) +#define FUSION_INCLUDE_AT + +#include <boost/fusion/sequence/intrinsic/at.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/begin.hpp b/3rdParty/Boost/src/boost/fusion/include/begin.hpp new file mode 100644 index 0000000..53361fb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/begin.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_BEGIN) +#define FUSION_INCLUDE_BEGIN + +#include <boost/fusion/sequence/intrinsic/begin.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/category_of.hpp b/3rdParty/Boost/src/boost/fusion/include/category_of.hpp new file mode 100644 index 0000000..c390686 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/category_of.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_CATEGORY_OF) +#define FUSION_INCLUDE_CATEGORY_OF + +#include <boost/fusion/support/category_of.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/cons.hpp b/3rdParty/Boost/src/boost/fusion/include/cons.hpp new file mode 100644 index 0000000..853eb6d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/cons.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_CONS) +#define FUSION_INCLUDE_CONS + +#include <boost/fusion/container/list/cons.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/end.hpp b/3rdParty/Boost/src/boost/fusion/include/end.hpp new file mode 100644 index 0000000..61d65de --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/end.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_END) +#define FUSION_INCLUDE_END + +#include <boost/fusion/sequence/intrinsic/end.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/filter_if.hpp b/3rdParty/Boost/src/boost/fusion/include/filter_if.hpp new file mode 100644 index 0000000..31fdec5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/filter_if.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_FILTER_IF) +#define FUSION_INCLUDE_FILTER_IF + +#include <boost/fusion/algorithm/transformation/filter_if.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/fold.hpp b/3rdParty/Boost/src/boost/fusion/include/fold.hpp new file mode 100644 index 0000000..40bf3a7 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/fold.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_FOLD) +#define FUSION_INCLUDE_FOLD + +#include <boost/fusion/algorithm/iteration/fold.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/for_each.hpp b/3rdParty/Boost/src/boost/fusion/include/for_each.hpp new file mode 100644 index 0000000..b20578e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/for_each.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_FOR_EACH) +#define FUSION_INCLUDE_FOR_EACH + +#include <boost/fusion/algorithm/iteration/for_each.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/intrinsic.hpp b/3rdParty/Boost/src/boost/fusion/include/intrinsic.hpp new file mode 100644 index 0000000..c9d7871 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/intrinsic.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_INTRINSIC) +#define FUSION_INCLUDE_INTRINSIC + +#include <boost/fusion/sequence/intrinsic.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/is_sequence.hpp b/3rdParty/Boost/src/boost/fusion/include/is_sequence.hpp new file mode 100644 index 0000000..a7f2b4d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/is_sequence.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_IS_SEQUENCE) +#define FUSION_INCLUDE_IS_SEQUENCE + +#include <boost/fusion/support/is_sequence.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/is_view.hpp b/3rdParty/Boost/src/boost/fusion/include/is_view.hpp new file mode 100644 index 0000000..5ebc347 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/is_view.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_IS_VIEW) +#define FUSION_INCLUDE_IS_VIEW + +#include <boost/fusion/support/is_view.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/iterator_base.hpp b/3rdParty/Boost/src/boost/fusion/include/iterator_base.hpp new file mode 100644 index 0000000..bbd3532 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/iterator_base.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_ITERATOR_BASE) +#define FUSION_INCLUDE_ITERATOR_BASE + +#include <boost/fusion/support/iterator_base.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/make_vector.hpp b/3rdParty/Boost/src/boost/fusion/include/make_vector.hpp new file mode 100644 index 0000000..b165ba3 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/make_vector.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_MAKE_VECTOR) +#define FUSION_INCLUDE_MAKE_VECTOR + +#include <boost/fusion/container/generation/make_vector.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/mpl.hpp b/3rdParty/Boost/src/boost/fusion/include/mpl.hpp new file mode 100644 index 0000000..8a1cbfd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/mpl.hpp @@ -0,0 +1,13 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_MPL) +#define FUSION_INCLUDE_MPL + +#include <boost/fusion/adapted/mpl.hpp> +#include <boost/fusion/mpl.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/next.hpp b/3rdParty/Boost/src/boost/fusion/include/next.hpp new file mode 100644 index 0000000..6188c65 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/next.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_NEXT) +#define FUSION_INCLUDE_NEXT + +#include <boost/fusion/iterator/next.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/include/pop_back.hpp new file mode 100644 index 0000000..b5a808c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/pop_back.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_POP_BACK) +#define FUSION_INCLUDE_POP_BACK + +#include <boost/fusion/algorithm/transformation/pop_back.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/include/pop_front.hpp new file mode 100644 index 0000000..7df977e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/pop_front.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_POP_FRONT) +#define FUSION_INCLUDE_POP_FRONT + +#include <boost/fusion/algorithm/transformation/pop_front.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/prior.hpp b/3rdParty/Boost/src/boost/fusion/include/prior.hpp new file mode 100644 index 0000000..b18a55a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/prior.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_PRIOR) +#define FUSION_INCLUDE_PRIOR + +#include <boost/fusion/iterator/prior.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/push_back.hpp b/3rdParty/Boost/src/boost/fusion/include/push_back.hpp new file mode 100644 index 0000000..4908e87 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/push_back.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_PUSH_BACK) +#define FUSION_INCLUDE_PUSH_BACK + +#include <boost/fusion/algorithm/transformation/push_back.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/push_front.hpp b/3rdParty/Boost/src/boost/fusion/include/push_front.hpp new file mode 100644 index 0000000..5a9cfa5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/push_front.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_PUSH_FRONT) +#define FUSION_INCLUDE_PUSH_FRONT + +#include <boost/fusion/algorithm/transformation/push_front.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/reverse.hpp b/3rdParty/Boost/src/boost/fusion/include/reverse.hpp new file mode 100644 index 0000000..3f9fd78 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/reverse.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_REVERSE) +#define FUSION_INCLUDE_REVERSE + +#include <boost/fusion/algorithm/transformation/reverse.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/single_view.hpp b/3rdParty/Boost/src/boost/fusion/include/single_view.hpp new file mode 100644 index 0000000..a95d04a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/single_view.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_SINGLE_VIEW) +#define FUSION_INCLUDE_SINGLE_VIEW + +#include <boost/fusion/view/single_view.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/size.hpp b/3rdParty/Boost/src/boost/fusion/include/size.hpp new file mode 100644 index 0000000..02d2a00 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/size.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_SIZE) +#define FUSION_INCLUDE_SIZE + +#include <boost/fusion/sequence/intrinsic/size.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/tag_of_fwd.hpp b/3rdParty/Boost/src/boost/fusion/include/tag_of_fwd.hpp new file mode 100644 index 0000000..fbc7ebe --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/tag_of_fwd.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_TAG_OF_FWD) +#define FUSION_INCLUDE_TAG_OF_FWD + +#include <boost/fusion/support/tag_of_fwd.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/transform.hpp b/3rdParty/Boost/src/boost/fusion/include/transform.hpp new file mode 100644 index 0000000..2b66c4f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/transform.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_TRANSFORM) +#define FUSION_INCLUDE_TRANSFORM + +#include <boost/fusion/algorithm/transformation/transform.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/transform_view.hpp b/3rdParty/Boost/src/boost/fusion/include/transform_view.hpp new file mode 100644 index 0000000..3aceaae --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/transform_view.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_TRANSFORM_VIEW) +#define FUSION_INCLUDE_TRANSFORM_VIEW + +#include <boost/fusion/view/transform_view.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/value_at.hpp b/3rdParty/Boost/src/boost/fusion/include/value_at.hpp new file mode 100644 index 0000000..da5745d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/value_at.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + Copyright (c) 2001-2007 Hartmut Kaiser + + 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_INCLUDE_VALUE_AT) +#define FUSION_INCLUDE_VALUE_AT + +#include <boost/fusion/sequence/intrinsic/value_at.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/value_of.hpp b/3rdParty/Boost/src/boost/fusion/include/value_of.hpp new file mode 100644 index 0000000..4f2bef9 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/value_of.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_VALUE_OF) +#define FUSION_INCLUDE_VALUE_OF + +#include <boost/fusion/iterator/value_of.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/vector.hpp b/3rdParty/Boost/src/boost/fusion/include/vector.hpp new file mode 100644 index 0000000..689c2f8 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/vector.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_VECTOR) +#define FUSION_INCLUDE_VECTOR + +#include <boost/fusion/container/vector.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/include/void.hpp b/3rdParty/Boost/src/boost/fusion/include/void.hpp new file mode 100644 index 0000000..b3e9cf2 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/include/void.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_VOID) +#define FUSION_INCLUDE_VOID + +#include <boost/fusion/support/void.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/advance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/advance.hpp new file mode 100644 index 0000000..56ed60b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/advance.hpp @@ -0,0 +1,92 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ADVANCE_09172005_1146) +#define FUSION_ADVANCE_09172005_1146 + +#include <boost/fusion/iterator/detail/advance.hpp> +#include <boost/fusion/support/category_of.hpp> + +#include <boost/mpl/int.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/type_traits/is_same.hpp> +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + struct random_access_traversal_tag; + + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct advance_impl + { + // default implementation + template <typename Iterator, typename N> + struct apply : + mpl::if_c< + (N::value > 0) + , advance_detail::forward<Iterator, N::value> + , advance_detail::backward<Iterator, N::value> + >::type + { + BOOST_MPL_ASSERT_NOT((traits::is_random_access<Iterator>)); + }; + }; + + template <> + struct advance_impl<iterator_facade_tag> + { + template <typename Iterator, typename N> + struct apply : Iterator::template advance<Iterator, N> {}; + }; + + template <> + struct advance_impl<boost_array_iterator_tag>; + + template <> + struct advance_impl<mpl_iterator_tag>; + + template <> + struct advance_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename Iterator, int N> + struct advance_c + : extension::advance_impl<typename detail::tag_of<Iterator>::type>::template apply<Iterator, mpl::int_<N> > + {}; + + template <typename Iterator, typename N> + struct advance + : extension::advance_impl<typename detail::tag_of<Iterator>::type>::template apply<Iterator, N> + {}; + } + + template <int N, typename Iterator> + inline typename result_of::advance_c<Iterator, N>::type const + advance_c(Iterator const& i) + { + return result_of::advance_c<Iterator, N>::call(i); + } + + template<typename N, typename Iterator> + inline typename result_of::advance<Iterator, N>::type const + advance(Iterator const& i) + { + return result_of::advance<Iterator, N>::call(i); + } + +}} // namespace boost::fusion + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/deref.hpp b/3rdParty/Boost/src/boost/fusion/iterator/deref.hpp new file mode 100644 index 0000000..2d5f04e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/deref.hpp @@ -0,0 +1,72 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_05042005_1019) +#define FUSION_DEREF_05042005_1019 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct deref_impl + { + template <typename Iterator> + struct apply {}; + }; + + template <> + struct deref_impl<iterator_facade_tag> + { + template <typename Iterator> + struct apply : Iterator::template deref<Iterator> {}; + }; + + template <> + struct deref_impl<boost_array_iterator_tag>; + + template <> + struct deref_impl<mpl_iterator_tag>; + + template <> + struct deref_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename Iterator> + struct deref + : extension::deref_impl<typename detail::tag_of<Iterator>::type>:: + template apply<Iterator> + {}; + } + + template <typename Iterator> + typename result_of::deref<Iterator>::type + deref(Iterator const& i) + { + typedef result_of::deref<Iterator> deref_meta; + return deref_meta::call(i); + } + + template <typename Iterator> + typename result_of::deref<Iterator>::type + operator*(iterator_base<Iterator> const& i) + { + return fusion::deref(i.cast()); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/deref_data.hpp b/3rdParty/Boost/src/boost/fusion/iterator/deref_data.hpp new file mode 100644 index 0000000..09ba439 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/deref_data.hpp @@ -0,0 +1,49 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_ITERATOR_DEREF_DATA_HPP +#define BOOST_FUSION_ITERATOR_DEREF_DATA_HPP + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + struct iterator_facade_tag; + + namespace extension + { + template <typename> + struct deref_data_impl; + + template <> + struct deref_data_impl<iterator_facade_tag> + { + template <typename It> + struct apply + : It::template deref_data<It> + {}; + }; + } + + namespace result_of + { + template <typename It> + struct deref_data + : extension::deref_data_impl<typename traits::tag_of<It>::type>:: + template apply<It> + {}; + } + + template <typename It> + typename result_of::deref_data<It>::type + deref_data(It const& it) + { + return result_of::deref_data<It>::call(it); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_deref_traits.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_deref_traits.hpp new file mode 100644 index 0000000..d683c28 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_deref_traits.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_ADAPT_DEREF_TRAITS_05062005_0900) +#define FUSION_ADAPT_DEREF_TRAITS_05062005_0900 + +#include <boost/fusion/iterator/deref.hpp> + +namespace boost { namespace fusion { namespace detail +{ + struct adapt_deref_traits + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::deref<typename Iterator::first_type>::type + type; + + static type + call(Iterator const& i) + { + return *i.first; + } + }; + }; +}}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_value_traits.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_value_traits.hpp new file mode 100644 index 0000000..a7d72f5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_value_traits.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ADAPT_VALUE_TRAITS_05062005_0859) +#define FUSION_ADAPT_VALUE_TRAITS_05062005_0859 + +#include <boost/fusion/iterator/value_of.hpp> + +namespace boost { namespace fusion { namespace detail +{ + struct adapt_value_traits + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::value_of<typename Iterator::first_type>::type + type; + }; + }; +}}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/advance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/advance.hpp new file mode 100644 index 0000000..900608f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/advance.hpp @@ -0,0 +1,102 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ADVANCE_09172005_1149) +#define FUSION_ADVANCE_09172005_1149 + +#include <boost/mpl/int.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion { namespace advance_detail +{ + // Default advance implementation, perform next(i) + // or prior(i) N times. + + template <typename Iterator, int N> + struct forward; + + template <typename Iterator, int N> + struct next_forward + { + typedef typename + forward< + typename result_of::next<Iterator>::type + , N-1 + >::type + type; + }; + + template <typename Iterator, int N> + struct forward + { + typedef typename + mpl::eval_if_c< + (N == 0) + , mpl::identity<Iterator> + , next_forward<Iterator, N> + >::type + type; + + static type const& + call(type const& i) + { + return i; + } + + template <typename I> + static type + call(I const& i) + { + return call(fusion::next(i)); + } + }; + + template <typename Iterator, int N> + struct backward; + + template <typename Iterator, int N> + struct next_backward + { + typedef typename + backward< + typename result_of::prior<Iterator>::type + , N+1 + >::type + type; + }; + + template <typename Iterator, int N> + struct backward + { + typedef typename + mpl::eval_if_c< + (N == 0) + , mpl::identity<Iterator> + , next_backward<Iterator, N> + >::type + type; + + static type const& + call(type const& i) + { + return i; + } + + template <typename I> + static type + call(I const& i) + { + return call(fusion::prior(i)); + } + }; + +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/distance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/distance.hpp new file mode 100644 index 0000000..e4c0a5e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/distance.hpp @@ -0,0 +1,64 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DISTANCE_09172005_0730) +#define FUSION_DISTANCE_09172005_0730 + +#include <boost/mpl/int.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/next.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/equal_to.hpp> + +namespace boost { namespace fusion { namespace distance_detail +{ + // Default distance implementation, linear + // search for the Last iterator. + + template <typename First, typename Last> + struct linear_distance; + + template <typename First, typename Last> + struct next_distance + { + typedef typename + mpl::next< + typename linear_distance< + typename result_of::next<First>::type + , Last + >::type + >::type + type; + }; + + template <typename First, typename Last> + struct linear_distance + : mpl::eval_if< + result_of::equal_to<First, Last> + , mpl::identity<mpl::int_<0> > + , next_distance<First, Last> + >::type + { + typedef typename + mpl::eval_if< + result_of::equal_to<First, Last> + , mpl::identity<mpl::int_<0> > + , next_distance<First, Last> + >::type + type; + + static type + call(First const&, Last const&) + { + return type(); + } + }; + +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/distance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/distance.hpp new file mode 100644 index 0000000..0cfa414 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/distance.hpp @@ -0,0 +1,81 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DISTANCE_09172005_0721) +#define FUSION_DISTANCE_09172005_0721 + +#include <boost/fusion/iterator/detail/distance.hpp> +#include <boost/fusion/support/category_of.hpp> + +#include <boost/mpl/int.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/type_traits/is_same.hpp> + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + struct random_access_traversal_tag; + + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct distance_impl + { + // default implementation + template <typename First, typename Last> + struct apply : distance_detail::linear_distance<First, Last> + { + BOOST_MPL_ASSERT_NOT((traits::is_random_access<First>)); + BOOST_MPL_ASSERT_NOT((traits::is_random_access<Last>)); + }; + }; + + template <> + struct distance_impl<iterator_facade_tag> + { + template <typename First, typename Last> + struct apply : First::template distance<First, Last> {}; + }; + + template <> + struct distance_impl<boost_array_iterator_tag>; + + template <> + struct distance_impl<mpl_iterator_tag>; + + template <> + struct distance_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename First, typename Last> + struct distance + : extension::distance_impl<typename detail::tag_of<First>::type>:: + template apply<First, Last> + { + typedef typename extension::distance_impl<typename detail::tag_of<First>::type>:: + template apply<First, Last>::type distance_application; + BOOST_STATIC_CONSTANT(int, value = distance_application::value); + }; + } + + template <typename First, typename Last> + inline typename result_of::distance<First, Last>::type + distance(First const& a, Last const& b) + { + return result_of::distance<First, Last>::call(a,b); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/equal_to.hpp b/3rdParty/Boost/src/boost/fusion/iterator/equal_to.hpp new file mode 100644 index 0000000..a038741 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/equal_to.hpp @@ -0,0 +1,93 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_EQUAL_TO_05052005_1208) +#define FUSION_EQUAL_TO_05052005_1208 + +#include <boost/type_traits/is_same.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/fusion/support/is_iterator.hpp> +#include <boost/mpl/and.hpp> +#include <boost/utility/enable_if.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct equal_to_impl + { + // default implementation + template <typename I1, typename I2> + struct apply + : is_same<typename add_const<I1>::type, typename add_const<I2>::type> + {}; + }; + + template <> + struct equal_to_impl<iterator_facade_tag> + { + template <typename I1, typename I2> + struct apply : I1::template equal_to<I1, I2> {}; + }; + + template <> + struct equal_to_impl<boost_array_iterator_tag>; + + template <> + struct equal_to_impl<mpl_iterator_tag>; + + template <> + struct equal_to_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename I1, typename I2> + struct equal_to + : extension::equal_to_impl<typename detail::tag_of<I1>::type>:: + template apply<I1, I2> + {}; + } + + namespace iterator_operators + { + template <typename Iter1, typename Iter2> + inline typename + enable_if< + mpl::and_<is_fusion_iterator<Iter1>, is_fusion_iterator<Iter2> > + , bool + >::type + operator==(Iter1 const&, Iter2 const&) + { + return result_of::equal_to<Iter1, Iter2>::value; + } + + template <typename Iter1, typename Iter2> + inline typename + enable_if< + mpl::and_<is_fusion_iterator<Iter1>, is_fusion_iterator<Iter2> > + , bool + >::type + operator!=(Iter1 const&, Iter2 const&) + { + return !result_of::equal_to<Iter1, Iter2>::value; + } + } + + using iterator_operators::operator==; + using iterator_operators::operator!=; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/iterator/iterator_facade.hpp b/3rdParty/Boost/src/boost/fusion/iterator/iterator_facade.hpp new file mode 100644 index 0000000..fa74f8d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/iterator_facade.hpp @@ -0,0 +1,57 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ITERATOR_FACADE_09252006_1011) +#define FUSION_ITERATOR_FACADE_09252006_1011 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/iterator/detail/advance.hpp> +#include <boost/fusion/iterator/detail/distance.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/type_traits/is_same.hpp> +#include <boost/mpl/assert.hpp> + +namespace boost { namespace fusion +{ + struct iterator_facade_tag; + + template <typename Derived, typename Category> + struct iterator_facade : iterator_base<Derived> + { + typedef iterator_facade_tag fusion_tag; + typedef Derived derived_type; + typedef Category category; + + // default implementation + template <typename I1, typename I2> + struct equal_to // default implementation + : is_same< + typename I1::derived_type + , typename I2::derived_type + > + {}; + + // default implementation + template <typename Iterator, typename N> + struct advance : + mpl::if_c< + (N::value > 0) + , advance_detail::forward<Iterator, N::value> + , advance_detail::backward<Iterator, N::value> + >::type + { + BOOST_MPL_ASSERT_NOT((traits::is_random_access<Iterator>)); + }; + + // default implementation + template <typename First, typename Last> + struct distance : + distance_detail::linear_distance<First, Last> + {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/key_of.hpp b/3rdParty/Boost/src/boost/fusion/iterator/key_of.hpp new file mode 100644 index 0000000..64c2f86 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/key_of.hpp @@ -0,0 +1,42 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_ITERATOR_KEY_OF_HPP +#define BOOST_FUSION_ITERATOR_KEY_OF_HPP + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + struct iterator_facade_tag; + + namespace extension + { + template <typename> + struct key_of_impl; + + template <> + struct key_of_impl<iterator_facade_tag> + { + template <typename It> + struct apply + : It::template key_of<It> + {}; + }; + } + + namespace result_of + { + template <typename It> + struct key_of + : extension::key_of_impl<typename traits::tag_of<It>::type>:: + template apply<It> + {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/mpl.hpp b/3rdParty/Boost/src/boost/fusion/iterator/mpl.hpp new file mode 100644 index 0000000..2709bd2 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/mpl.hpp @@ -0,0 +1,13 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ITERATOR_MPL_10022005_0557) +#define FUSION_ITERATOR_MPL_10022005_0557 + +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/iterator/mpl/fusion_iterator.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/mpl/convert_iterator.hpp b/3rdParty/Boost/src/boost/fusion/iterator/mpl/convert_iterator.hpp new file mode 100644 index 0000000..6cec510 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/mpl/convert_iterator.hpp @@ -0,0 +1,58 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_CONVERT_ITERATOR_05062005_1218) +#define FUSION_CONVERT_ITERATOR_05062005_1218 + +#include <boost/fusion/support/is_iterator.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/bool.hpp> + +namespace boost { namespace fusion +{ + template <typename Iterator> + struct mpl_iterator; // forward declaration + + // Test T. If it is a fusion iterator, return a reference to it. + // else, assume it is an mpl iterator. + + template <typename T> + struct convert_iterator + { + typedef typename + mpl::if_< + is_fusion_iterator<T> + , T + , mpl_iterator<T> + >::type + type; + + static T const& + call(T const& x, mpl::true_) + { + return x; + } + + static mpl_iterator<T> + call(T const& /*x*/, mpl::false_) + { + return mpl_iterator<T>(); + } + + static typename + mpl::if_< + is_fusion_iterator<T> + , T const& + , mpl_iterator<T> + >::type + call(T const& x) + { + return call(x, is_fusion_iterator<T>()); + } + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/mpl/fusion_iterator.hpp b/3rdParty/Boost/src/boost/fusion/iterator/mpl/fusion_iterator.hpp new file mode 100644 index 0000000..b18ef8f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/mpl/fusion_iterator.hpp @@ -0,0 +1,79 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_FUSION_ITERATOR_10012005_1551) +#define FUSION_FUSION_ITERATOR_10012005_1551 + +#include <boost/fusion/iterator/value_of.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> +#include <boost/fusion/support/category_of.hpp> +#include <boost/mpl/next_prior.hpp> +#include <boost/mpl/advance_fwd.hpp> +#include <boost/mpl/distance_fwd.hpp> +#include <boost/mpl/iterator_tags.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/type_traits/is_base_of.hpp> + +namespace boost { namespace fusion { namespace detail +{ + +template<class Category> +struct to_mpl_category { + typedef typename mpl::eval_if< + is_base_of<random_access_traversal_tag, Category>, + mpl::random_access_iterator_tag, + mpl::eval_if< + is_base_of<bidirectional_traversal_tag, Category>, + mpl::bidirectional_iterator_tag, + mpl::forward_iterator_tag + > + >::type type; +}; + +}}} + +namespace boost { namespace mpl +{ + template <typename Iterator> + struct fusion_iterator + { + typedef typename fusion::result_of::value_of<Iterator>::type type; + typedef typename fusion::traits::category_of<Iterator>::type fusion_category; + typedef typename fusion::detail::to_mpl_category<fusion_category>::type category; + typedef Iterator iterator; + }; + + template <typename Iterator> + struct next<fusion_iterator<Iterator> > + { + typedef fusion_iterator<typename fusion::result_of::next<Iterator>::type> type; + }; + + template <typename Iterator> + struct prior<fusion_iterator<Iterator> > + { + typedef fusion_iterator<typename fusion::result_of::prior<Iterator>::type> type; + }; + + template <typename Iterator, typename N> + struct advance<fusion_iterator<Iterator>, N> + { + typedef fusion_iterator<typename fusion::result_of::advance<Iterator, N>::type> type; + }; + + template <typename First, typename Last> + struct distance<fusion_iterator<First>, fusion_iterator<Last> > + : fusion::result_of::distance<First, Last> + {}; + +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/iterator/next.hpp b/3rdParty/Boost/src/boost/fusion/iterator/next.hpp new file mode 100644 index 0000000..d2cf63d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/next.hpp @@ -0,0 +1,63 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_NEXT_05042005_1101) +#define FUSION_NEXT_05042005_1101 + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct next_impl + { + template <typename Iterator> + struct apply {}; + }; + + template <> + struct next_impl<iterator_facade_tag> + { + template <typename Iterator> + struct apply : Iterator::template next<Iterator> {}; + }; + + template <> + struct next_impl<boost_array_iterator_tag>; + + template <> + struct next_impl<mpl_iterator_tag>; + + template <> + struct next_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename Iterator> + struct next + : extension::next_impl<typename detail::tag_of<Iterator>::type>:: + template apply<Iterator> + {}; + } + + template <typename Iterator> + typename result_of::next<Iterator>::type const + next(Iterator const& i) + { + return result_of::next<Iterator>::call(i); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/prior.hpp b/3rdParty/Boost/src/boost/fusion/iterator/prior.hpp new file mode 100644 index 0000000..a8b9fd6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/prior.hpp @@ -0,0 +1,63 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PRIOR_05042005_1144) +#define FUSION_PRIOR_05042005_1144 + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct prior_impl + { + template <typename Iterator> + struct apply {}; + }; + + template <> + struct prior_impl<iterator_facade_tag> + { + template <typename Iterator> + struct apply : Iterator::template prior<Iterator> {}; + }; + + template <> + struct prior_impl<boost_array_iterator_tag>; + + template <> + struct prior_impl<mpl_iterator_tag>; + + template <> + struct prior_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename Iterator> + struct prior + : extension::prior_impl<typename detail::tag_of<Iterator>::type>:: + template apply<Iterator> + {}; + } + + template <typename Iterator> + typename result_of::prior<Iterator>::type const + prior(Iterator const& i) + { + return result_of::prior<Iterator>::call(i); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/value_of.hpp b/3rdParty/Boost/src/boost/fusion/iterator/value_of.hpp new file mode 100644 index 0000000..478e4d2 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/value_of.hpp @@ -0,0 +1,57 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VALUE_OF_05052005_1126) +#define FUSION_VALUE_OF_05052005_1126 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct value_of_impl + { + template <typename Iterator> + struct apply {}; + }; + + template <> + struct value_of_impl<iterator_facade_tag> + { + template <typename Iterator> + struct apply : Iterator::template value_of<Iterator> {}; + }; + + template <> + struct value_of_impl<boost_array_iterator_tag>; + + template <> + struct value_of_impl<mpl_iterator_tag>; + + template <> + struct value_of_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename Iterator> + struct value_of + : extension::value_of_impl<typename detail::tag_of<Iterator>::type>:: + template apply<Iterator> + {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/iterator/value_of_data.hpp b/3rdParty/Boost/src/boost/fusion/iterator/value_of_data.hpp new file mode 100644 index 0000000..4a8316d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/iterator/value_of_data.hpp @@ -0,0 +1,42 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_ITERATOR_VALUE_OF_DATA_HPP +#define BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + struct iterator_facade_tag; + + namespace extension + { + template <typename> + struct value_of_data_impl; + + template <> + struct value_of_data_impl<iterator_facade_tag> + { + template <typename It> + struct apply + : It::template value_of_data<It> + {}; + }; + } + + namespace result_of + { + template <typename It> + struct value_of_data + : extension::value_of_data_impl<typename traits::tag_of<It>::type>:: + template apply<It> + {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl.hpp b/3rdParty/Boost/src/boost/fusion/mpl.hpp new file mode 100644 index 0000000..e499df9 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl.hpp @@ -0,0 +1,32 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_MPL_09172006_2049) +#define FUSION_MPL_09172006_2049 + +// The fusion <--> MPL link headers +#include <boost/fusion/iterator/mpl.hpp> +#include <boost/fusion/adapted/mpl.hpp> + +#include <boost/fusion/mpl/at.hpp> +#include <boost/fusion/mpl/back.hpp> +#include <boost/fusion/mpl/begin.hpp> +#include <boost/fusion/mpl/clear.hpp> +#include <boost/fusion/mpl/empty.hpp> +#include <boost/fusion/mpl/end.hpp> +#include <boost/fusion/mpl/erase.hpp> +#include <boost/fusion/mpl/erase_key.hpp> +#include <boost/fusion/mpl/front.hpp> +#include <boost/fusion/mpl/has_key.hpp> +#include <boost/fusion/mpl/insert.hpp> +#include <boost/fusion/mpl/insert_range.hpp> +#include <boost/fusion/mpl/pop_back.hpp> +#include <boost/fusion/mpl/pop_front.hpp> +#include <boost/fusion/mpl/push_back.hpp> +#include <boost/fusion/mpl/push_front.hpp> +#include <boost/fusion/mpl/size.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/at.hpp b/3rdParty/Boost/src/boost/fusion/mpl/at.hpp new file mode 100644 index 0000000..a164bb3 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/at.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_AT_10022005_1616) +#define FUSION_AT_10022005_1616 + +#include <boost/mpl/at.hpp> +#include <boost/fusion/sequence/intrinsic/value_at.hpp> + +namespace boost { +namespace fusion +{ + struct fusion_sequence_tag; +} + +namespace mpl +{ + template <typename Tag> + struct at_impl; + + template <> + struct at_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename N> + struct apply : fusion::result_of::value_at<Sequence, N> {}; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/back.hpp new file mode 100644 index 0000000..1f5197e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/back.hpp @@ -0,0 +1,32 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BACK_10022005_1620) +#define FUSION_BACK_10022005_1620 + +#include <boost/mpl/back.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/prior.hpp> +#include <boost/fusion/iterator/value_of.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct back_impl; + + template <> + struct back_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : + fusion::result_of::value_of< + typename fusion::result_of::prior< + typename fusion::result_of::end<Sequence>::type + >::type> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp b/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp new file mode 100644 index 0000000..be8b314 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_10022005_1620) +#define FUSION_BEGIN_10022005_1620 + +#include <boost/mpl/begin_end.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp> +#include <boost/fusion/iterator/mpl/fusion_iterator.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef fusion_iterator<typename fusion::result_of::begin<Sequence>::type> type; + }; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp b/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp new file mode 100644 index 0000000..14b3489 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_CLEAR_10022005_1817) +#define FUSION_CLEAR_10022005_1817 + +#include <boost/mpl/clear.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/mpl/detail/clear.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct clear_impl; + + template <> + struct clear_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + fusion::detail::clear<typename fusion::detail::tag_of<Sequence>::type>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp b/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp new file mode 100644 index 0000000..d8c32d5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_CLEAR_10022005_1442) +#define FUSION_CLEAR_10022005_1442 + +#include <boost/fusion/container/vector/vector_fwd.hpp> +#include <boost/fusion/container/list/list_fwd.hpp> +#include <boost/fusion/container/map/map_fwd.hpp> +#include <boost/fusion/container/set/set_fwd.hpp> +#include <boost/fusion/container/deque/deque_fwd.hpp> + +namespace boost { namespace fusion +{ + struct cons_tag; + struct map_tag; + struct set_tag; + struct vector_tag; + struct deque_tag; + + namespace detail + { + template <typename Tag> + struct clear; + + template <> + struct clear<cons_tag> : mpl::identity<list<> > {}; + + template <> + struct clear<map_tag> : mpl::identity<map<> > {}; + + template <> + struct clear<set_tag> : mpl::identity<set<> > {}; + + template <> + struct clear<vector_tag> : mpl::identity<vector<> > {}; + + template <> + struct clear<deque_tag> : mpl::identity<deque<> > {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp b/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp new file mode 100644 index 0000000..a0e27d6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_EMPTY_10022005_1619) +#define FUSION_EMPTY_10022005_1619 + +#include <boost/mpl/empty.hpp> +#include <boost/fusion/sequence/intrinsic/empty.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct empty_impl; + + template <> + struct empty_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : fusion::result_of::empty<Sequence> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/end.hpp b/3rdParty/Boost/src/boost/fusion/mpl/end.hpp new file mode 100644 index 0000000..ed3320b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/end.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_END_10022005_1619) +#define FUSION_END_10022005_1619 + +#include <boost/mpl/begin_end.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/adapted/mpl/detail/end_impl.hpp> +#include <boost/fusion/iterator/mpl/fusion_iterator.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef fusion_iterator<typename fusion::result_of::end<Sequence>::type> type; + }; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp b/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp new file mode 100644 index 0000000..a8b092a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ERASE_10022005_1835) +#define FUSION_ERASE_10022005_1835 + +#include <boost/mpl/erase.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/erase.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct erase_impl; + + template <> + struct erase_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename First, typename Last> + struct apply + { + typedef typename + fusion::result_of::erase<Sequence, First, Last>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp b/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp new file mode 100644 index 0000000..3cda268 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ERASE_KEY_10022005_1907) +#define FUSION_ERASE_KEY_10022005_1907 + +#include <boost/mpl/erase_key.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/erase_key.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct erase_key_impl; + + template <> + struct erase_key_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Key> + struct apply + { + typedef typename + fusion::result_of::erase_key<Sequence, Key>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/front.hpp new file mode 100644 index 0000000..97a26f7 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/front.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_FRONT_10022005_1618) +#define FUSION_FRONT_10022005_1618 + +#include <boost/mpl/front.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/iterator/value_of.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct front_impl; + + template <> + struct front_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : + fusion::result_of::value_of<typename fusion::result_of::begin<Sequence>::type> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp b/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp new file mode 100644 index 0000000..beac7c6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp @@ -0,0 +1,27 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_HAS_KEY_10022005_1617) +#define FUSION_HAS_KEY_10022005_1617 + +#include <boost/mpl/has_key.hpp> +#include <boost/fusion/sequence/intrinsic/has_key.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct has_key_impl; + + template <> + struct has_key_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Key> + struct apply : fusion::result_of::has_key<Sequence, Key> {}; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp b/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp new file mode 100644 index 0000000..76918ce --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INSERT_10022005_1837) +#define FUSION_INSERT_10022005_1837 + +#include <boost/mpl/insert.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/insert.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct insert_impl; + + template <> + struct insert_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Pos, typename T> + struct apply + { + typedef typename + fusion::result_of::insert<Sequence, Pos, T>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp b/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp new file mode 100644 index 0000000..4da3936 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_INSERT_RANGE_10022005_1838) +#define FUSION_INSERT_RANGE_10022005_1838 + +#include <boost/mpl/insert_range.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/insert_range.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct insert_range_impl; + + template <> + struct insert_range_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Pos, typename Range> + struct apply + { + typedef typename + fusion::result_of::insert_range<Sequence, Pos, Range>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp new file mode 100644 index 0000000..84bd75a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_POP_BACK_10022005_1801) +#define FUSION_POP_BACK_10022005_1801 + +#include <boost/mpl/pop_back.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/pop_back.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct pop_back_impl; + + template <> + struct pop_back_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + fusion::result_of::pop_back<Sequence>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp new file mode 100644 index 0000000..ffe6c30 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_POP_FRONT_10022005_1800) +#define FUSION_POP_FRONT_10022005_1800 + +#include <boost/mpl/pop_front.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/pop_front.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct pop_front_impl; + + template <> + struct pop_front_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + fusion::result_of::pop_front<Sequence>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp new file mode 100644 index 0000000..e96faa0 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PUSH_BACK_10022005_1647) +#define FUSION_PUSH_BACK_10022005_1647 + +#include <boost/mpl/push_back.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/push_back.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct push_back_impl; + + template <> + struct push_back_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename T> + struct apply + { + typedef typename + fusion::result_of::push_back<Sequence, T>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp new file mode 100644 index 0000000..c508d65 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PUSH_FRONT_10022005_1720) +#define FUSION_PUSH_FRONT_10022005_1720 + +#include <boost/mpl/push_front.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/push_front.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct push_front_impl; + + template <> + struct push_front_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename T> + struct apply + { + typedef typename + fusion::result_of::push_front<Sequence, T>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/size.hpp b/3rdParty/Boost/src/boost/fusion/mpl/size.hpp new file mode 100644 index 0000000..2c72428 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/size.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SIZE_10022005_1617) +#define FUSION_SIZE_10022005_1617 + +#include <boost/mpl/size.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct size_impl; + + template <> + struct size_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : fusion::result_of::size<Sequence> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/sequence/comparison/enable_comparison.hpp b/3rdParty/Boost/src/boost/fusion/sequence/comparison/enable_comparison.hpp new file mode 100644 index 0000000..d7d9538 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/comparison/enable_comparison.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_ENABLE_COMPARISON_09232005_1958) +#define FUSION_ENABLE_COMPARISON_09232005_1958 + +#include <boost/mpl/or.hpp> +#include <boost/mpl/and.hpp> +#include <boost/mpl/not.hpp> +#include <boost/mpl/equal_to.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/is_sequence.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> + +namespace boost { namespace fusion { namespace traits +{ + template <typename Seq1, typename Seq2, typename Enable = void> + struct enable_equality + : mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> > + {}; + + template <typename Seq1, typename Seq2, typename Enable = void> + struct enable_comparison + : mpl::and_< + mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> > + , mpl::equal_to<result_of::size<Seq1>, result_of::size<Seq2> > + > + {}; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/sequence/convert.hpp b/3rdParty/Boost/src/boost/fusion/sequence/convert.hpp new file mode 100644 index 0000000..a6e3ccc --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/convert.hpp @@ -0,0 +1,48 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_CONVERT_10022005_1442) +#define FUSION_CONVERT_10022005_1442 + +namespace boost { namespace fusion +{ + namespace extension + { + template <typename Tag> + struct convert_impl; + } + + namespace result_of + { + template <typename Tag, typename Sequence> + struct convert + { + typedef typename extension::convert_impl<Tag> gen; + + typedef typename + gen::template apply<Sequence>::type + type; + }; + } + + template <typename Tag, typename Sequence> + inline typename result_of::convert<Tag, Sequence>::type + convert(Sequence& seq) + { + typedef typename result_of::convert<Tag, Sequence>::gen gen; + return gen::call(seq); + } + + template <typename Tag, typename Sequence> + inline typename result_of::convert<Tag, Sequence const>::type + convert(Sequence const& seq) + { + typedef typename result_of::convert<Tag, Sequence const>::gen gen; + return gen::call(seq); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic.hpp new file mode 100644 index 0000000..8c5f4ab --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SEQUENCE_INTRINSIC_10022005_0618) +#define FUSION_SEQUENCE_INTRINSIC_10022005_0618 + +#include <boost/fusion/sequence/intrinsic/at.hpp> +#include <boost/fusion/sequence/intrinsic/back.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/empty.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/sequence/intrinsic/front.hpp> +#include <boost/fusion/sequence/intrinsic/has_key.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> +#include <boost/fusion/sequence/intrinsic/value_at.hpp> +#include <boost/fusion/sequence/intrinsic/at_key.hpp> +#include <boost/fusion/sequence/intrinsic/value_at_key.hpp> + +#endif 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..9ccbfc6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp @@ -0,0 +1,106 @@ +/*============================================================================= + 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) +==============================================================================*/ +#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/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 + + 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>; + } + + 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_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp new file mode 100644 index 0000000..30fefe0 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp @@ -0,0 +1,92 @@ +/*============================================================================= + Copyright (c) 2001-2006 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/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..1f3567f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_BACK_09162005_0350) +#define FUSION_BACK_09162005_0350 + +#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..c9ece3a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp @@ -0,0 +1,84 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_04052005_1132) +#define FUSION_BEGIN_04052005_1132 + +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/support/is_sequence.hpp> +#include <boost/utility/enable_if.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; + }; + + 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/empty.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp new file mode 100644 index 0000000..2390a49 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp @@ -0,0 +1,60 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_EMPTY_09162005_0335) +#define FUSION_EMPTY_09162005_0335 + +#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..0247671 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp @@ -0,0 +1,84 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_END_04052005_1141) +#define FUSION_END_04052005_1141 + +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/support/is_sequence.hpp> +#include <boost/utility/enable_if.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; + }; + + 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/ext_/segments.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/segments.hpp new file mode 100644 index 0000000..58f148f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/segments.hpp @@ -0,0 +1,56 @@ +/*============================================================================= + 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(FUSION_SEGMENTS_04052005_1141) +#define FUSION_SEGMENTS_04052005_1141 + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + // segments: returns a sequence of sequences + namespace extension + { + template <typename Tag> + struct segments_impl + { + template <typename Sequence> + struct apply {}; + }; + } + + namespace result_of + { + template <typename Sequence> + struct segments + { + typedef typename + extension::segments_impl<typename traits::tag_of<Sequence>::type>:: + template apply<Sequence>::type + type; + }; + } + + template <typename Sequence> + typename result_of::segments<Sequence>::type + segments(Sequence & seq) + { + return + extension::segments_impl<typename traits::tag_of<Sequence>::type>:: + template apply<Sequence>::call(seq); + } + + template <typename Sequence> + typename result_of::segments<Sequence const>::type + segments(Sequence const& seq) + { + return + extension::segments_impl<typename traits::tag_of<Sequence>::type>:: + template apply<Sequence const>::call(seq); + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/size_s.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/size_s.hpp new file mode 100644 index 0000000..8b61746 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/size_s.hpp @@ -0,0 +1,57 @@ +/*============================================================================= + 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(FUSION_SIZE_S_08112006_1141) +#define FUSION_SIZE_S_08112006_1141 + +#include <boost/mpl/plus.hpp> +#include <boost/mpl/size_t.hpp> +#include <boost/type_traits/remove_reference.hpp> +#include <boost/fusion/algorithm/iteration/fold.hpp> +#include <boost/fusion/support/ext_/is_segmented.hpp> +#include <boost/fusion/sequence/intrinsic/ext_/segments.hpp> + +namespace boost { namespace fusion +{ + /////////////////////////////////////////////////////////////////////////// + // calculates the size of any segmented data structure. + template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value> + struct segmented_size; + + namespace detail + { + struct size_plus + { + template<typename Sig> + struct result; + + template<typename This, typename State, typename Seq> + struct result<This(State, Seq)> + : mpl::plus< + segmented_size<typename remove_reference<Seq>::type> + , typename remove_reference<State>::type + > + {}; + }; + } + + /////////////////////////////////////////////////////////////////////////// + template<typename Sequence, bool IsSegmented> + struct segmented_size + : result_of::fold< + typename result_of::segments<Sequence>::type + , mpl::size_t<0> + , detail::size_plus + >::type + {}; + + template<typename Sequence> + struct segmented_size<Sequence, false> + : result_of::size<Sequence> + {}; +}} + +#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..bb79cfa --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_FRONT_09162005_0343) +#define FUSION_FRONT_09162005_0343 + +#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..f254eb1 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp @@ -0,0 +1,78 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_HAS_KEY_09232005_1454) +#define FUSION_HAS_KEY_09232005_1454 + +#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& seq) + { + typedef typename result_of::has_key<Sequence, Key>::type result; + return result(); + } +}} + +#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..2a3cb7f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp @@ -0,0 +1,74 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SIZE_05052005_0214) +#define FUSION_SIZE_05052005_0214 + +#include <boost/mpl/int.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 size_impl + { + template <typename Sequence> + struct apply : Sequence::size {}; + }; + + 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..01cdc9d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp @@ -0,0 +1,67 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VALUE_AT_05052005_0229) +#define FUSION_VALUE_AT_05052005_0229 + +#include <boost/mpl/int.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..d7f84cd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp @@ -0,0 +1,65 @@ +/*============================================================================= + Copyright (c) 2001-2006 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/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 + diff --git a/3rdParty/Boost/src/boost/fusion/support/category_of.hpp b/3rdParty/Boost/src/boost/fusion/support/category_of.hpp new file mode 100644 index 0000000..73def5b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/category_of.hpp @@ -0,0 +1,112 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_CATEGORY_OF_07202005_0308) +#define FUSION_CATEGORY_OF_07202005_0308 + +#include <boost/fusion/support/detail/category_of.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/type_traits/is_base_of.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + 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 incrementable_traversal_tag {}; + + struct single_pass_traversal_tag + : incrementable_traversal_tag {}; + + struct forward_traversal_tag + : single_pass_traversal_tag {}; + + struct bidirectional_traversal_tag + : forward_traversal_tag {}; + + struct random_access_traversal_tag + : bidirectional_traversal_tag {}; + + struct associative_tag {}; + + namespace extension + { + template<typename Tag> + struct category_of_impl + { + template<typename T> + struct apply : detail::fusion_category_of<T> {}; + }; + + template <> + struct category_of_impl<boost_tuple_tag>; + + template <> + struct category_of_impl<boost_array_tag>; + + template <> + struct category_of_impl<mpl_sequence_tag>; + + template <> + struct category_of_impl<std_pair_tag>; + } + + namespace traits + { + template <typename T> + struct category_of + : extension::category_of_impl<typename fusion::detail::tag_of<T>::type>:: + template apply<T> + {}; + + template <typename T> + struct is_associative + : is_base_of< + associative_tag + , typename category_of<T>::type> + {}; + + template <typename T> + struct is_incrementable + : is_base_of< + incrementable_traversal_tag + , typename category_of<T>::type> + {}; + + template <typename T> + struct is_single_pass + : is_base_of< + single_pass_traversal_tag + , typename category_of<T>::type> + {}; + + template <typename T> + struct is_forward + : is_base_of< + forward_traversal_tag + , typename category_of<T>::type> + {}; + + template <typename T> + struct is_bidirectional + : is_base_of< + bidirectional_traversal_tag + , typename category_of<T>::type> + {}; + + template <typename T> + struct is_random_access + : is_base_of< + random_access_traversal_tag + , typename category_of<T>::type> + {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/access.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/access.hpp new file mode 100644 index 0000000..af7374c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/detail/access.hpp @@ -0,0 +1,64 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ACCESS_04182005_0737) +#define FUSION_ACCESS_04182005_0737 + +#include <boost/type_traits/add_const.hpp> +#include <boost/type_traits/add_reference.hpp> + +namespace boost { namespace fusion { namespace detail +{ + template <typename T> + struct ref_result + { + typedef typename add_reference<typename T::type>::type type; + }; + + template <typename T> + struct cref_result + { + typedef typename + add_reference< + typename add_const<typename T::type>::type + >::type + type; + }; + + template <typename T> + struct call_param + { + typedef T const& type; + }; + + template <typename T> + struct call_param<T &> + { + typedef T& type; + }; + + template <typename T> + struct call_param<T const> + { + typedef T const& type; + }; + + template <typename T> + struct call_param<T volatile> + { + typedef T const& type; + }; + + template <typename T> + struct call_param<T const volatile> + { + typedef T const& type; + }; + +}}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/as_fusion_element.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/as_fusion_element.hpp new file mode 100644 index 0000000..2d02064 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/detail/as_fusion_element.hpp @@ -0,0 +1,47 @@ +/*============================================================================= + Copyright (c) 1999-2003 Jaakko Jarvi + 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) +==============================================================================*/ +#if !defined(FUSION_AS_FUSION_ELEMENT_05052005_0338) +#define FUSION_AS_FUSION_ELEMENT_05052005_0338 + +#include <boost/ref.hpp> + +namespace boost { namespace fusion { namespace detail +{ + template <typename T> + struct as_fusion_element + { + typedef T type; + }; + + template <typename T> + struct as_fusion_element<reference_wrapper<T> > + { + typedef T& type; + }; + + template <typename T, int N> + struct as_fusion_element<T[N]> + { + typedef const T(&type)[N]; + }; + + template <typename T, int N> + struct as_fusion_element<volatile T[N]> + { + typedef const volatile T(&type)[N]; + }; + + template <typename T, int N> + struct as_fusion_element<const volatile T[N]> + { + typedef const volatile T(&type)[N]; + }; + +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/category_of.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/category_of.hpp new file mode 100644 index 0000000..04102cf --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/detail/category_of.hpp @@ -0,0 +1,19 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_CATEGORY_OF_07212005_1025) +#define FUSION_CATEGORY_OF_07212005_1025 + +namespace boost { namespace fusion { namespace detail +{ + template <typename T> + struct fusion_category_of + { + typedef typename T::category type; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/is_mpl_sequence.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/is_mpl_sequence.hpp new file mode 100644 index 0000000..b7e792b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/detail/is_mpl_sequence.hpp @@ -0,0 +1,27 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105) +#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/mpl/is_sequence.hpp> +#include <boost/mpl/and.hpp> +#include <boost/mpl/not.hpp> +#include <boost/type_traits/is_convertible.hpp> + +namespace boost { namespace fusion { namespace detail +{ + template <typename T> + struct is_mpl_sequence + : mpl::and_< + mpl::not_<is_convertible<T, from_sequence_convertible_type> > + , mpl::is_sequence<T> > + {}; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/is_view.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/is_view.hpp new file mode 100644 index 0000000..5fa2f24 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/detail/is_view.hpp @@ -0,0 +1,19 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_IS_VIEW_03202006_0018) +#define FUSION_IS_VIEW_03202006_0018 + +namespace boost { namespace fusion { namespace detail +{ + template <typename T> + struct fusion_is_view + { + typedef typename T::is_view type; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/mpl_iterator_category.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/mpl_iterator_category.hpp new file mode 100644 index 0000000..37a7fe9 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/detail/mpl_iterator_category.hpp @@ -0,0 +1,66 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_MPL_ITERATOR_CATEGORY_07212005_0923) +#define FUSION_MPL_ITERATOR_CATEGORY_07212005_0923 + +namespace boost { namespace mpl +{ + struct forward_iterator_tag; + struct bidirectional_iterator_tag; + struct random_access_iterator_tag; +}} + +namespace boost { namespace fusion +{ + struct forward_traversal_tag; + struct bidirectional_traversal_tag; + struct random_access_traversal_tag; +}} + +namespace boost { namespace fusion { namespace detail +{ + template <typename Category> + struct mpl_iterator_category; + + template <> + struct mpl_iterator_category<mpl::forward_iterator_tag> + { + typedef forward_traversal_tag type; + }; + + template <> + struct mpl_iterator_category<mpl::bidirectional_iterator_tag> + { + typedef bidirectional_traversal_tag type; + }; + + template <> + struct mpl_iterator_category<mpl::random_access_iterator_tag> + { + typedef random_access_traversal_tag type; + }; + + template <> + struct mpl_iterator_category<forward_traversal_tag> + { + typedef forward_traversal_tag type; + }; + + template <> + struct mpl_iterator_category<bidirectional_traversal_tag> + { + typedef bidirectional_traversal_tag type; + }; + + template <> + struct mpl_iterator_category<random_access_traversal_tag> + { + typedef random_access_traversal_tag type; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/ext_/is_segmented.hpp b/3rdParty/Boost/src/boost/fusion/support/ext_/is_segmented.hpp new file mode 100644 index 0000000..63330a4 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/ext_/is_segmented.hpp @@ -0,0 +1,48 @@ +/*============================================================================= + 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(FUSION_IS_SEGMENTED_03202006_0015) +#define FUSION_IS_SEGMENTED_03202006_0015 + +#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 + struct iterator_range_tag; + + namespace extension + { + template<typename Tag> + struct is_segmented_impl + { + template<typename Sequence> + struct apply + : mpl::false_ + {}; + }; + + template<> + struct is_segmented_impl<iterator_range_tag>; + } + + namespace traits + { + template <typename Sequence> + struct is_segmented + : extension::is_segmented_impl<typename traits::tag_of<Sequence>::type>:: + template apply<Sequence> + { + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/is_iterator.hpp b/3rdParty/Boost/src/boost/fusion/support/is_iterator.hpp new file mode 100644 index 0000000..9e775f4 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/is_iterator.hpp @@ -0,0 +1,20 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_IS_ITERATOR_05062005_1219) +#define FUSION_IS_ITERATOR_05062005_1219 + +#include <boost/type_traits/is_base_of.hpp> + +namespace boost { namespace fusion +{ + struct iterator_root; + + template <typename T> + struct is_fusion_iterator : is_base_of<iterator_root, T> {}; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/is_sequence.hpp b/3rdParty/Boost/src/boost/fusion/support/is_sequence.hpp new file mode 100644 index 0000000..f57ca23 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/is_sequence.hpp @@ -0,0 +1,74 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_IS_SEQUENCE_05052005_1002) +#define FUSION_IS_SEQUENCE_05052005_1002 + +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/mpl/is_sequence.hpp> +#include <boost/mpl/or.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/type_traits/is_convertible.hpp> +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct non_fusion_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 T> + struct is_sequence_impl + { + template <typename Sequence> + struct apply + : is_convertible<Sequence, detail::from_sequence_convertible_type> + {}; + }; + + template <> + struct is_sequence_impl<non_fusion_tag> + { + template <typename T> + struct apply : mpl::false_ {}; + }; + + template <> + struct is_sequence_impl<boost_tuple_tag>; + + template <> + struct is_sequence_impl<boost_array_tag>; + + template <> + struct is_sequence_impl<mpl_sequence_tag>; + + template <> + struct is_sequence_impl<std_pair_tag>; + } + + namespace traits + { + template <typename T> + struct is_sequence + : extension::is_sequence_impl< + typename fusion::detail::tag_of<T>::type + >::template apply<T> + {}; + + template <typename Sequence, typename Enable = void> + struct is_native_fusion_sequence + : is_convertible<Sequence, detail::from_sequence_convertible_type> + {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/is_view.hpp b/3rdParty/Boost/src/boost/fusion/support/is_view.hpp new file mode 100644 index 0000000..e2cf6eb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/is_view.hpp @@ -0,0 +1,63 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_IS_VIEW_03202006_0015) +#define FUSION_IS_VIEW_03202006_0015 + +#include <boost/fusion/support/detail/is_view.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 is_view_impl + { + template <typename T> + struct apply + : detail::fusion_is_view<T> + {}; + }; + + template <> + struct is_view_impl<sequence_facade_tag> + { + template <typename Sequence> + struct apply : Sequence::is_view {}; + }; + + template <> + struct is_view_impl<boost_tuple_tag>; + + template <> + struct is_view_impl<boost_array_tag>; + + template <> + struct is_view_impl<mpl_sequence_tag>; + + template <> + struct is_view_impl<std_pair_tag>; + } + + namespace traits + { + template <typename T> + struct is_view : + extension::is_view_impl<typename fusion::detail::tag_of<T>::type>:: + template apply<T>::type + {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/iterator_base.hpp b/3rdParty/Boost/src/boost/fusion/support/iterator_base.hpp new file mode 100644 index 0000000..2f909b2 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/iterator_base.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ITERATOR_BASE_05042005_1008) +#define FUSION_ITERATOR_BASE_05042005_1008 + +namespace boost { namespace fusion +{ + struct iterator_root {}; + + template <typename Iterator> + struct iterator_base : iterator_root + { + Iterator const& + cast() const + { + return static_cast<Iterator const&>(*this); + } + + Iterator& + cast() + { + return static_cast<Iterator&>(*this); + } + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/sequence_base.hpp b/3rdParty/Boost/src/boost/fusion/support/sequence_base.hpp new file mode 100644 index 0000000..9a5186d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/sequence_base.hpp @@ -0,0 +1,54 @@ +/*============================================================================= + Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2007 Tobias Schwinger + + 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_SEQUENCE_BASE_04182005_0737) +#define FUSION_SEQUENCE_BASE_04182005_0737 + +#include <boost/mpl/begin_end_fwd.hpp> + +namespace boost { namespace fusion +{ + namespace detail + { + struct from_sequence_convertible_type + {}; + } + + template <typename Sequence> + struct sequence_base + { + Sequence const& + derived() const + { + return static_cast<Sequence const&>(*this); + } + + Sequence& + derived() + { + return static_cast<Sequence&>(*this); + } + + operator detail::from_sequence_convertible_type()const + { + return detail::from_sequence_convertible_type(); + } + }; + + struct fusion_sequence_tag; +}} + +namespace boost { namespace mpl +{ + // Deliberately break mpl::begin, so it doesn't lie that a Fusion sequence + // is not an MPL sequence by returning mpl::void_. + // In other words: Fusion Sequences are always MPL Sequences, but they can + // be incompletely defined. + template<> struct begin_impl< boost::fusion::fusion_sequence_tag >; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/tag_of.hpp b/3rdParty/Boost/src/boost/fusion/support/tag_of.hpp new file mode 100644 index 0000000..cba0606 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/tag_of.hpp @@ -0,0 +1,75 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_TAG_OF_09232005_0845) +#define FUSION_TAG_OF_09232005_0845 + +#include <boost/utility/enable_if.hpp> +#include <boost/type_traits/remove_const.hpp> +#include <boost/fusion/support/tag_of_fwd.hpp> +#include <boost/fusion/support/detail/is_mpl_sequence.hpp> +#include <boost/mpl/has_xxx.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/if.hpp> +#include <boost/config/no_tr1/utility.hpp> + +namespace boost +{ + template <typename T, std::size_t N> + class array; // forward + + 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 non_fusion_tag; + struct mpl_sequence_tag; + + namespace detail + { + BOOST_MPL_HAS_XXX_TRAIT_DEF(fusion_tag) + } + + namespace traits + { + template <typename Sequence, typename Active> + struct tag_of + : mpl::if_< fusion::detail::is_mpl_sequence<Sequence>, + mpl::identity<mpl_sequence_tag>, + mpl::identity<non_fusion_tag> >::type + {}; + + template <typename Sequence> + struct tag_of<Sequence, typename boost::enable_if<detail::has_fusion_tag<Sequence> >::type> + { + typedef typename Sequence::fusion_tag type; + }; + } + + namespace detail + { + template<typename T> + struct tag_of + : traits::tag_of<typename remove_const<T>::type> + {}; + } +}} +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/tag_of_fwd.hpp b/3rdParty/Boost/src/boost/fusion/support/tag_of_fwd.hpp new file mode 100644 index 0000000..e6c883d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/tag_of_fwd.hpp @@ -0,0 +1,20 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_TAG_OF_FWD_31122005_1445) +#define BOOST_FUSION_TAG_OF_FWD_31122005_1445 + +namespace boost { namespace fusion +{ + namespace traits + { + template<typename T, typename Active = void> + struct tag_of; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/support/void.hpp b/3rdParty/Boost/src/boost/fusion/support/void.hpp new file mode 100644 index 0000000..7dd11e5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/support/void.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SUPPORT_VOID_20070706_2125) +#define BOOST_FUSION_SUPPORT_VOID_20070706_2125 + +namespace boost { namespace fusion +{ + struct void_ {}; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/detail/strictest_traversal.hpp b/3rdParty/Boost/src/boost/fusion/view/detail/strictest_traversal.hpp new file mode 100644 index 0000000..0ba5d8a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/detail/strictest_traversal.hpp @@ -0,0 +1,68 @@ +/*============================================================================= + Copyright (c) 2001-2006 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_STRICTEST_TRAVERSAL_20060123_2101) +#define FUSION_STRICTEST_TRAVERSAL_20060123_2101 + +#include <boost/mpl/or.hpp> +#include <boost/mpl/if.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/mpl.hpp> +#include <boost/fusion/algorithm/iteration/fold.hpp> +#include <boost/type_traits/remove_reference.hpp> +#include <boost/type_traits/is_convertible.hpp> + +namespace boost { namespace fusion +{ + struct forward_traversal_tag; + struct bidirectional_traversal_tag; + struct random_access_traversal_tag; + + namespace detail + { + template<typename Tag1, typename Tag2, + bool Tag1Stricter = boost::is_convertible<Tag2,Tag1>::value> + struct stricter_traversal + { + typedef Tag1 type; + }; + + template<typename Tag1, typename Tag2> + struct stricter_traversal<Tag1,Tag2,false> + { + typedef Tag2 type; + }; + + struct strictest_traversal_impl + { + template<typename Sig> + struct result; + + template<typename StrictestSoFar, typename Next> + struct result<strictest_traversal_impl(StrictestSoFar, Next)> + { + typedef typename remove_reference<Next>::type next_value; + typedef typename remove_reference<StrictestSoFar>::type strictest_so_far; + + typedef strictest_so_far tag1; + typedef typename traits::category_of<next_value>::type tag2; + + typedef typename stricter_traversal<tag1,tag2>::type type; + }; + }; + + template<typename Sequence> + struct strictest_traversal + : result_of::fold< + Sequence, fusion::random_access_traversal_tag, + strictest_traversal_impl> + {}; + + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/ext_/segmented_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/ext_/segmented_iterator.hpp new file mode 100644 index 0000000..79bc707 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/ext_/segmented_iterator.hpp @@ -0,0 +1,448 @@ +/*============================================================================= + Copyright (c) 2006 Eric Niebler + + Use, modification and distribution is subject to 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 FUSION_SEGMENTED_ITERATOR_EAN_05032006_1027 +#define FUSION_SEGMENTED_ITERATOR_EAN_05032006_1027 + +#include <boost/mpl/if.hpp> +#include <boost/mpl/int.hpp> +#include <boost/mpl/not.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/mpl/next_prior.hpp> +#include <boost/mpl/placeholders.hpp> +#include <boost/type_traits/is_same.hpp> +#include <boost/type_traits/is_reference.hpp> +#include <boost/type_traits/remove_reference.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/support/is_sequence.hpp> +#include <boost/fusion/view/filter_view.hpp> +#include <boost/fusion/container/list/cons.hpp> // for nil +#include <boost/fusion/container/generation/make_cons.hpp> +#include <boost/fusion/iterator/advance.hpp> +#include <boost/fusion/iterator/distance.hpp> +#include <boost/fusion/sequence/intrinsic/ext_/segments.hpp> +#include <boost/fusion/support/ext_/is_segmented.hpp> + +namespace boost { namespace fusion +{ + struct fusion_sequence_tag; + + namespace detail + { + using mpl::_; + using mpl::not_; + + //////////////////////////////////////////////////////////////////////////// + template<typename Sequence> + struct is_empty + : result_of::equal_to< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type + > + {}; + + template<typename Sequence> + struct is_empty<Sequence &> + : is_empty<Sequence> + {}; + + //////////////////////////////////////////////////////////////////////////// + struct not_is_empty_pred + { + template<typename Sequence> + struct apply + : not_<is_empty<Sequence> > + {}; + }; + + struct segmented_range_tag; + + //////////////////////////////////////////////////////////////////////////// + template<typename Sequence, typename Index, bool IsSegmented> + struct segmented_range + : sequence_base<segmented_range<Sequence, Index, IsSegmented> > + { + BOOST_MPL_ASSERT_NOT((is_reference<Sequence>)); + typedef mpl::bool_<IsSegmented> is_segmented; + typedef segmented_range_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::true_ is_view; + + // If this is a range of segments, skip over the empty ones + typedef typename mpl::if_< + is_segmented + , filter_view<Sequence, not_is_empty_pred> + , Sequence + >::type sequence_non_ref_type; + + typedef typename mpl::if_< + traits::is_view<sequence_non_ref_type> + , sequence_non_ref_type + , sequence_non_ref_type & + >::type sequence_type; + + typedef + typename fusion::result_of::advance< + typename fusion::result_of::begin<sequence_non_ref_type>::type + , Index + >::type + iterator_type; + + typedef typename traits::category_of<sequence_non_ref_type>::type category; + + explicit segmented_range(Sequence &sequence_) + : sequence(sequence_type(sequence_)) + {} + + segmented_range(sequence_type sequence_, int) + : sequence(sequence_) + {} + + iterator_type where_() const + { + return fusion::advance<Index>( + fusion::begin(const_cast<sequence_non_ref_type &>(this->sequence)) + ); + } + + sequence_type sequence; + + private: + segmented_range &operator =(segmented_range const &); + }; + } + + namespace extension + { + template<> + struct is_segmented_impl<detail::segmented_range_tag> + { + template<typename Sequence> + struct apply + : Sequence::is_segmented + {}; + }; + + template<> + struct size_impl<detail::segmented_range_tag> + { + template<typename Sequence> + struct apply + : mpl::int_< + result_of::distance< + typename Sequence::iterator_type + , typename result_of::end<typename Sequence::sequence_non_ref_type>::type + >::value + > + {}; + }; + + template<> + struct segments_impl<detail::segmented_range_tag> + { + template<typename Sequence> + struct apply + { + typedef Sequence &type; + static type call(Sequence &seq) + { + return seq; + } + }; + }; + + template<> + struct begin_impl<detail::segmented_range_tag> + { + template<typename Sequence> + struct apply + { + typedef typename Sequence::iterator_type type; + static type call(Sequence &seq) + { + return seq.where_(); + } + }; + }; + + template<> + struct end_impl<detail::segmented_range_tag> + { + template<typename Sequence> + struct apply + { + typedef typename Sequence::sequence_non_ref_type sequence; + typedef typename result_of::end<sequence>::type type; + + static type call(Sequence &seq) + { + return fusion::end(seq.sequence); + } + }; + }; + } + + namespace detail + { + /////////////////////////////////////////////////////////////////////// + template<typename Range> + struct range_next; + + template<typename Sequence, typename Index, bool IsSegmented> + struct range_next<segmented_range<Sequence, Index, IsSegmented> > + { + typedef typename mpl::next<Index>::type index_type; + typedef segmented_range<Sequence, index_type, IsSegmented> type; + + static type call(segmented_range<Sequence, Index, IsSegmented> const &rng) + { + return type(rng.sequence, 0); + } + }; + + /////////////////////////////////////////////////////////////////////// + template<typename Cons> + struct is_range_next_empty + : is_empty<typename range_next<typename Cons::car_type>::type> + {}; + + template<> + struct is_range_next_empty<nil> + : mpl::true_ + {}; + + /////////////////////////////////////////////////////////////////////// + template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value> + struct as_segmented_range + { + typedef typename result_of::segments<Sequence>::type segments; + typedef typename remove_reference<segments>::type sequence; + typedef segmented_range<sequence, mpl::int_<0>, true> type; + + static type call(Sequence &seq) + { + segments segs(fusion::segments(seq)); + return type(segs); + } + }; + + template<typename Sequence> + struct as_segmented_range<Sequence, false> + { + typedef typename remove_reference<Sequence>::type sequence; + typedef segmented_range<sequence, mpl::int_<0>, false> type; + + static type call(Sequence &seq) + { + return type(seq); + } + }; + + template<typename Sequence, typename Index, bool IsSegmented> + struct as_segmented_range<segmented_range<Sequence, Index, IsSegmented>, IsSegmented> + { + typedef segmented_range<Sequence, Index, IsSegmented> type; + static type &call(type &seq) + { + return seq; + } + }; + + /////////////////////////////////////////////////////////////////////// + template< + typename Sequence + , typename State = nil + , bool IsSegmented = traits::is_segmented<Sequence>::value + > + struct push_segments + { + typedef typename as_segmented_range<Sequence>::type range; + typedef typename result_of::begin<range>::type begin; + typedef typename result_of::deref<begin>::type next_ref; + typedef typename remove_reference<next_ref>::type next; + typedef push_segments<next, cons<range, State> > push; + typedef typename push::type type; + + static type call(Sequence &seq, State const &state) + { + range rng(as_segmented_range<Sequence>::call(seq)); + next_ref nxt(*fusion::begin(rng)); + return push::call(nxt, fusion::make_cons(rng, state)); + } + }; + + template<typename Sequence, typename State> + struct push_segments<Sequence, State, false> + { + typedef typename as_segmented_range<Sequence>::type range; + typedef cons<range, State> type; + + static type call(Sequence &seq, State const &state) + { + range rng(as_segmented_range<Sequence>::call(seq)); + return fusion::make_cons(rng, state); + } + }; + + /////////////////////////////////////////////////////////////////////// + template<typename State, bool IsEmpty = is_range_next_empty<State>::value> + struct pop_segments + { + typedef range_next<typename State::car_type> next; + typedef push_segments<typename next::type, typename State::cdr_type> push; + typedef typename push::type type; + + static type call(State const &state) + { + typename next::type rng(next::call(state.car)); + return push::call(rng, state.cdr); + } + }; + + template<typename State> + struct pop_segments<State, true> + { + typedef pop_segments<typename State::cdr_type> pop; + typedef typename pop::type type; + + static type call(State const &state) + { + return pop::call(state.cdr); + } + }; + + template<> + struct pop_segments<nil, true> + { + typedef nil type; + + static type call(nil const &) + { + return nil(); + } + }; + } // namespace detail + + struct segmented_iterator_tag; + + //////////////////////////////////////////////////////////////////////////// + template<typename Cons> + struct segmented_iterator + : fusion::iterator_base<segmented_iterator<Cons> > + { + typedef segmented_iterator_tag fusion_tag; + typedef fusion::forward_traversal_tag category; + + typedef Cons cons_type; + typedef typename Cons::car_type car_type; + typedef typename Cons::cdr_type cdr_type; + + explicit segmented_iterator(Cons const &c) + : cons_(c) + {} + + cons_type const &cons() const { return this->cons_; }; + car_type const &car() const { return this->cons_.car; }; + cdr_type const &cdr() const { return this->cons_.cdr; }; + + private: + Cons cons_; + }; + + /////////////////////////////////////////////////////////////////////////// + template<typename Sequence> + struct segmented_begin + { + typedef typename detail::push_segments<Sequence> push; + typedef segmented_iterator<typename push::type> type; + + static type call(Sequence &seq) + { + return type(push::call(seq, nil())); + } + }; + + /////////////////////////////////////////////////////////////////////////// + template<typename Sequence> + struct segmented_end + { + typedef segmented_iterator<nil> type; + + static type call(Sequence &) + { + return type(nil()); + } + }; + + namespace extension + { + template<> + struct value_of_impl<segmented_iterator_tag> + { + template<typename Iterator> + struct apply + { + typedef typename result_of::begin<typename Iterator::car_type>::type begin; + typedef typename result_of::value_of<begin>::type type; + }; + }; + + template<> + struct deref_impl<segmented_iterator_tag> + { + template<typename Iterator> + struct apply + { + typedef typename result_of::begin<typename Iterator::car_type>::type begin; + typedef typename result_of::deref<begin>::type type; + + static type call(Iterator const &it) + { + return *fusion::begin(it.car()); + } + }; + }; + + // discards the old head, expands the right child of the new head + // and pushes the result to the head of the list. + + template<> + struct next_impl<segmented_iterator_tag> + { + template< + typename Iterator + , bool IsSegmentDone = detail::is_range_next_empty<Iterator>::value + > + struct apply + { + typedef typename Iterator::cdr_type cdr_type; + typedef detail::range_next<typename Iterator::car_type> next; + typedef segmented_iterator<cons<typename next::type, cdr_type> > type; + + static type call(Iterator const &it) + { + return type(fusion::make_cons(next::call(it.car()), it.cdr())); + } + }; + + template<typename Iterator> + struct apply<Iterator, true> // segment done, move to next segment + { + typedef typename Iterator::cdr_type cdr_type; + typedef typename detail::pop_segments<cdr_type> pop; + typedef segmented_iterator<typename pop::type> type; + + static type call(Iterator const &it) + { + return type(pop::call(it.cdr())); + } + }; + }; + } +}} // namespace boost::fusion + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view.hpp new file mode 100644 index 0000000..c649407 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view.hpp @@ -0,0 +1,13 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SEQUENCE_VIEW_FILTER_VIEW_10022005_0608) +#define FUSION_SEQUENCE_VIEW_FILTER_VIEW_10022005_0608 + +#include <boost/fusion/view/filter_view/filter_view.hpp> +#include <boost/fusion/view/filter_view/filter_view_iterator.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/begin_impl.hpp new file mode 100644 index 0000000..7d94261 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/begin_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_05062005_0903) +#define FUSION_BEGIN_IMPL_05062005_0903 + +namespace boost { namespace fusion +{ + struct filter_view_tag; + + template <typename Category, typename First, typename Last, typename Pred> + struct filter_iterator; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<filter_view_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::first_type first_type; + typedef typename Sequence::last_type last_type; + typedef typename Sequence::pred_type pred_type; + typedef typename Sequence::category category; + typedef filter_iterator<category, first_type, last_type, pred_type> type; + + static type + call(Sequence& s) + { + return type(s.first()); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_data_impl.hpp new file mode 100644 index 0000000..bf721b5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_data_impl.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_FILTER_VIEW_DETAIL_DEREF_DATA_IMPL_HPP +#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_DEREF_DATA_IMPL_HPP + +#include <boost/fusion/iterator/deref_data.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct deref_data_impl; + + template <> + struct deref_data_impl<filter_view_iterator_tag> + { + template <typename It> + struct apply + { + typedef typename + result_of::deref_data<typename It::first_type>::type + type; + + static type + call(It const& it) + { + return fusion::deref_data(it.first); + } + }; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_impl.hpp new file mode 100644 index 0000000..3e6447c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_impl.hpp @@ -0,0 +1,29 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_IMPL_05062005_0905) +#define FUSION_DEREF_IMPL_05062005_0905 + +#include <boost/fusion/iterator/detail/adapt_deref_traits.hpp> + +namespace boost { namespace fusion +{ + struct filter_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + template <> + struct deref_impl<filter_view_iterator_tag> + : detail::adapt_deref_traits {}; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/end_impl.hpp new file mode 100644 index 0000000..baabbd4 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/end_impl.hpp @@ -0,0 +1,45 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_05062005_0906) +#define FUSION_END_IMPL_05062005_0906 + +namespace boost { namespace fusion +{ + struct filter_view_tag; + + template <typename Category, typename First, typename Last, typename Pred> + struct filter_iterator; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<filter_view_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::last_type last_type; + typedef typename Sequence::pred_type pred_type; + typedef typename Sequence::category category; + typedef filter_iterator<category,last_type, last_type, pred_type> type; + + static type + call(Sequence& s) + { + return type(s.last()); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/equal_to_impl.hpp new file mode 100644 index 0000000..5d7b293 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/equal_to_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(BOOST_FUSION_EQUAL_TO_IMPL_02012005_2133) +#define BOOST_FUSION_EQUAL_TO_IMPL_02012005_2133 + +namespace boost { namespace fusion +{ + struct filter_view_iterator_tag; + + namespace extension + { + template<typename I1, typename I2> + struct equal_to; + + template<typename Tag> + struct equal_to_impl; + + template<> + struct equal_to_impl<filter_view_iterator_tag> + { + template<typename I1, typename I2> + struct apply + : result_of::equal_to<typename I1::first_type, typename I2::first_type> + {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/key_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/key_of_impl.hpp new file mode 100644 index 0000000..09d9112 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/key_of_impl.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_FILTER_VIEW_DETAIL_KEY_OF_IMPL_HPP +#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_KEY_OF_IMPL_HPP + +#include <boost/fusion/iterator/key_of.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct key_of_impl; + + template <> + struct key_of_impl<filter_view_iterator_tag> + { + template <typename It> + struct apply + : result_of::key_of<typename It::first_type> + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/next_impl.hpp new file mode 100644 index 0000000..a436bfc --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/next_impl.hpp @@ -0,0 +1,77 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_NEXT_IMPL_06052005_0900) +#define FUSION_NEXT_IMPL_06052005_0900 + +#include <boost/fusion/algorithm/query/detail/find_if.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/mpl/lambda.hpp> +#include <boost/mpl/quote.hpp> +#include <boost/mpl/bind.hpp> +#include <boost/mpl/placeholders.hpp> + +namespace boost { namespace fusion +{ + struct filter_view_iterator_tag; + + template <typename Category, typename First, typename Last, typename Pred> + struct filter_iterator; + + namespace extension + { + template <typename Tag> + struct next_impl; + + template <> + struct next_impl<filter_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename Iterator::last_type last_type; + typedef typename Iterator::pred_type pred_type; + typedef typename Iterator::category category; + + typedef typename + mpl::eval_if< + result_of::equal_to<first_type, last_type> + , mpl::identity<last_type> + , result_of::next<first_type> + >::type + next_type; + + typedef typename + detail::static_find_if< + next_type + , last_type + , mpl::bind1< + typename mpl::lambda<pred_type>::type + , mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1> + > + > + filter; + + typedef filter_iterator< + category, typename filter::type, last_type, pred_type> + type; + + static type + call(Iterator const& i) + { + return type(filter::call(i.first)); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/size_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/size_impl.hpp new file mode 100644 index 0000000..1c5a0ac --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/size_impl.hpp @@ -0,0 +1,38 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SIZE_IMPL_09232005_1058) +#define FUSION_SIZE_IMPL_09232005_1058 + +#include <boost/fusion/iterator/distance.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> + +namespace boost { namespace fusion +{ + struct filter_view_tag; + + namespace extension + { + template <typename Tag> + struct size_impl; + + template <> + struct size_impl<filter_view_tag> + { + template <typename Sequence> + struct apply + : result_of::distance< + typename result_of::begin<Sequence>::type + , typename result_of::end<Sequence>::type> + {}; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp new file mode 100644 index 0000000..38d1bdc --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_FILTER_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP +#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP + +#include <boost/fusion/iterator/value_of_data.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct value_of_data_impl; + + template <> + struct value_of_data_impl<filter_view_iterator_tag> + { + template <typename It> + struct apply + : result_of::value_of_data<typename It::first_type> + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_impl.hpp new file mode 100644 index 0000000..f9188f6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_impl.hpp @@ -0,0 +1,29 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VALUE_OF_IMPL_05062005_0857) +#define FUSION_VALUE_OF_IMPL_05062005_0857 + +#include <boost/fusion/iterator/detail/adapt_value_traits.hpp> + +namespace boost { namespace fusion +{ + struct filter_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + template <> + struct value_of_impl<filter_view_iterator_tag> + : detail::adapt_value_traits {}; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view.hpp new file mode 100644 index 0000000..76ce031 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view.hpp @@ -0,0 +1,64 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SEQUENCE_FILTER_VIEW_HPP) +#define FUSION_SEQUENCE_FILTER_VIEW_HPP + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/is_view.hpp> +#include <boost/fusion/view/filter_view/filter_view_iterator.hpp> +#include <boost/fusion/view/filter_view/detail/begin_impl.hpp> +#include <boost/fusion/view/filter_view/detail/end_impl.hpp> +#include <boost/fusion/view/filter_view/detail/size_impl.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/inherit.hpp> +#include <boost/mpl/identity.hpp> + +namespace boost { namespace fusion +{ + struct filter_view_tag; + struct forward_traversal_tag; + struct fusion_sequence_tag; + + template <typename Sequence, typename Pred> + struct filter_view : sequence_base<filter_view<Sequence, Pred> > + { + typedef filter_view_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef typename + mpl::eval_if< + traits::is_associative<Sequence> + , mpl::inherit2<forward_traversal_tag,associative_tag> + , mpl::identity<forward_traversal_tag> + >::type + category; + typedef mpl::true_ is_view; + + typedef typename result_of::begin<Sequence>::type first_type; + typedef typename result_of::end<Sequence>::type last_type; + typedef Pred pred_type; + + filter_view(Sequence& in_seq) + : seq(in_seq) + {} + + first_type first() const { return fusion::begin(seq); } + last_type last() const { return fusion::end(seq); } + typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + filter_view& operator= (filter_view const&); + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view_iterator.hpp new file mode 100644 index 0000000..8ce63cb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view_iterator.hpp @@ -0,0 +1,70 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_FILTER_VIEW_ITERATOR_05062005_0849) +#define FUSION_FILTER_VIEW_ITERATOR_05062005_0849 + +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/algorithm/query/detail/find_if.hpp> +#include <boost/mpl/lambda.hpp> +#include <boost/mpl/quote.hpp> +#include <boost/mpl/bind.hpp> +#include <boost/mpl/placeholders.hpp> + +#include <boost/fusion/view/filter_view/detail/deref_impl.hpp> +#include <boost/fusion/view/filter_view/detail/next_impl.hpp> +#include <boost/fusion/view/filter_view/detail/value_of_impl.hpp> +#include <boost/fusion/view/filter_view/detail/equal_to_impl.hpp> +#include <boost/fusion/view/filter_view/detail/deref_data_impl.hpp> +#include <boost/fusion/view/filter_view/detail/value_of_data_impl.hpp> +#include <boost/fusion/view/filter_view/detail/key_of_impl.hpp> + +namespace boost { namespace fusion +{ + struct filter_view_iterator_tag; + struct forward_traversal_tag; + + template <typename Category, typename First, typename Last, typename Pred> + struct filter_iterator : iterator_base<filter_iterator<Category, First, Last, Pred> > + { + typedef convert_iterator<First> first_converter; + typedef typename first_converter::type first_iter; + typedef convert_iterator<Last> last_converter; + typedef typename last_converter::type last_iter; + + typedef filter_view_iterator_tag fusion_tag; + typedef Category category; + typedef + detail::static_find_if< + first_iter + , last_iter + , mpl::bind1< + typename mpl::lambda<Pred>::type + , mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1> + > + > + filter; + typedef typename filter::type first_type; + typedef last_iter last_type; + typedef Pred pred_type; + + filter_iterator(First const& in_first) + : first(filter::call(first_converter::call(in_first))) {} + + first_type first; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + filter_iterator& operator= (filter_iterator const&); + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/at_impl.hpp new file mode 100644 index 0000000..5f882aa --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/at_impl.hpp @@ -0,0 +1,44 @@ +/*============================================================================= + Copyright (c) 2007 Tobias Schwinger + + 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_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED + +#include <boost/fusion/iterator/advance.hpp> +#include <boost/fusion/iterator/deref.hpp> + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + namespace extension + { + template <typename Tag> + struct at_impl; + + template <> + struct at_impl<iterator_range_tag> + { + template <typename Seq, typename N> + struct apply + { + typedef typename Seq::begin_type begin_type; + typedef typename result_of::advance<begin_type,N>::type pos; + typedef typename result_of::deref<pos>::type type; + + static type + call(Seq& s) + { + return * advance<N>(s.first); + } + }; + }; + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/begin_impl.hpp new file mode 100644 index 0000000..3234136 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/begin_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_05062005_1226) +#define FUSION_BEGIN_IMPL_05062005_1226 + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<iterator_range_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::begin_type type; + + static type + call(Sequence& s) + { + return s.first; + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/end_impl.hpp new file mode 100644 index 0000000..dacbe19 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/end_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_05062005_1226) +#define FUSION_END_IMPL_05062005_1226 + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<iterator_range_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::end_type type; + + static type + call(Sequence& s) + { + return s.last; + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp new file mode 100644 index 0000000..b6fe888 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp @@ -0,0 +1,38 @@ +/*============================================================================= + Copyright (c) 2007 Tobias Schwinger + + 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_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED + +#include <boost/fusion/iterator/advance.hpp> +#include <boost/fusion/iterator/value_of.hpp> + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + namespace extension + { + template <typename Tag> + struct value_at_impl; + + template <> + struct value_at_impl<iterator_range_tag> + { + template <typename Seq, typename N> + struct apply + { + typedef typename Seq::begin_type begin_type; + typedef typename result_of::advance<begin_type,N>::type pos; + typedef typename result_of::value_of<pos>::type type; + }; + }; + } +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/iterator_range.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/iterator_range.hpp new file mode 100644 index 0000000..4d16ca6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/iterator_range.hpp @@ -0,0 +1,59 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ITERATOR_RANGE_05062005_1224) +#define FUSION_ITERATOR_RANGE_05062005_1224 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/iterator/distance.hpp> +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/view/iterator_range/detail/begin_impl.hpp> +#include <boost/fusion/view/iterator_range/detail/end_impl.hpp> +#include <boost/fusion/view/iterator_range/detail/at_impl.hpp> +#include <boost/fusion/view/iterator_range/detail/value_at_impl.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/config.hpp> + +#if defined (BOOST_MSVC) +# pragma warning(push) +# pragma warning (disable: 4512) // assignment operator could not be generated. +#endif + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + struct fusion_sequence_tag; + + template <typename First, typename Last> + struct iterator_range : sequence_base<iterator_range<First, Last> > + { + typedef typename convert_iterator<First>::type begin_type; + typedef typename convert_iterator<Last>::type end_type; + typedef iterator_range_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef typename result_of::distance<begin_type, end_type>::type size; + typedef mpl::true_ is_view; + + typedef typename traits::category_of<begin_type>::type category; + + iterator_range(First const& in_first, Last const& in_last) + : first(convert_iterator<First>::call(in_first)) + , last(convert_iterator<Last>::call(in_last)) {} + + begin_type first; + end_type last; + }; +}} + +#if defined (BOOST_MSVC) +# pragma warning(pop) +#endif + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/begin_impl.hpp new file mode 100644 index 0000000..140d375 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/begin_impl.hpp @@ -0,0 +1,67 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_07162005_0115) +#define FUSION_BEGIN_IMPL_07162005_0115 + +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/mpl/if.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_tag; + + template <typename Category, typename First, typename Last, typename Concat> + struct joint_view_iterator; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<joint_view_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::first_type first_type; + typedef typename Sequence::last_type last_type; + typedef typename Sequence::concat_type concat_type; + typedef typename Sequence::category category; + typedef result_of::equal_to<first_type, last_type> equal_to; + + typedef typename + mpl::if_< + equal_to + , concat_type + , joint_view_iterator<category, first_type, last_type, concat_type> + >::type + type; + + static type + call(Sequence& s, mpl::true_) + { + return s.concat(); + } + + static type + call(Sequence& s, mpl::false_) + { + return type(s.first(), s.concat()); + } + + static type + call(Sequence& s) + { + return call(s, equal_to()); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp new file mode 100644 index 0000000..a60a125 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP +#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP + +#include <boost/fusion/iterator/deref_data.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct deref_data_impl; + + template <> + struct deref_data_impl<joint_view_iterator_tag> + { + template <typename It> + struct apply + { + typedef typename + result_of::deref_data<typename It::first_type>::type + type; + + static type + call(It const& it) + { + return fusion::deref_data(it.first); + } + }; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_impl.hpp new file mode 100644 index 0000000..7eb4718 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_impl.hpp @@ -0,0 +1,29 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_IMPL_07162005_0137) +#define FUSION_DEREF_IMPL_07162005_0137 + +#include <boost/fusion/iterator/detail/adapt_deref_traits.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + template <> + struct deref_impl<joint_view_iterator_tag> + : detail::adapt_deref_traits {}; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/end_impl.hpp new file mode 100644 index 0000000..5bdeb02 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/end_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_07162005_0128) +#define FUSION_END_IMPL_07162005_0128 + +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/mpl/if.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_tag; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<joint_view_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::concat_last_type type; + + static type + call(Sequence& s) + { + return s.concat_last(); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/key_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/key_of_impl.hpp new file mode 100644 index 0000000..e413c3d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/key_of_impl.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP +#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP + +#include <boost/fusion/iterator/key_of.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct key_of_impl; + + template <> + struct key_of_impl<joint_view_iterator_tag> + { + template <typename It> + struct apply + : result_of::key_of<typename It::first_type> + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/next_impl.hpp new file mode 100644 index 0000000..2313faa --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/next_impl.hpp @@ -0,0 +1,71 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_NEXT_IMPL_07162005_0136) +#define FUSION_NEXT_IMPL_07162005_0136 + +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/mpl/if.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_iterator_tag; + + template <typename Category, typename First, typename Last, typename Concat> + struct joint_view_iterator; + + namespace extension + { + template <typename Tag> + struct next_impl; + + template <> + struct next_impl<joint_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename Iterator::last_type last_type; + typedef typename Iterator::concat_type concat_type; + typedef typename Iterator::category category; + typedef typename result_of::next<first_type>::type next_type; + typedef result_of::equal_to<next_type, last_type> equal_to; + + typedef typename + mpl::if_< + equal_to + , concat_type + , joint_view_iterator<category, next_type, last_type, concat_type> + >::type + type; + + static type + call(Iterator const& i, mpl::true_) + { + return i.concat; + } + + static type + call(Iterator const& i, mpl::false_) + { + return type(fusion::next(i.first), i.concat); + } + + static type + call(Iterator const& i) + { + return call(i, equal_to()); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp new file mode 100644 index 0000000..cc883d7 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP +#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP + +#include <boost/fusion/iterator/value_of_data.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct value_of_data_impl; + + template <> + struct value_of_data_impl<joint_view_iterator_tag> + { + template <typename It> + struct apply + : result_of::value_of_data<typename It::first_type> + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_impl.hpp new file mode 100644 index 0000000..53afe1c --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_impl.hpp @@ -0,0 +1,29 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VALUE_IMPL_07162005_0132) +#define FUSION_VALUE_IMPL_07162005_0132 + +#include <boost/fusion/iterator/detail/adapt_value_traits.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + template <> + struct value_of_impl<joint_view_iterator_tag> + : detail::adapt_value_traits {}; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view.hpp new file mode 100644 index 0000000..e0d5c09 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view.hpp @@ -0,0 +1,75 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_JOINT_VIEW_07162005_0140) +#define FUSION_JOINT_VIEW_07162005_0140 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/is_view.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> +#include <boost/fusion/view/joint_view/joint_view_iterator.hpp> +#include <boost/fusion/view/joint_view/detail/begin_impl.hpp> +#include <boost/fusion/view/joint_view/detail/end_impl.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/plus.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/inherit.hpp> +#include <boost/mpl/identity.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_tag; + struct forward_traversal_tag; + struct fusion_sequence_tag; + + template <typename Sequence1, typename Sequence2> + struct joint_view : sequence_base<joint_view<Sequence1, Sequence2> > + { + typedef joint_view_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef typename + mpl::eval_if< + mpl::and_< + traits::is_associative<Sequence1> + , traits::is_associative<Sequence2> + > + , mpl::inherit2<forward_traversal_tag,associative_tag> + , mpl::identity<forward_traversal_tag> + >::type + category; + typedef mpl::true_ is_view; + + typedef typename result_of::begin<Sequence1>::type first_type; + typedef typename result_of::end<Sequence1>::type last_type; + typedef typename result_of::begin<Sequence2>::type concat_type; + typedef typename result_of::end<Sequence2>::type concat_last_type; + typedef typename mpl::plus<result_of::size<Sequence1>, result_of::size<Sequence2> >::type size; + + joint_view(Sequence1& in_seq1, Sequence2& in_seq2) + : seq1(in_seq1) + , seq2(in_seq2) + {} + + first_type first() const { return fusion::begin(seq1); } + concat_type concat() const { return fusion::begin(seq2); } + concat_last_type concat_last() const { return fusion::end(seq2); } + + private: + // silence MSVC warning C4512: assignment operator could not be generated + joint_view& operator= (joint_view const&); + + typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1; + typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2; + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view_iterator.hpp new file mode 100644 index 0000000..79b4d11 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view_iterator.hpp @@ -0,0 +1,59 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_JOINT_VIEW_ITERATOR_07162005_0140) +#define FUSION_JOINT_VIEW_ITERATOR_07162005_0140 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/fusion/view/joint_view/detail/deref_impl.hpp> +#include <boost/fusion/view/joint_view/detail/next_impl.hpp> +#include <boost/fusion/view/joint_view/detail/value_of_impl.hpp> +#include <boost/fusion/view/joint_view/detail/deref_data_impl.hpp> +#include <boost/fusion/view/joint_view/detail/value_of_data_impl.hpp> +#include <boost/fusion/view/joint_view/detail/key_of_impl.hpp> +#include <boost/static_assert.hpp> + +namespace boost { namespace fusion +{ + struct joint_view_iterator_tag; + struct forward_traversal_tag; + + template <typename Category, typename First, typename Last, typename Concat> + struct joint_view_iterator + : iterator_base<joint_view_iterator<Category, First, Last, Concat> > + { + typedef convert_iterator<First> first_converter; + typedef convert_iterator<Last> last_converter; + typedef convert_iterator<Concat> concat_converter; + + typedef typename first_converter::type first_type; + typedef typename last_converter::type last_type; + typedef typename concat_converter::type concat_type; + + typedef joint_view_iterator_tag fusion_tag; + typedef Category category; + BOOST_STATIC_ASSERT((!result_of::equal_to<first_type, last_type>::value)); + + joint_view_iterator(First const& in_first, Concat const& in_concat) + : first(first_converter::call(in_first)) + , concat(concat_converter::call(in_concat)) + {} + + first_type first; + concat_type concat; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + joint_view_iterator& operator= (joint_view_iterator const&); + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/advance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/advance_impl.hpp new file mode 100644 index 0000000..8785881 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/advance_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_ADVANCE_IMPL_14122005_2015) +#define FUSION_ADVANCE_IMPL_14122005_2015 + +#include <boost/fusion/iterator/advance.hpp> +#include <boost/mpl/negate.hpp> + +namespace boost { namespace fusion { + + struct reverse_view_iterator_tag; + + template <typename Iterator> + struct reverse_view_iterator; + + namespace extension + { + template<typename Tag> + struct advance_impl; + + template<> + struct advance_impl<reverse_view_iterator_tag> + { + template<typename Iterator, typename Dist> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename mpl::negate<Dist>::type negative_dist; + typedef typename result_of::advance<first_type, negative_dist>::type advanced_type; + typedef reverse_view_iterator<advanced_type> type; + + static type + call(Iterator const& i) + { + return type(boost::fusion::advance<negative_dist>(i.first)); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/at_impl.hpp new file mode 100644 index 0000000..2e84259 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/at_impl.hpp @@ -0,0 +1,41 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP +#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP + +#include <boost/fusion/sequence/intrinsic/at.hpp> +#include <boost/mpl/minus.hpp> +#include <boost/mpl/int.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct at_impl; + + template <> + struct at_impl<reverse_view_tag> + { + template <typename Seq, typename N> + struct apply + { + typedef mpl::minus<typename Seq::size, mpl::int_<1>, N> real_n; + + typedef typename + result_of::at<typename Seq::seq_type, real_n>::type + type; + + static type + call(Seq& seq) + { + return fusion::at<real_n>(seq.seq); + } + }; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/begin_impl.hpp new file mode 100644 index 0000000..b7968f5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/begin_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_07202005_0849) +#define FUSION_BEGIN_IMPL_07202005_0849 + +namespace boost { namespace fusion +{ + struct reverse_view_tag; + + template <typename Iterator> + struct reverse_view_iterator; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<reverse_view_tag> + { + template <typename Sequence> + struct apply + { + typedef reverse_view_iterator<typename Sequence::last_type> type; + + static type + call(Sequence const& s) + { + return type(s.last()); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp new file mode 100644 index 0000000..2f52bdd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_REVERSE_VIEW_DETAIL_DEREF_DATA_IMPL_HPP +#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_DEREF_DATA_IMPL_HPP + +#include <boost/fusion/iterator/deref_data.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct deref_data_impl; + + template <> + struct deref_data_impl<reverse_view_iterator_tag> + { + template <typename It> + struct apply + { + typedef typename + result_of::deref_data<typename It::first_type>::type + type; + + static type + call(It const& it) + { + return fusion::deref_data(it.first); + } + }; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_impl.hpp new file mode 100644 index 0000000..97cb891 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_impl.hpp @@ -0,0 +1,48 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_IMPL_07202005_0851) +#define FUSION_DEREF_IMPL_07202005_0851 + +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion +{ + struct reverse_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + template <> + struct deref_impl<reverse_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::deref< + typename result_of::prior< + typename Iterator::first_type + >::type + >::type + type; + + static type + call(Iterator const& i) + { + return *fusion::prior(i.first); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/distance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/distance_impl.hpp new file mode 100644 index 0000000..5edc749 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/distance_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_DISTANCE_IMPL_14122005_2104) +#define FUSION_DISTANCE_IMPL_14122005_2104 + +#include <boost/fusion/iterator/distance.hpp> + +namespace boost { namespace fusion { + + struct reverse_view_iterator_tag; + + template <typename Iterator> + struct reverse_view_iterator; + + namespace extension + { + template<typename Tag> + struct distance_impl; + + template<> + struct distance_impl<reverse_view_iterator_tag> + { + template<typename First, typename Last> + struct apply + { + typedef typename First::first_type first_type; + typedef typename Last::first_type last_type; + typedef typename result_of::distance<last_type, first_type>::type type; + + static type + call(First const& first, Last const& last) + { + return boost::fusion::distance(last.first, first.first); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/end_impl.hpp new file mode 100644 index 0000000..916e49d --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/end_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_07202005_0851) +#define FUSION_END_IMPL_07202005_0851 + +namespace boost { namespace fusion +{ + struct reverse_view_tag; + + template <typename Iterator> + struct reverse_view_iterator; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<reverse_view_tag> + { + template <typename Sequence> + struct apply + { + typedef reverse_view_iterator<typename Sequence::first_type> type; + + static type + call(Sequence const& s) + { + return type(s.first()); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/key_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/key_of_impl.hpp new file mode 100644 index 0000000..3d760fd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/key_of_impl.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_REVERSE_VIEW_DETAIL_KEY_OF_IMPL_HPP +#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_KEY_OF_IMPL_HPP + +#include <boost/fusion/iterator/key_of.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct key_of_impl; + + template <> + struct key_of_impl<reverse_view_iterator_tag> + { + template <typename It> + struct apply + : result_of::key_of<typename It::it_type> + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/next_impl.hpp new file mode 100644 index 0000000..c036510 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/next_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_NEXT_IMPL_07202005_0856) +#define FUSION_NEXT_IMPL_07202005_0856 + +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion +{ + struct reverse_view_iterator_tag; + + template <typename Iterator> + struct reverse_view_iterator; + + namespace extension + { + template <> + struct next_impl<reverse_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename prior_impl<typename first_type::fusion_tag>:: + template apply<first_type> + wrapped; + + typedef reverse_view_iterator<typename wrapped::type> type; + + static type + call(Iterator const& i) + { + return type(wrapped::call(i.first)); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/prior_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/prior_impl.hpp new file mode 100644 index 0000000..317054f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/prior_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_PRIOR_IMPL_07202005_0857) +#define FUSION_PRIOR_IMPL_07202005_0857 + +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion +{ + struct reverse_view_iterator_tag; + + template <typename Iterator> + struct reverse_view_iterator; + + namespace extension + { + template <> + struct prior_impl<reverse_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename next_impl<typename first_type::fusion_tag>:: + template apply<first_type> + wrapped; + + typedef reverse_view_iterator<typename wrapped::type> type; + + static type + call(Iterator const& i) + { + return type(wrapped::call(i.first)); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_at_impl.hpp new file mode 100644 index 0000000..90f5129 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_at_impl.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP +#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP + +#include <boost/fusion/sequence/intrinsic/value_at.hpp> +#include <boost/mpl/minus.hpp> +#include <boost/mpl/int.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct value_at_impl; + + template <> + struct value_at_impl<reverse_view_tag> + { + template <typename Seq, typename N> + struct apply + : result_of::value_at< + typename Seq::seq_type + , mpl::minus<typename Seq::size, mpl::int_<1>, N> + > + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp new file mode 100644 index 0000000..69d310f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2009 Christopher Schmidt + + 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_VIEW_REVERSE_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP +#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP + +#include <boost/fusion/iterator/value_of_data.hpp> + +namespace boost { namespace fusion { namespace extension +{ + template <typename> + struct value_of_data_impl; + + template <> + struct value_of_data_impl<reverse_view_iterator_tag> + { + template <typename It> + struct apply + : result_of::value_of_data<typename It::first_type> + {}; + }; +}}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_impl.hpp new file mode 100644 index 0000000..bf9b2ad --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_VALUE_OF_IMPL_07202005_0900) +#define FUSION_VALUE_OF_IMPL_07202005_0900 + +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion +{ + struct reverse_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + template <> + struct value_of_impl<reverse_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::value_of< + typename result_of::prior< + typename Iterator::first_type + >::type + >::type + type; + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view.hpp new file mode 100644 index 0000000..f3e8ffe --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view.hpp @@ -0,0 +1,68 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_REVERSE_VIEW_07202005_0836) +#define FUSION_REVERSE_VIEW_07202005_0836 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/is_view.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/view/reverse_view/reverse_view_iterator.hpp> +#include <boost/fusion/view/reverse_view/detail/begin_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/end_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/at_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/value_at_impl.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> +#include <boost/type_traits/is_base_of.hpp> +#include <boost/static_assert.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/inherit.hpp> +#include <boost/mpl/identity.hpp> + +namespace boost { namespace fusion +{ + struct reverse_view_tag; + struct fusion_sequence_tag; + + template <typename Sequence> + struct reverse_view : sequence_base<reverse_view<Sequence> > + { + typedef reverse_view_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::true_ is_view; + + typedef Sequence seq_type; + typedef typename traits::category_of<Sequence>::type category; + typedef typename result_of::begin<Sequence>::type first_type; + typedef typename result_of::end<Sequence>::type last_type; + typedef typename result_of::size<Sequence>::type size; + + BOOST_STATIC_ASSERT(( + is_base_of< + bidirectional_traversal_tag + , typename traits::category_of<first_type>::type>::value)); + + reverse_view(Sequence& in_seq) + : seq(in_seq) + {} + + first_type first() const { return fusion::begin(seq); } + last_type last() const { return fusion::end(seq); } + typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + reverse_view& operator= (reverse_view const&); + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view_iterator.hpp new file mode 100644 index 0000000..ddf2e9b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view_iterator.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_REVERSE_VIEW_ITERATOR_07202005_0835) +#define FUSION_REVERSE_VIEW_ITERATOR_07202005_0835 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/fusion/view/reverse_view/detail/deref_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/next_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/prior_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/advance_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/distance_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/value_of_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/deref_data_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp> +#include <boost/fusion/view/reverse_view/detail/key_of_impl.hpp> +#include <boost/type_traits/is_base_of.hpp> +#include <boost/static_assert.hpp> + +namespace boost { namespace fusion +{ + struct reverse_view_iterator_tag; + + template <typename First> + struct reverse_view_iterator + : iterator_base<reverse_view_iterator<First> > + { + typedef convert_iterator<First> converter; + typedef typename converter::type first_type; + typedef reverse_view_iterator_tag fusion_tag; + typedef typename traits::category_of<first_type>::type category; + + BOOST_STATIC_ASSERT(( + is_base_of< + bidirectional_traversal_tag + , category>::value)); + + reverse_view_iterator(First const& in_first) + : first(converter::call(in_first)) {} + + first_type first; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + reverse_view_iterator& operator= (reverse_view_iterator const&); + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view.hpp new file mode 100644 index 0000000..3640fae --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view.hpp @@ -0,0 +1,13 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SINGLE_VIEW_03192006_2216) +#define FUSION_SINGLE_VIEW_03192006_2216 + +#include <boost/fusion/view/single_view/single_view.hpp> +#include <boost/fusion/view/single_view/single_view_iterator.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/begin_impl.hpp new file mode 100644 index 0000000..395992b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/begin_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_05052005_0305) +#define FUSION_BEGIN_IMPL_05052005_0305 + +namespace boost { namespace fusion +{ + struct single_view_tag; + + template <typename T> + struct single_view_iterator; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<single_view_tag> + { + template <typename Sequence> + struct apply + { + typedef single_view_iterator<Sequence> type; + + static type + call(Sequence& s) + { + return type(s); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/deref_impl.hpp new file mode 100644 index 0000000..355cf6a --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/deref_impl.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_IMPL_05052005_0258) +#define FUSION_DEREF_IMPL_05052005_0258 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/type_traits/is_const.hpp> + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + template <> + struct deref_impl<single_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::value_type type; + + static type + call(Iterator const& i) + { + return i.val; + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/end_impl.hpp new file mode 100644 index 0000000..d239c24 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/end_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_05052005_0332) +#define FUSION_END_IMPL_05052005_0332 + +namespace boost { namespace fusion +{ + struct single_view_tag; + + template <typename T> + struct single_view_iterator_end; + + namespace extension + { + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<single_view_tag> + { + template <typename Sequence> + struct apply + { + typedef single_view_iterator_end<Sequence> type; + + static type + call(Sequence&) + { + return type(); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/next_impl.hpp new file mode 100644 index 0000000..c9cdafd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/next_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_NEXT_IMPL_05052005_0331) +#define FUSION_NEXT_IMPL_05052005_0331 + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + template <typename SingleView> + struct single_view_iterator_end; + + template <typename SingleView> + struct single_view_iterator; + + namespace extension + { + template <typename Tag> + struct next_impl; + + template <> + struct next_impl<single_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef single_view_iterator_end< + typename Iterator::single_view_type> + type; + + static type + call(Iterator) + { + return type(); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/value_of_impl.hpp new file mode 100644 index 0000000..f975eb1 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/value_of_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(FUSION_VALUE_IMPL_05052005_0324) +#define FUSION_VALUE_IMPL_05052005_0324 + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + template <> + struct value_of_impl<single_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::single_view_type single_view_type; + typedef typename single_view_type::value_type type; + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/single_view.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view.hpp new file mode 100644 index 0000000..03087cd --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view.hpp @@ -0,0 +1,64 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SINGLE_VIEW_05052005_0335) +#define FUSION_SINGLE_VIEW_05052005_0335 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/detail/as_fusion_element.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/view/single_view/single_view_iterator.hpp> +#include <boost/fusion/view/single_view/detail/begin_impl.hpp> +#include <boost/fusion/view/single_view/detail/end_impl.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/int.hpp> +#include <boost/config.hpp> + +#if defined (BOOST_MSVC) +# pragma warning(push) +# pragma warning (disable: 4512) // assignment operator could not be generated. +#endif + +namespace boost { namespace fusion +{ + struct single_view_tag; + struct forward_traversal_tag; + struct fusion_sequence_tag; + + template <typename T> + struct single_view : sequence_base<single_view<T> > + { + typedef single_view_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef forward_traversal_tag category; + typedef mpl::true_ is_view; + typedef mpl::int_<1> size; + typedef T value_type; + + single_view() + : val() {} + + explicit single_view(typename detail::call_param<T>::type in_val) + : val(in_val) {} + + value_type val; + }; + + template <typename T> + inline single_view<typename detail::as_fusion_element<T>::type> + make_single_view(T const& v) + { + return single_view<typename detail::as_fusion_element<T>::type>(v); + } +}} + +#if defined (BOOST_MSVC) +# pragma warning(pop) +#endif + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/single_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view_iterator.hpp new file mode 100644 index 0000000..fa24901 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view_iterator.hpp @@ -0,0 +1,57 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SINGLE_VIEW_ITERATOR_05052005_0340) +#define FUSION_SINGLE_VIEW_ITERATOR_05052005_0340 + +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/view/single_view/detail/deref_impl.hpp> +#include <boost/fusion/view/single_view/detail/next_impl.hpp> +#include <boost/fusion/view/single_view/detail/value_of_impl.hpp> +#include <boost/config.hpp> + +#if defined (BOOST_MSVC) +# pragma warning(push) +# pragma warning (disable: 4512) // assignment operator could not be generated. +#endif + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + struct forward_traversal_tag; + + template <typename SingleView> + struct single_view_iterator_end + : iterator_base<single_view_iterator_end<SingleView> > + { + typedef single_view_iterator_tag fusion_tag; + typedef forward_traversal_tag category; + }; + + template <typename SingleView> + struct single_view_iterator + : iterator_base<single_view_iterator<SingleView> > + { + typedef single_view_iterator_tag fusion_tag; + typedef forward_traversal_tag category; + typedef typename SingleView::value_type value_type; + typedef SingleView single_view_type; + + explicit single_view_iterator(single_view_type const& view) + : val(view.val) {} + + value_type val; + }; +}} + +#if defined (BOOST_MSVC) +# pragma warning(pop) +#endif + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view.hpp new file mode 100644 index 0000000..744d063 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view.hpp @@ -0,0 +1,13 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_SEQUENCE_VIEW_TRANSFORM_VIEW_10022005_0612) +#define FUSION_SEQUENCE_VIEW_TRANSFORM_VIEW_10022005_0612 + +#include <boost/fusion/view/transform_view/transform_view.hpp> +#include <boost/fusion/view/transform_view/transform_view_iterator.hpp> + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/advance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/advance_impl.hpp new file mode 100644 index 0000000..6b32348 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/advance_impl.hpp @@ -0,0 +1,75 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_ADVANCE_IMPL_13122005_1906) +#define FUSION_ADVANCE_IMPL_13122005_1906 + +#include <boost/fusion/iterator/advance.hpp> + +namespace boost { namespace fusion +{ + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + template<typename First, typename F> + struct transform_view_iterator; + + template <typename First1, typename First2, typename F> + struct transform_view_iterator2; + + namespace extension + { + template<typename Tag> + struct advance_impl; + + // Unary Version + template<> + struct advance_impl<transform_view_iterator_tag> + { + template<typename Iterator, typename Dist> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename result_of::advance<first_type, Dist>::type advanced_type; + typedef typename Iterator::transform_type transform_type; + typedef transform_view_iterator<advanced_type, transform_type> type; + + static type + call(Iterator const& i) + { + return type(boost::fusion::advance<Dist>(i.first), i.f); + } + }; + }; + + // Binary Version + template<> + struct advance_impl<transform_view_iterator2_tag> + { + template<typename Iterator, typename Dist> + struct apply + { + typedef typename Iterator::first1_type first1_type; + typedef typename Iterator::first2_type first2_type; + typedef typename result_of::advance<first1_type, Dist>::type advanced1_type; + typedef typename result_of::advance<first2_type, Dist>::type advanced2_type; + typedef typename Iterator::transform_type transform_type; + typedef transform_view_iterator2<advanced1_type, advanced2_type, transform_type> type; + + static type + call(Iterator const& i) + { + return type( + boost::fusion::advance<Dist>(i.first1) + , boost::fusion::advance<Dist>(i.first2), i.f); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/apply_transform_result.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/apply_transform_result.hpp new file mode 100644 index 0000000..73be304 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/apply_transform_result.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + Copyright (c) 2001-2006 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936) +#define BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936 + +#include <boost/utility/result_of.hpp> + +namespace boost { namespace fusion +{ + struct void_; + + namespace detail + { + template <typename F> + struct apply_transform_result + { + template <typename T0, typename T1 = void_> + struct apply + : boost::result_of<F(T0, T1)> + {}; + + template <typename T0> + struct apply<T0, void_> + : boost::result_of<F(T0)> + {}; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/at_impl.hpp new file mode 100644 index 0000000..620d96f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/at_impl.hpp @@ -0,0 +1,63 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_AT_IMPL_20061029_1946) +#define BOOST_FUSION_AT_IMPL_20061029_1946 + +#include <boost/mpl/apply.hpp> +#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp> +#include <boost/fusion/sequence/intrinsic/at.hpp> + +namespace boost { namespace fusion { + struct transform_view_tag; + struct transform_view2_tag; + + namespace extension + { + template<typename Tag> + struct at_impl; + + template<> + struct at_impl<transform_view_tag> + { + template<typename Seq, typename N> + struct apply + { + typedef typename Seq::transform_type F; + typedef detail::apply_transform_result<F> transform_type; + typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type; + typedef typename mpl::apply<transform_type, value_type>::type type; + + static type call(Seq& seq) + { + return seq.f(boost::fusion::at<N>(seq.seq)); + } + }; + }; + + template<> + struct at_impl<transform_view2_tag> + { + template<typename Seq, typename N> + struct apply + { + typedef typename Seq::transform_type F; + typedef detail::apply_transform_result<F> transform_type; + typedef typename boost::fusion::result_of::at<typename Seq::sequence1_type, N>::type value1_type; + typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type; + typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type; + + static type call(Seq& seq) + { + return seq.f(boost::fusion::at<N>(seq.seq1), boost::fusion::at<N>(seq.seq2)); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/begin_impl.hpp new file mode 100644 index 0000000..75b0438 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/begin_impl.hpp @@ -0,0 +1,68 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_BEGIN_IMPL_07162005_1031) +#define FUSION_BEGIN_IMPL_07162005_1031 + +#include <boost/fusion/view/transform_view/transform_view_fwd.hpp> + +namespace boost { namespace fusion +{ + template <typename First, typename F> + struct transform_view_iterator; + + template <typename First1, typename First2, typename F> + struct transform_view_iterator2; + + namespace extension + { + template <typename Tag> + struct begin_impl; + + // Unary Version + template <> + struct begin_impl<transform_view_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::first_type first_type; + typedef typename Sequence::transform_type transform_type; + typedef transform_view_iterator<first_type, transform_type> type; + + static type + call(Sequence& s) + { + return type(s.first(), s.f); + } + }; + }; + + // Binary Version + template <> + struct begin_impl<transform_view2_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::first1_type first1_type; + typedef typename Sequence::first2_type first2_type; + typedef typename Sequence::transform_type transform_type; + typedef transform_view_iterator2<first1_type, first2_type, transform_type> type; + + static type + call(Sequence& s) + { + return type(s.first1(), s.first2(), s.f); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/deref_impl.hpp new file mode 100644 index 0000000..3849f80 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/deref_impl.hpp @@ -0,0 +1,76 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DEREF_IMPL_07162005_1026) +#define FUSION_DEREF_IMPL_07162005_1026 + +#include <boost/mpl/apply.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp> + +namespace boost { namespace fusion +{ + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + namespace extension + { + template <typename Tag> + struct deref_impl; + + // Unary Version + template <> + struct deref_impl<transform_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::deref<typename Iterator::first_type>::type + value_type; + + typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type; + typedef typename mpl::apply<transform_type, value_type>::type type; + + static type + call(Iterator const& i) + { + return i.f(*i.first); + } + }; + }; + + // Binary Version + template <> + struct deref_impl<transform_view_iterator2_tag> + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::deref<typename Iterator::first1_type>::type + value1_type; + typedef typename + result_of::deref<typename Iterator::first2_type>::type + value2_type; + + typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type; + typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type; + + static type + call(Iterator const& i) + { + return i.f(*i.first1, *i.first2); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/distance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/distance_impl.hpp new file mode 100644 index 0000000..d5ae0ad --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/distance_impl.hpp @@ -0,0 +1,59 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_DISTANCE_IMPL_13122005_2139) +#define FUSION_DISTANCE_IMPL_13122005_2139 + +#include <boost/fusion/iterator/distance.hpp> + +namespace boost { namespace fusion { + + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + namespace extension + { + template<typename Tag> + struct distance_impl; + + // Unary Version + template<> + struct distance_impl<transform_view_iterator_tag> + { + template<typename First, typename Last> + struct apply + : result_of::distance<typename First::first_type, typename Last::first_type> + { + static + typename result_of::distance<typename First::first_type, typename Last::first_type>::type + call(First const& first, Last const& last) + { + return boost::fusion::distance(first.first, last.first); + } + }; + }; + + // Binary Version + template<> + struct distance_impl<transform_view_iterator2_tag> + { + template<typename First, typename Last> + struct apply + : result_of::distance<typename First::first1_type, typename Last::first1_type> + { + static + typename result_of::distance<typename First::first1_type, typename Last::first1_type>::type + call(First const& first, Last const& last) + { + return boost::fusion::distance(first.first1, last.first1); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/end_impl.hpp new file mode 100644 index 0000000..465a2cb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/end_impl.hpp @@ -0,0 +1,68 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_END_IMPL_07162005_1028) +#define FUSION_END_IMPL_07162005_1028 + +#include <boost/fusion/view/transform_view/transform_view_fwd.hpp> + +namespace boost { namespace fusion +{ + template <typename First, typename F> + struct transform_view_iterator; + + template <typename First1, typename First2, typename F> + struct transform_view_iterator2; + + namespace extension + { + template <typename Tag> + struct end_impl; + + // Unary Version + template <> + struct end_impl<transform_view_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::last_type last_type; + typedef typename Sequence::transform_type transform_type; + typedef transform_view_iterator<last_type, transform_type> type; + + static type + call(Sequence& s) + { + return type(s.last(), s.f); + } + }; + }; + + // Binary Version + template <> + struct end_impl<transform_view2_tag> + { + template <typename Sequence> + struct apply + { + typedef typename Sequence::last1_type last1_type; + typedef typename Sequence::last2_type last2_type; + typedef typename Sequence::transform_type transform_type; + typedef transform_view_iterator2<last1_type, last2_type, transform_type> type; + + static type + call(Sequence& s) + { + return type(s.last1(), s.last2(), s.f); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/equal_to_impl.hpp new file mode 100644 index 0000000..063a00e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/equal_to_impl.hpp @@ -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) +==============================================================================*/ +#if !defined(BOOST_FUSION_TRANSFORM_VIEW_ITERATOR_20070127_0957) +#define BOOST_FUSION_TRANSFORM_VIEW_ITERATOR_20070127_0957 + +#include <boost/fusion/iterator/equal_to.hpp> + +namespace boost { namespace fusion { + + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + namespace extension + { + template<typename Tag> + struct equal_to_impl; + + template<> + struct equal_to_impl<transform_view_iterator_tag> + { + template<typename It1, typename It2> + struct apply + : result_of::equal_to<typename It1::first_type, typename It2::first_type> + {}; + }; + + template<> + struct equal_to_impl<transform_view_iterator2_tag> + { + template<typename It1, typename It2> + struct apply + : result_of::equal_to<typename It1::first1_type, typename It2::first1_type> + {}; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/next_impl.hpp new file mode 100644 index 0000000..4d6ec74 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/next_impl.hpp @@ -0,0 +1,74 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_NEXT_IMPL_07162005_1029) +#define FUSION_NEXT_IMPL_07162005_1029 + +#include <boost/fusion/iterator/next.hpp> + +namespace boost { namespace fusion +{ + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + template<typename First, typename F> + struct transform_view_iterator; + + template <typename First1, typename First2, typename F> + struct transform_view_iterator2; + + namespace extension + { + template <typename Tag> + struct next_impl; + + // Unary Version + template <> + struct next_impl<transform_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename result_of::next<first_type>::type next_type; + typedef typename Iterator::transform_type transform_type; + typedef transform_view_iterator<next_type, transform_type> type; + + static type + call(Iterator const& i) + { + return type(fusion::next(i.first), i.f); + } + }; + }; + + // Binary Version + template <> + struct next_impl<transform_view_iterator2_tag> + { + template <typename Iterator> + struct apply + { + typedef typename Iterator::first1_type first1_type; + typedef typename Iterator::first2_type first2_type; + typedef typename result_of::next<first1_type>::type next1_type; + typedef typename result_of::next<first2_type>::type next2_type; + typedef typename Iterator::transform_type transform_type; + typedef transform_view_iterator2<next1_type, next2_type, transform_type> type; + + static type + call(Iterator const& i) + { + return type(fusion::next(i.first1), fusion::next(i.first2), i.f); + } + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/prior_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/prior_impl.hpp new file mode 100644 index 0000000..f7d4996 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/prior_impl.hpp @@ -0,0 +1,73 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_PREV_IMPL_13122005_2110) +#define FUSION_PREV_IMPL_13122005_2110 + +#include <boost/fusion/iterator/prior.hpp> + +namespace boost { namespace fusion +{ + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + template<typename First, typename F> + struct transform_view_iterator; + + template <typename First1, typename First2, typename F> + struct transform_view_iterator2; + + namespace extension + { + template<typename Tag> + struct prior_impl; + + // Unary Version + template<> + struct prior_impl<transform_view_iterator_tag> + { + template<typename Iterator> + struct apply + { + typedef typename Iterator::first_type first_type; + typedef typename result_of::prior<first_type>::type prior_type; + typedef typename Iterator::transform_type transform_type; + typedef transform_view_iterator<prior_type, transform_type> type; + + static type + call(Iterator const& i) + { + return type(fusion::prior(i.first), i.f); + } + }; + }; + + // Binary Version + template<> + struct prior_impl<transform_view_iterator2_tag> + { + template<typename Iterator> + struct apply + { + typedef typename Iterator::first1_type first1_type; + typedef typename Iterator::first2_type first2_type; + typedef typename result_of::prior<first1_type>::type prior1_type; + typedef typename result_of::prior<first2_type>::type prior2_type; + typedef typename Iterator::transform_type transform_type; + typedef transform_view_iterator2<prior1_type, prior2_type, transform_type> type; + + static type + call(Iterator const& i) + { + return type(fusion::prior(i.first1), fusion::prior(i.first2), i.f); + } + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_at_impl.hpp new file mode 100644 index 0000000..bd4409f --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_at_impl.hpp @@ -0,0 +1,53 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VALUE_AT_IMPL_20061101_0745) +#define BOOST_FUSION_VALUE_AT_IMPL_20061101_0745 + +#include <boost/mpl/apply.hpp> +#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp> +#include <boost/fusion/sequence/intrinsic/value_at.hpp> + +namespace boost { namespace fusion { + struct transform_view_tag; + struct transform_view2_tag; + + namespace extension + { + template<typename Tag> + struct value_at_impl; + + template<> + struct value_at_impl<transform_view_tag> + { + template<typename Seq, typename N> + struct apply + { + typedef typename Seq::transform_type F; + typedef detail::apply_transform_result<F> transform_type; + typedef typename boost::fusion::result_of::value_at<typename Seq::sequence_type, N>::type value_type; + typedef typename mpl::apply<transform_type, value_type>::type type; + }; + }; + + template<> + struct value_at_impl<transform_view2_tag> + { + template<typename Seq, typename N> + struct apply + { + typedef typename Seq::transform_type F; + typedef detail::apply_transform_result<F> transform_type; + typedef typename boost::fusion::result_of::value_at<typename Seq::sequence1_type, N>::type value1_type; + typedef typename boost::fusion::result_of::value_at<typename Seq::sequence2_type, N>::type value2_type; + typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type; + }; + }; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_of_impl.hpp new file mode 100644 index 0000000..08bbf20 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_of_impl.hpp @@ -0,0 +1,63 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_VALUE_OF_IMPL_07162005_1030) +#define FUSION_VALUE_OF_IMPL_07162005_1030 + +#include <boost/mpl/apply.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp> + +namespace boost { namespace fusion +{ + struct transform_view_iterator_tag; + struct transform_view_iterator2_tag; + + namespace extension + { + template <typename Tag> + struct value_of_impl; + + // Unary Version + template <> + struct value_of_impl<transform_view_iterator_tag> + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::value_of<typename Iterator::first_type>::type + value_type; + + typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type; + typedef typename mpl::apply<transform_type, value_type>::type type; + }; + }; + + // Binary Version + template <> + struct value_of_impl<transform_view_iterator2_tag> + { + template <typename Iterator> + struct apply + { + typedef typename + result_of::value_of<typename Iterator::first1_type>::type + value1_type; + typedef typename + result_of::value_of<typename Iterator::first2_type>::type + value2_type; + + typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type; + typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type; + }; + }; + } +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view.hpp new file mode 100644 index 0000000..3d330b7 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view.hpp @@ -0,0 +1,115 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_TRANSFORM_VIEW_07162005_1037) +#define FUSION_TRANSFORM_VIEW_07162005_1037 + +#include <boost/static_assert.hpp> +#include <boost/fusion/support/detail/access.hpp> +#include <boost/fusion/support/is_view.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/view/transform_view/transform_view_iterator.hpp> +#include <boost/fusion/view/transform_view/transform_view_fwd.hpp> +#include <boost/fusion/view/transform_view/detail/begin_impl.hpp> +#include <boost/fusion/view/transform_view/detail/end_impl.hpp> +#include <boost/fusion/view/transform_view/detail/at_impl.hpp> +#include <boost/fusion/view/transform_view/detail/value_at_impl.hpp> +#include <boost/fusion/view/detail/strictest_traversal.hpp> +#include <boost/fusion/container/vector/vector10.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> +#include <boost/fusion/support/sequence_base.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> +#include <boost/mpl/bool.hpp> + +namespace boost { namespace fusion +{ + struct void_; + struct transform_view_tag; + struct transform_view2_tag; + struct fusion_sequence_tag; + + // Binary Version + template <typename Sequence1, typename Sequence2, typename F> + struct transform_view : sequence_base<transform_view<Sequence1, Sequence2, F> > + { + BOOST_STATIC_ASSERT(result_of::size<Sequence1>::value == result_of::size<Sequence2>::value); + typedef transform_view2_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::true_ is_view; + + typedef typename traits::category_of<Sequence1>::type category1; + typedef typename traits::category_of<Sequence2>::type category2; + typedef typename detail::strictest_traversal< + fusion::vector2<Sequence1, Sequence2> >::type category; + typedef typename result_of::begin<Sequence1>::type first1_type; + typedef typename result_of::begin<Sequence2>::type first2_type; + typedef typename result_of::end<Sequence1>::type last1_type; + typedef typename result_of::end<Sequence2>::type last2_type; + typedef typename result_of::size<Sequence1>::type size; + typedef Sequence1 sequence1_type; + typedef Sequence2 sequence2_type; + typedef F transform_type; + + transform_view(Sequence1& in_seq1, Sequence2& in_seq2, F const& binop) + : f(binop) + , seq1(in_seq1) + , seq2(in_seq2) + {} + + first1_type first1() const { return fusion::begin(seq1); } + first2_type first2() const { return fusion::begin(seq2); } + last1_type last1() const { return fusion::end(seq1); } + last2_type last2() const { return fusion::end(seq2); } + + transform_type f; + typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1; + typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + transform_view& operator= (transform_view const&); + }; + + // Unary Version + template <typename Sequence, typename F> +#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) + struct transform_view<Sequence, F, void_> : sequence_base<transform_view<Sequence, F, void_> > +#else + struct transform_view<Sequence, F> : sequence_base<transform_view<Sequence, F> > +#endif + { + typedef transform_view_tag fusion_tag; + typedef fusion_sequence_tag tag; // this gets picked up by MPL + typedef mpl::true_ is_view; + + typedef typename traits::category_of<Sequence>::type category; + typedef typename result_of::begin<Sequence>::type first_type; + typedef typename result_of::end<Sequence>::type last_type; + typedef typename result_of::size<Sequence>::type size; + typedef Sequence sequence_type; + typedef F transform_type; + + transform_view(Sequence& in_seq, F const& in_f) + : seq(in_seq) + , f(in_f) + {} + + first_type first() const { return fusion::begin(seq); } + last_type last() const { return fusion::end(seq); } + typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; + transform_type f; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + transform_view& operator= (transform_view const&); + }; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_fwd.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_fwd.hpp new file mode 100644 index 0000000..7dca304 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_fwd.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_TRANSFORM_VIEW_FORWARD_01052006_1839) +#define FUSION_TRANSFORM_VIEW_FORWARD_01052006_1839 + +namespace boost { namespace fusion +{ + struct void_; + struct transform_view_tag; + struct transform_view2_tag; + + template <typename A, typename B, typename C = void_> + struct transform_view; +}} + +#endif + + diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_iterator.hpp new file mode 100644 index 0000000..2c31b26 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_iterator.hpp @@ -0,0 +1,77 @@ +/*============================================================================= + 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) +==============================================================================*/ +#if !defined(FUSION_TRANSFORM_VIEW_ITERATOR_07162005_1033) +#define FUSION_TRANSFORM_VIEW_ITERATOR_07162005_1033 + +#include <boost/fusion/support/iterator_base.hpp> +#include <boost/fusion/support/category_of.hpp> +#include <boost/fusion/iterator/mpl/convert_iterator.hpp> +#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> +#include <boost/fusion/view/transform_view/detail/deref_impl.hpp> +#include <boost/fusion/view/transform_view/detail/next_impl.hpp> +#include <boost/fusion/view/transform_view/detail/prior_impl.hpp> +#include <boost/fusion/view/transform_view/detail/value_of_impl.hpp> +#include <boost/fusion/view/transform_view/detail/advance_impl.hpp> +#include <boost/fusion/view/transform_view/detail/distance_impl.hpp> +#include <boost/fusion/view/transform_view/detail/equal_to_impl.hpp> + +namespace boost { namespace fusion +{ + // Unary Version + struct transform_view_iterator_tag; + + template <typename First, typename F> + struct transform_view_iterator + : iterator_base<transform_view_iterator<First, F> > + { + typedef transform_view_iterator_tag fusion_tag; + typedef convert_iterator<First> converter; + typedef typename converter::type first_type; + typedef typename traits::category_of<first_type>::type category; + typedef F transform_type; + + transform_view_iterator(First const& in_first, F const& in_f) + : first(converter::call(in_first)), f(in_f) {} + + first_type first; + transform_type f; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + transform_view_iterator& operator= (transform_view_iterator const&); + }; + + // Binary Version + struct transform_view_iterator2_tag; + + template <typename First1, typename First2, typename F> + struct transform_view_iterator2 + : iterator_base<transform_view_iterator2<First1, First2, F> > + { + typedef transform_view_iterator2_tag fusion_tag; + typedef convert_iterator<First1> converter1; + typedef convert_iterator<First2> converter2; + typedef typename converter1::type first1_type; + typedef typename converter2::type first2_type; + typedef typename traits::category_of<first1_type>::type category; + typedef F transform_type; + + transform_view_iterator2(First1 const& in_first1, First2 const& in_first2, F const& in_f) + : first1(converter1::call(in_first1)), first2(converter2::call(in_first2)), f(in_f) {} + + first1_type first1; + first2_type first2; + transform_type f; + + private: + // silence MSVC warning C4512: assignment operator could not be generated + transform_view_iterator2& operator= (transform_view_iterator2 const&); + }; +}} + +#endif + |