forked from boostorg/fusion
baking segmented Fusion
[SVN r73854]
This commit is contained in:
@ -9,6 +9,7 @@
|
||||
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
#define BOOST_FUSION_AT_KEY_20060304_1755
|
||||
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/algorithm/query/find.hpp>
|
||||
#include <boost/fusion/iterator/deref_data.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
@ -7,6 +7,7 @@
|
||||
#if !defined(FUSION_BACK_09162005_0350)
|
||||
#define FUSION_BACK_09162005_0350
|
||||
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
|
@ -7,9 +7,14 @@
|
||||
#if !defined(FUSION_BEGIN_04052005_1132)
|
||||
#define FUSION_BEGIN_04052005_1132
|
||||
|
||||
#include <boost/blank.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -26,7 +31,13 @@ namespace boost { namespace fusion
|
||||
struct begin_impl
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply;
|
||||
struct apply
|
||||
: mpl::if_<
|
||||
traits::is_segmented<Sequence>
|
||||
, detail::segmented_begin<Sequence>
|
||||
, blank
|
||||
>::type
|
||||
{};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -7,13 +7,11 @@
|
||||
#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED)
|
||||
#define BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED
|
||||
|
||||
#include <boost/fusion/iterator/segmented_iterator/detail/begin_impl.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp>
|
||||
#include <boost/fusion/iterator/segmented_iterator.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template<typename Context>
|
||||
struct segmented_iterator;
|
||||
|
||||
//auto segmented_begin( rng )
|
||||
//{
|
||||
// return make_segmented_iterator( segmented_begin_impl( rng, nil ) );
|
||||
@ -24,17 +22,17 @@ namespace boost { namespace fusion
|
||||
{
|
||||
typedef
|
||||
segmented_iterator<
|
||||
typename detail::segmented_begin_impl<Range, fusion::nil>::type
|
||||
typename segmented_begin_impl<Range, fusion::nil>::type
|
||||
>
|
||||
type;
|
||||
|
||||
static type call(Range & rng)
|
||||
{
|
||||
return type(
|
||||
detail::segmented_begin_impl<Range, fusion::nil>::call(rng, fusion::nil()));
|
||||
segmented_begin_impl<Range, fusion::nil>::call(rng, fusion::nil()));
|
||||
}
|
||||
};
|
||||
|
||||
}}
|
||||
}}}
|
||||
|
||||
#endif
|
||||
|
@ -0,0 +1,108 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2011 Eric Niebler
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED)
|
||||
#define BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED
|
||||
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/fusion/container/list/cons_fwd.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp>
|
||||
#include <boost/fusion/support/detail/segmented_fold_until_impl.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
template <typename First, typename Last>
|
||||
struct iterator_range;
|
||||
}}
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
struct segmented_begin_fun
|
||||
{
|
||||
template <typename Sig>
|
||||
struct result;
|
||||
|
||||
template <typename This, typename Range, typename State, typename Context>
|
||||
struct result<This(Range&, State&, Context&)>
|
||||
{
|
||||
typedef
|
||||
iterator_range<
|
||||
typename fusion::result_of::begin<Range>::type,
|
||||
typename fusion::result_of::end<Range>::type
|
||||
>
|
||||
range_type;
|
||||
|
||||
typedef
|
||||
fusion::result<
|
||||
cons<range_type, typename remove_const<Context>::type>,
|
||||
fusion::break_
|
||||
>
|
||||
type;
|
||||
};
|
||||
|
||||
template <typename Range, typename State, typename Context>
|
||||
typename result<segmented_begin_fun(Range&, State const&, Context const&)>::type
|
||||
operator()(Range& rng, State const&, Context const& context) const
|
||||
{
|
||||
typedef
|
||||
iterator_range<
|
||||
typename fusion::result_of::begin<Range>::type,
|
||||
typename fusion::result_of::end<Range>::type
|
||||
>
|
||||
range_type;
|
||||
|
||||
return cons<range_type, Context>(range_type(fusion::begin(rng), fusion::end(rng)), context);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Range, typename Stack, bool IsSegmented = traits::is_segmented<Range>::type::value>
|
||||
struct segmented_begin_impl_aux
|
||||
{
|
||||
typedef
|
||||
segmented_end_impl<Range, Stack>
|
||||
end_impl;
|
||||
|
||||
typedef
|
||||
segmented_fold_until_impl<
|
||||
Range,
|
||||
result<typename end_impl::type, continue_>,
|
||||
Stack,
|
||||
segmented_begin_fun
|
||||
>
|
||||
fold_impl;
|
||||
|
||||
typedef typename fold_impl::type::value_type type;
|
||||
|
||||
static type call(Range& rng, Stack const& stack)
|
||||
{
|
||||
return fold_impl::call(rng, end_impl::call(rng, stack), stack, segmented_begin_fun()).value;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Range, typename Stack>
|
||||
struct segmented_begin_impl_aux<Range, Stack, false>
|
||||
{
|
||||
typedef typename result_of::begin<Range>::type begin_type;
|
||||
typedef typename result_of::end<Range>::type end_type;
|
||||
typedef iterator_range<begin_type, end_type> pair_type;
|
||||
typedef cons<pair_type, Stack> type;
|
||||
|
||||
static type call(Range& rng, Stack stack)
|
||||
{
|
||||
return type(pair_type(fusion::begin(rng), fusion::end(rng)), stack);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Range, typename Stack>
|
||||
struct segmented_begin_impl
|
||||
: segmented_begin_impl_aux<Range, Stack>
|
||||
{};
|
||||
|
||||
}}}
|
||||
|
||||
#endif
|
@ -7,14 +7,12 @@
|
||||
#if !defined(BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED)
|
||||
#define BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED
|
||||
|
||||
#include <boost/fusion/container/list/cons.hpp>
|
||||
#include <boost/fusion/iterator/segmented_iterator/detail/end_impl.hpp>
|
||||
#include <boost/fusion/container/list/cons_fwd.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp>
|
||||
#include <boost/fusion/iterator/segmented_iterator.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template<typename Context>
|
||||
struct segmented_iterator;
|
||||
|
||||
//auto segmented_end( rng )
|
||||
//{
|
||||
// return make_segmented_iterator( segmented_end_impl( rng ) );
|
||||
@ -25,17 +23,17 @@ namespace boost { namespace fusion
|
||||
{
|
||||
typedef
|
||||
segmented_iterator<
|
||||
typename detail::segmented_end_impl<Range, fusion::nil>::type
|
||||
typename segmented_end_impl<Range, fusion::nil>::type
|
||||
>
|
||||
type;
|
||||
|
||||
static type call(Range & rng)
|
||||
{
|
||||
return type(
|
||||
detail::segmented_end_impl<Range, fusion::nil>::call(rng, fusion::nil()));
|
||||
segmented_end_impl<Range, fusion::nil>::call(rng, fusion::nil()));
|
||||
}
|
||||
};
|
||||
|
||||
}}
|
||||
}}}
|
||||
|
||||
#endif
|
||||
|
@ -0,0 +1,59 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2011 Eric Niebler
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED)
|
||||
#define BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED
|
||||
|
||||
#include <boost/mpl/assert.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/container/list/cons_fwd.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
template <typename First, typename Last>
|
||||
struct iterator_range;
|
||||
}}
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
//auto segmented_end_impl( rng, stack )
|
||||
//{
|
||||
// assert(is_segmented(rng));
|
||||
// auto it = end(segments(rng));
|
||||
// return cons(iterator_range(it, it), stack);
|
||||
//}
|
||||
|
||||
template<typename Range, typename Stack>
|
||||
struct segmented_end_impl
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_segmented<Range>));
|
||||
|
||||
typedef
|
||||
typename result_of::end<
|
||||
typename remove_reference<
|
||||
typename add_const<
|
||||
typename result_of::segments<Range>::type
|
||||
>::type
|
||||
>::type
|
||||
>::type
|
||||
end_type;
|
||||
|
||||
typedef iterator_range<end_type, end_type> pair_type;
|
||||
typedef cons<pair_type, Stack> type;
|
||||
|
||||
static type call(Range & rng, Stack stack)
|
||||
{
|
||||
end_type end = fusion::end(fusion::segments(rng));
|
||||
return type(pair_type(end, end), stack);
|
||||
}
|
||||
};
|
||||
|
||||
}}}
|
||||
|
||||
#endif
|
@ -13,48 +13,42 @@
|
||||
#include <boost/mpl/plus.hpp>
|
||||
#include <boost/mpl/size_t.hpp>
|
||||
#include <boost/mpl/placeholders.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/mpl/begin.hpp>
|
||||
#include <boost/fusion/mpl/end.hpp>
|
||||
#include <boost/fusion/mpl/clear.hpp>
|
||||
#include <boost/fusion/mpl/push_front.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/segments.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// calculates the size of any segmented data structure.
|
||||
template<typename Sequence>
|
||||
struct segmented_size;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value>
|
||||
struct segmented_size_impl
|
||||
: mpl::fold<
|
||||
typename remove_reference<
|
||||
typename add_const<
|
||||
typename result_of::segments<Sequence>::type
|
||||
>::type
|
||||
>::type,
|
||||
mpl::size_t<0>,
|
||||
mpl::plus<mpl::_1, segmented_size<mpl::_2> >
|
||||
>::type
|
||||
{};
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value>
|
||||
struct segmented_size_impl
|
||||
: mpl::fold<
|
||||
typename remove_reference<
|
||||
typename add_const<
|
||||
typename result_of::segments<Sequence>::type
|
||||
>::type
|
||||
>::type,
|
||||
mpl::size_t<0>,
|
||||
mpl::plus<mpl::_1, segmented_size<mpl::_2> >
|
||||
>::type
|
||||
{};
|
||||
|
||||
template<typename Sequence>
|
||||
struct segmented_size_impl<Sequence, false>
|
||||
: result_of::size<Sequence>::type
|
||||
{};
|
||||
}
|
||||
template<typename Sequence>
|
||||
struct segmented_size_impl<Sequence, false>
|
||||
: result_of::size<Sequence>::type
|
||||
{};
|
||||
|
||||
template<typename Sequence>
|
||||
struct segmented_size
|
||||
: detail::segmented_size_impl<Sequence>
|
||||
: segmented_size_impl<Sequence>
|
||||
{};
|
||||
|
||||
}}
|
||||
}}}
|
||||
|
||||
#endif
|
||||
|
@ -7,6 +7,7 @@
|
||||
#if !defined(FUSION_EMPTY_09162005_0335)
|
||||
#define FUSION_EMPTY_09162005_0335
|
||||
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
@ -7,9 +7,14 @@
|
||||
#if !defined(FUSION_END_04052005_1141)
|
||||
#define FUSION_END_04052005_1141
|
||||
|
||||
#include <boost/blank.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/detail/segmented_end.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -26,7 +31,13 @@ namespace boost { namespace fusion
|
||||
struct end_impl
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply;
|
||||
struct apply
|
||||
: mpl::if_<
|
||||
traits::is_segmented<Sequence>
|
||||
, detail::segmented_end<Sequence>
|
||||
, blank
|
||||
>::type
|
||||
{};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -7,6 +7,7 @@
|
||||
#if !defined(FUSION_FRONT_09162005_0343)
|
||||
#define FUSION_FRONT_09162005_0343
|
||||
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
@ -7,6 +7,7 @@
|
||||
#if !defined(FUSION_HAS_KEY_09232005_1454)
|
||||
#define FUSION_HAS_KEY_09232005_1454
|
||||
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/algorithm/query/find.hpp>
|
||||
|
@ -7,6 +7,9 @@
|
||||
#if !defined(BOOST_FUSION_SEGMENTS_04052005_1141)
|
||||
#define BOOST_FUSION_SEGMENTS_04052005_1141
|
||||
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
@ -50,15 +53,19 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::segments<Sequence>::type
|
||||
segments(Sequence & seq)
|
||||
inline typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
, result_of::segments<Sequence>
|
||||
>::type
|
||||
segments(Sequence& seq)
|
||||
{
|
||||
typedef typename traits::tag_of<Sequence>::type tag_type;
|
||||
return extension::segments_impl<tag_type>::template apply<Sequence>::call(seq);
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::segments<Sequence const>::type
|
||||
inline typename result_of::segments<Sequence const>::type
|
||||
segments(Sequence const& seq)
|
||||
{
|
||||
typedef typename traits::tag_of<Sequence const>::type tag_type;
|
||||
|
@ -7,8 +7,13 @@
|
||||
#if !defined(FUSION_SIZE_05052005_0214)
|
||||
#define FUSION_SIZE_05052005_0214
|
||||
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/detail/segmented_size.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -24,8 +29,17 @@ namespace boost { namespace fusion
|
||||
template <typename Tag>
|
||||
struct size_impl
|
||||
{
|
||||
template<typename Sequence>
|
||||
struct unsegmented_size : Sequence::size {};
|
||||
|
||||
template <typename Sequence>
|
||||
struct apply : Sequence::size {};
|
||||
struct apply
|
||||
: mpl::if_<
|
||||
traits::is_segmented<Sequence>
|
||||
, detail::segmented_size<Sequence>
|
||||
, unsegmented_size<Sequence>
|
||||
>::type
|
||||
{};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -8,6 +8,7 @@
|
||||
#define FUSION_VALUE_AT_05052005_0229
|
||||
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
|
@ -9,6 +9,7 @@
|
||||
#define FUSION_VALUE_AT_KEY_05052005_0229
|
||||
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
|
||||
#include <boost/fusion/iterator/value_of_data.hpp>
|
||||
#include <boost/fusion/algorithm/query/find.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
203
include/boost/fusion/sequence/intrinsic_fwd.hpp
Normal file
203
include/boost/fusion/sequence/intrinsic_fwd.hpp
Normal file
@ -0,0 +1,203 @@
|
||||
/*=============================================================================
|
||||
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_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED)
|
||||
#define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED
|
||||
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace extension
|
||||
{
|
||||
template <typename Tag>
|
||||
struct at_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct begin_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct empty_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct end_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct has_key_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct segments_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct size_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct value_at_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct at_key_impl;
|
||||
|
||||
template <typename Tag>
|
||||
struct value_at_key_impl;
|
||||
}
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <typename Sequence, typename N>
|
||||
struct at;
|
||||
|
||||
template <typename Sequence, int N>
|
||||
struct at_c;
|
||||
|
||||
template <typename Sequence>
|
||||
struct back;
|
||||
|
||||
template <typename Sequence>
|
||||
struct begin;
|
||||
|
||||
template <typename Sequence>
|
||||
struct empty;
|
||||
|
||||
template <typename Sequence>
|
||||
struct end;
|
||||
|
||||
template <typename Sequence>
|
||||
struct front;
|
||||
|
||||
template <typename Sequence, typename Key>
|
||||
struct has_key;
|
||||
|
||||
template <typename Sequence>
|
||||
struct segments;
|
||||
|
||||
template <typename Sequence>
|
||||
struct size;
|
||||
|
||||
template <typename Sequence, typename N>
|
||||
struct value_at;
|
||||
|
||||
template <typename Sequence, int N>
|
||||
struct value_at_c;
|
||||
|
||||
template <typename Sequence, typename Key>
|
||||
struct at_key;
|
||||
|
||||
template <typename Sequence, typename N>
|
||||
struct value_at_key;
|
||||
}
|
||||
|
||||
template <typename N, typename Sequence>
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
, result_of::at<Sequence, N>
|
||||
>::type
|
||||
at(Sequence& seq);
|
||||
|
||||
template <typename N, typename Sequence>
|
||||
typename result_of::at<Sequence const, N>::type
|
||||
at(Sequence const& seq);
|
||||
|
||||
template <int N, typename Sequence>
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
, result_of::at_c<Sequence, N>
|
||||
>::type
|
||||
at_c(Sequence& seq);
|
||||
|
||||
template <int N, typename Sequence>
|
||||
typename result_of::at_c<Sequence const, N>::type
|
||||
at_c(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::back<Sequence>::type
|
||||
back(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::back<Sequence const>::type
|
||||
back(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::begin<Sequence>
|
||||
>::type const
|
||||
begin(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::begin<Sequence const>
|
||||
>::type const
|
||||
begin(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::empty<Sequence>::type
|
||||
empty(Sequence const&);
|
||||
|
||||
template <typename Sequence>
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::end<Sequence>
|
||||
>::type const
|
||||
end(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::end<Sequence const>
|
||||
>::type const
|
||||
end(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::front<Sequence>::type
|
||||
front(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::front<Sequence const>::type
|
||||
front(Sequence const& seq);
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
typename result_of::has_key<Sequence, Key>::type
|
||||
has_key(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
, result_of::segments<Sequence>
|
||||
>::type
|
||||
segments(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::segments<Sequence const>::type
|
||||
segments(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
typename result_of::size<Sequence>::type
|
||||
size(Sequence const&);
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
, result_of::at_key<Sequence, Key>
|
||||
>::type
|
||||
at_key(Sequence& seq);
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
typename result_of::at_key<Sequence const, Key>::type
|
||||
at_key(Sequence const& seq);
|
||||
}}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user