diff options
author | Vlad Voicu <vladv@rosedu.org> | 2012-03-02 10:01:11 (GMT) |
---|---|---|
committer | vlad <vlad@tyrion.(none)> | 2012-10-13 13:55:44 (GMT) |
commit | b21e43357c66df6824536793bf41bbd1cbdf1a72 (patch) | |
tree | a23ee2adda43c27aa1b720f524e368991264182c /3rdParty/Boost/src/boost/fusion/sequence/intrinsic | |
parent | 58efe2c43e54a3d868784a6968e52674309e2310 (diff) | |
download | swift-contrib-b21e43357c66df6824536793bf41bbd1cbdf1a72.zip swift-contrib-b21e43357c66df6824536793bf41bbd1cbdf1a72.tar.bz2 |
Added spirit to bundled boost
Diffstat (limited to '3rdParty/Boost/src/boost/fusion/sequence/intrinsic')
13 files changed, 906 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp new file mode 100644 index 0000000..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 + |