mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-15 13:26:40 +02:00
prelude to iterator_facade and sequence_facade
[SVN r35316]
This commit is contained in:
@ -119,14 +119,14 @@
|
||||
<span class="keyword">struct</span> <span class="identifier">single_pass_sequence_tag</span>
|
||||
<span class="special">:</span> <span class="identifier">incrementable_sequence_tag</span> <span class="special">{};</span>
|
||||
|
||||
<span class="keyword">struct</span> <span class="identifier">forward_sequence_tag</span>
|
||||
<span class="keyword">struct</span> <span class="identifier">forward_traversal_tag</span>
|
||||
<span class="special">:</span> <span class="identifier">single_pass_sequence_tag</span> <span class="special">{};</span>
|
||||
|
||||
<span class="keyword">struct</span> <span class="identifier">bidirectional_sequence_tag</span>
|
||||
<span class="special">:</span> <span class="identifier">forward_sequence_tag</span> <span class="special">{};</span>
|
||||
<span class="keyword">struct</span> <span class="identifier">bidirectional_traversal_tag</span>
|
||||
<span class="special">:</span> <span class="identifier">forward_traversal_tag</span> <span class="special">{};</span>
|
||||
|
||||
<span class="keyword">struct</span> <span class="identifier">random_access_sequence_tag</span>
|
||||
<span class="special">:</span> <span class="identifier">bidirectional_sequence_tag</span> <span class="special">{};</span>
|
||||
<span class="keyword">struct</span> <span class="identifier">random_access_traversal_tag</span>
|
||||
<span class="special">:</span> <span class="identifier">bidirectional_traversal_tag</span> <span class="special">{};</span>
|
||||
<span class="special">}}</span>
|
||||
</pre>
|
||||
<p>
|
||||
@ -157,8 +157,8 @@
|
||||
<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_base_of</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">category_of</span><span class="special"><</span><a href="../sequences/containers/list.html" title="list"><tt class="computeroutput"><span class="identifier">list</span></tt></a><span class="special"><></span> <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">list_category</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">category_of</span><span class="special"><</span><a href="../sequences/containers/vector.html" title="vector"><tt class="computeroutput"><span class="identifier">vector</span></tt></a><span class="special"><></span> <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">vector_category</span><span class="special">;</span>
|
||||
<span class="identifier">BOOST_MPL_ASSERT</span><span class="special">((</span> <span class="identifier">is_base_of</span><span class="special"><</span><span class="identifier">forward_sequence_tag</span><span class="special">,</span> <span class="identifier">list_category</span><span class="special">></span> <span class="special">));</span>
|
||||
<span class="identifier">BOOST_MPL_ASSERT</span><span class="special">((</span> <span class="identifier">is_base_of</span><span class="special"><</span><span class="identifier">random_access_sequence_tag</span><span class="special">,</span> <span class="identifier">vector_category</span><span class="special">></span> <span class="special">));</span>
|
||||
<span class="identifier">BOOST_MPL_ASSERT</span><span class="special">((</span> <span class="identifier">is_base_of</span><span class="special"><</span><span class="identifier">forward_traversal_tag</span><span class="special">,</span> <span class="identifier">list_category</span><span class="special">></span> <span class="special">));</span>
|
||||
<span class="identifier">BOOST_MPL_ASSERT</span><span class="special">((</span> <span class="identifier">is_base_of</span><span class="special"><</span><span class="identifier">random_access_traversal_tag</span><span class="special">,</span> <span class="identifier">vector_category</span><span class="special">></span> <span class="special">));</span>
|
||||
</pre>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
|
@ -219,14 +219,14 @@ For Sequences, the return type is derived from one of:
|
||||
struct single_pass_sequence_tag
|
||||
: incrementable_sequence_tag {};
|
||||
|
||||
struct forward_sequence_tag
|
||||
struct forward_traversal_tag
|
||||
: single_pass_sequence_tag {};
|
||||
|
||||
struct bidirectional_sequence_tag
|
||||
: forward_sequence_tag {};
|
||||
struct bidirectional_traversal_tag
|
||||
: forward_traversal_tag {};
|
||||
|
||||
struct random_access_sequence_tag
|
||||
: bidirectional_sequence_tag {};
|
||||
struct random_access_traversal_tag
|
||||
: bidirectional_traversal_tag {};
|
||||
}}
|
||||
|
||||
And optionally from:
|
||||
@ -248,8 +248,8 @@ __sequence__ or __iterator__.
|
||||
using boost::is_base_of;
|
||||
typedef traits::category_of<__list__<> >::type list_category;
|
||||
typedef traits::category_of<__vector__<> >::type vector_category;
|
||||
BOOST_MPL_ASSERT(( is_base_of<forward_sequence_tag, list_category> ));
|
||||
BOOST_MPL_ASSERT(( is_base_of<random_access_sequence_tag, vector_category> ));
|
||||
BOOST_MPL_ASSERT(( is_base_of<forward_traversal_tag, list_category> ));
|
||||
BOOST_MPL_ASSERT(( is_base_of<random_access_traversal_tag, vector_category> ));
|
||||
|
||||
[endsect]
|
||||
|
||||
|
@ -28,7 +28,6 @@ namespace boost { namespace fusion
|
||||
{
|
||||
static typename mpl::minus<
|
||||
typename Last::index, typename First::index>::type
|
||||
|
||||
call(First const&, Last const&)
|
||||
{
|
||||
typedef typename mpl::minus<
|
||||
|
@ -9,7 +9,6 @@
|
||||
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141)
|
||||
#define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141
|
||||
|
||||
#include <boost/fusion/support/detail/iterator_to_sequence_category.hpp>
|
||||
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
|
||||
#include <boost/mpl/begin_end.hpp>
|
||||
#include <boost/mpl/is_sequence.hpp>
|
||||
@ -28,11 +27,9 @@ namespace boost { namespace fusion {
|
||||
|
||||
BOOST_STATIC_ASSERT(mpl::is_sequence<T>::value);
|
||||
typedef typename
|
||||
iterator_to_sequence_category<
|
||||
typename mpl_iterator_category<
|
||||
mpl_iterator_category<
|
||||
typename mpl::begin<T>::type::category
|
||||
>::type
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
struct cons_tag;
|
||||
struct forward_sequence_tag;
|
||||
struct forward_traversal_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
struct nil : sequence_base<nil>
|
||||
@ -39,7 +39,7 @@ namespace boost { namespace fusion
|
||||
typedef cons_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef mpl::false_ is_view;
|
||||
typedef forward_sequence_tag category;
|
||||
typedef forward_traversal_tag category;
|
||||
typedef void_ car_type;
|
||||
typedef void_ cdr_type;
|
||||
|
||||
@ -62,7 +62,7 @@ namespace boost { namespace fusion
|
||||
typedef cons_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef mpl::false_ is_view;
|
||||
typedef forward_sequence_tag category;
|
||||
typedef forward_traversal_tag category;
|
||||
typedef Car car_type;
|
||||
typedef Cdr cdr_type;
|
||||
|
||||
|
@ -1,33 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2006 Joel de Guzman
|
||||
Copyright (c) 2006 Dan Marsden
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_IS_ASSOCIATIVE_IMPL_20060304_2310)
|
||||
#define BOOST_FUSION_IS_ASSOCIATIVE_IMPL_20060304_2310
|
||||
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct map_tag;
|
||||
|
||||
namespace extension {
|
||||
template<typename Tag>
|
||||
struct is_associative_impl;
|
||||
|
||||
template<>
|
||||
struct is_associative_impl<fusion::map_tag>
|
||||
{
|
||||
template<typename Seq>
|
||||
struct apply
|
||||
: mpl::true_
|
||||
{};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
@ -9,7 +9,7 @@
|
||||
#define FUSION_MAP_07212005_1106
|
||||
|
||||
#include <boost/fusion/support/pair.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/fusion/sequence/container/map/map_fwd.hpp>
|
||||
#include <boost/fusion/sequence/container/map/detail/lookup_key.hpp>
|
||||
@ -17,7 +17,6 @@
|
||||
#include <boost/fusion/sequence/container/map/detail/end_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/map/detail/at_key_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/map/detail/value_at_key_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/map/detail/is_associative_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/vector/vector.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
@ -26,15 +25,15 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
struct map_tag;
|
||||
struct forward_sequence_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, typename T)>
|
||||
struct map : sequence_base<map<BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> >
|
||||
{
|
||||
struct category : forward_traversal_tag, associative_sequence_tag {};
|
||||
|
||||
typedef map_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef forward_sequence_tag category;
|
||||
typedef mpl::false_ is_view;
|
||||
|
||||
typedef vector<
|
||||
|
@ -1,33 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2006 Joel de Guzman
|
||||
Copyright (c) 2006 Dan Marsden
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_IS_ASSOCIATIVE_IMPL_20060304_2219)
|
||||
#define BOOST_FUSION_IS_ASSOCIATIVE_IMPL_20060304_2219
|
||||
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct set_tag;
|
||||
|
||||
namespace extension {
|
||||
template<typename Tag>
|
||||
struct is_associative_impl;
|
||||
|
||||
template<>
|
||||
struct is_associative_impl<fusion::set_tag>
|
||||
{
|
||||
template<typename Seq>
|
||||
struct apply
|
||||
: mpl::true_
|
||||
{};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
@ -9,6 +9,7 @@
|
||||
#define FUSION_SET_09162005_1104
|
||||
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/fusion/sequence/container/set/set_fwd.hpp>
|
||||
#include <boost/fusion/sequence/container/set/detail/lookup_key.hpp>
|
||||
@ -16,7 +17,6 @@
|
||||
#include <boost/fusion/sequence/container/set/detail/end_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/set/detail/at_key_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/set/detail/value_at_key_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/set/detail/is_associative_impl.hpp>
|
||||
#include <boost/fusion/sequence/container/vector/vector.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
@ -25,15 +25,15 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
struct set_tag;
|
||||
struct forward_sequence_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_SET_SIZE, typename T)>
|
||||
struct set : sequence_base<set<BOOST_PP_ENUM_PARAMS(FUSION_MAX_SET_SIZE, T)> >
|
||||
{
|
||||
struct category : forward_traversal_tag, associative_sequence_tag {};
|
||||
|
||||
typedef set_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef forward_sequence_tag category;
|
||||
typedef mpl::false_ is_view;
|
||||
|
||||
typedef vector<
|
||||
|
@ -84,7 +84,7 @@
|
||||
typedef vector_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef mpl::false_ is_view;
|
||||
typedef random_access_sequence_tag category;
|
||||
typedef random_access_traversal_tag category;
|
||||
typedef mpl::int_<N> size;
|
||||
|
||||
BOOST_PP_CAT(vector, N)() {}
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct vector_tag;
|
||||
struct fusion_sequence_tag;
|
||||
struct random_access_sequence_tag;
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
struct vector0 : sequence_base<vector0>
|
||||
{
|
||||
@ -46,7 +46,7 @@ namespace boost { namespace fusion
|
||||
typedef vector_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef mpl::false_ is_view;
|
||||
typedef random_access_sequence_tag category;
|
||||
typedef random_access_traversal_tag category;
|
||||
typedef mpl::int_<0> size;
|
||||
};
|
||||
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct vector_tag;
|
||||
struct fusion_sequence_tag;
|
||||
struct random_access_sequence_tag;
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
// expand vector11 to vector20
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/sequence/container/vector/detail/vector_n.hpp>
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct vector_tag;
|
||||
struct fusion_sequence_tag;
|
||||
struct random_access_sequence_tag;
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
// expand vector21 to vector30
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/sequence/container/vector/detail/vector_n.hpp>
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct vector_tag;
|
||||
struct fusion_sequence_tag;
|
||||
struct random_access_sequence_tag;
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
// expand vector31 to vector40
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/sequence/container/vector/detail/vector_n.hpp>
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
struct vector_tag;
|
||||
struct fusion_sequence_tag;
|
||||
struct random_access_sequence_tag;
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
// expand vector41 to vector50
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/sequence/container/vector/detail/vector_n.hpp>
|
||||
|
@ -15,6 +15,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -28,6 +30,13 @@ namespace boost { namespace fusion
|
||||
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<array_tag>;
|
||||
|
||||
|
@ -15,6 +15,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -28,6 +30,13 @@ namespace boost { namespace fusion
|
||||
struct apply;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct at_key_impl<sequence_facade_tag>
|
||||
{
|
||||
template <typename Sequence, typename Key>
|
||||
struct apply : Sequence::template at_key<Sequence, Key> {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct at_key_impl<array_tag>;
|
||||
|
||||
|
@ -12,7 +12,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
// Special tags:
|
||||
struct sequence_facade_tag; // iterator facade tag
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -26,6 +27,13 @@ namespace boost { namespace fusion
|
||||
struct apply;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct begin_impl<sequence_facade_tag>
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply : Sequence::template begin<Sequence> {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct begin_impl<array_tag>;
|
||||
|
||||
|
@ -14,7 +14,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
|
||||
namespace extension
|
||||
@ -28,6 +29,13 @@ namespace boost { namespace fusion
|
||||
{};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct empty_impl<sequence_facade_tag>
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply : Sequence::template empty<Sequence> {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct empty_impl<mpl_sequence_tag>;
|
||||
}
|
||||
|
@ -12,7 +12,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -26,6 +27,13 @@ namespace boost { namespace fusion
|
||||
struct apply;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct end_impl<sequence_facade_tag>
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply : Sequence::template end<Sequence> {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct end_impl<array_tag>;
|
||||
|
||||
|
@ -15,7 +15,9 @@
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -32,6 +34,13 @@ namespace boost { namespace fusion
|
||||
{};
|
||||
};
|
||||
|
||||
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<array_tag>;
|
||||
|
||||
|
@ -13,7 +13,11 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
|
||||
namespace extension
|
||||
{
|
||||
@ -24,6 +28,13 @@ namespace boost { namespace fusion
|
||||
struct apply : Sequence::size {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct size_impl<sequence_facade_tag>
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply : Sequence::template size<Sequence> {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct size_impl<array_tag>;
|
||||
|
||||
|
@ -13,6 +13,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -26,6 +28,13 @@ namespace boost { namespace fusion
|
||||
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<array_tag>;
|
||||
|
||||
|
@ -14,6 +14,8 @@
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
// Special tags:
|
||||
struct sequence_facade_tag;
|
||||
struct array_tag; // boost::array tag
|
||||
struct mpl_sequence_tag; // mpl sequence tag
|
||||
struct std_pair_tag; // std::pair tag
|
||||
@ -23,10 +25,17 @@ namespace boost { namespace fusion
|
||||
template <typename Tag>
|
||||
struct value_at_key_impl
|
||||
{
|
||||
template <typename Sequence, typename N>
|
||||
template <typename Sequence, typename Key>
|
||||
struct apply;
|
||||
};
|
||||
|
||||
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<array_tag>;
|
||||
|
||||
|
28
include/boost/fusion/sequence/sequence_facade.hpp
Normal file
28
include/boost/fusion/sequence/sequence_facade.hpp
Normal file
@ -0,0 +1,28 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2006 Joel de Guzman
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_SEQUENCE_FACADE_09252006_1044)
|
||||
#define FUSION_SEQUENCE_FACADE_09252006_1044
|
||||
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct sequence_facade_tag;
|
||||
|
||||
template <typename Derived, typename Category, typename IsView = mpl::false_>
|
||||
struct sequence_facade : sequence_base<Derived>
|
||||
{
|
||||
typedef sequence_facade_tag fusion_tag;
|
||||
typedef Derived derived_type;
|
||||
typedef Category category;
|
||||
typedef IsView is_view;
|
||||
};
|
||||
}}
|
||||
|
||||
#endif
|
@ -22,7 +22,7 @@
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct filter_view_tag;
|
||||
struct forward_sequence_tag;
|
||||
struct forward_traversal_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
template <typename Sequence, typename Pred>
|
||||
@ -30,7 +30,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
typedef filter_view_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef forward_sequence_tag category;
|
||||
typedef forward_traversal_tag category;
|
||||
typedef mpl::true_ is_view;
|
||||
|
||||
typedef typename result_of::begin<Sequence>::type first_type;
|
||||
|
@ -9,7 +9,6 @@
|
||||
#define FUSION_ITERATOR_RANGE_05062005_1224
|
||||
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/fusion/support/detail/iterator_to_sequence_category.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/fusion/sequence/view/iterator_range/detail/begin_impl.hpp>
|
||||
@ -33,11 +32,7 @@ namespace boost { namespace fusion
|
||||
typedef typename result_of::distance<begin_type, end_type>::type size;
|
||||
typedef mpl::true_ is_view;
|
||||
|
||||
typedef typename
|
||||
detail::iterator_to_sequence_category<
|
||||
typename traits::category_of<begin_type>::type
|
||||
>::type
|
||||
category;
|
||||
typedef typename traits::category_of<begin_type>::type category;
|
||||
|
||||
iterator_range(First const& first, Last const& last)
|
||||
: first(convert_iterator<First>::call(first))
|
||||
|
@ -24,7 +24,7 @@
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct joint_view_tag;
|
||||
struct forward_sequence_tag;
|
||||
struct forward_traversal_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
template <typename Sequence1, typename Sequence2>
|
||||
@ -32,7 +32,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
typedef joint_view_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef forward_sequence_tag category;
|
||||
typedef forward_traversal_tag category;
|
||||
typedef mpl::true_ is_view;
|
||||
|
||||
typedef typename result_of::begin<Sequence1>::type first_type;
|
||||
|
@ -18,7 +18,7 @@
|
||||
#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_and_derived.hpp>
|
||||
#include <boost/type_traits/is_base_of.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
@ -40,7 +40,7 @@ namespace boost { namespace fusion
|
||||
typedef typename result_of::size<Sequence>::type size;
|
||||
|
||||
BOOST_STATIC_ASSERT((
|
||||
is_base_and_derived<
|
||||
is_base_of<
|
||||
bidirectional_traversal_tag
|
||||
, typename traits::category_of<first_type>::type>::value));
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include <boost/fusion/sequence/view/reverse_view/detail/advance_impl.hpp>
|
||||
#include <boost/fusion/sequence/view/reverse_view/detail/distance_impl.hpp>
|
||||
#include <boost/fusion/sequence/view/reverse_view/detail/value_of_impl.hpp>
|
||||
#include <boost/type_traits/is_base_and_derived.hpp>
|
||||
#include <boost/type_traits/is_base_of.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
@ -34,7 +34,7 @@ namespace boost { namespace fusion
|
||||
typedef typename traits::category_of<first_type>::type category;
|
||||
|
||||
BOOST_STATIC_ASSERT((
|
||||
is_base_and_derived<
|
||||
is_base_of<
|
||||
bidirectional_traversal_tag
|
||||
, category>::value));
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct single_view_tag;
|
||||
struct forward_sequence_tag;
|
||||
struct forward_traversal_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
template <typename T>
|
||||
@ -28,7 +28,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
typedef single_view_tag fusion_tag;
|
||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||
typedef forward_sequence_tag category;
|
||||
typedef forward_traversal_tag category;
|
||||
typedef mpl::true_ is_view;
|
||||
typedef mpl::int_<1> size;
|
||||
typedef T value_type;
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <boost/fusion/sequence/intrinsic/has_key.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/fusion/support/pair.hpp>
|
||||
#include <boost/fusion/support/is_associative.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/mpl/assert.hpp>
|
||||
#include <iostream>
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <boost/fusion/sequence/intrinsic/has_key.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/fusion/support/pair.hpp>
|
||||
#include <boost/fusion/support/is_associative.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/mpl/assert.hpp>
|
||||
#include <iostream>
|
||||
|
Reference in New Issue
Block a user