associative iterators & views

[SVN r57156]
This commit is contained in:
Christopher Schmidt
2009-10-25 22:59:54 +00:00
parent 35e469e2d5
commit 9b26b4a0f7
69 changed files with 1331 additions and 942 deletions

View File

@ -9,6 +9,8 @@
#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>
@ -25,15 +27,28 @@ namespace boost { namespace fusion
template <typename Tag>
struct at_key_impl
{
template <typename Sequence, typename Key>
struct apply;
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<Sequence, Key> {};
struct apply : Sequence::template at_key_impl<Sequence, Key> {};
};
template <>

View File

@ -7,9 +7,11 @@
#if !defined(FUSION_HAS_KEY_09232005_1454)
#define FUSION_HAS_KEY_09232005_1454
#include <boost/mpl/not.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/type_traits/is_same.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
{
@ -26,10 +28,14 @@ namespace boost { namespace fusion
template <typename Tag>
struct has_key_impl
{
template <typename Sequence, typename Key>
template <typename Seq, typename Key>
struct apply
: mpl::not_<is_same<typename Sequence::
template meta_at_impl<Key>::type, void_> >
: mpl::not_<
typename result_of::equal_to<
typename result_of::find<Seq, Key>::type
, typename result_of::end<Seq>::type
>::type
>::type
{};
};

View File

@ -9,6 +9,8 @@
#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
@ -24,8 +26,12 @@ namespace boost { namespace fusion
template <typename Tag>
struct value_at_key_impl
{
template <typename Sequence, typename Key>
struct apply;
template <typename Seq, typename Key>
struct apply
: result_of::value_of_data<
typename result_of::find<Seq, Key>::type
>
{};
};
template <>