mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-23 00:57:20 +02:00
@ -27,6 +27,7 @@
|
|||||||
#include <boost/fusion/container/deque/detail/at_impl.hpp>
|
#include <boost/fusion/container/deque/detail/at_impl.hpp>
|
||||||
#include <boost/fusion/container/deque/detail/begin_impl.hpp>
|
#include <boost/fusion/container/deque/detail/begin_impl.hpp>
|
||||||
#include <boost/fusion/container/deque/detail/end_impl.hpp>
|
#include <boost/fusion/container/deque/detail/end_impl.hpp>
|
||||||
|
#include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||||
#include <boost/mpl/bool.hpp>
|
#include <boost/mpl/bool.hpp>
|
||||||
|
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 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_CONTAINER_DEQUE_DETAIL_IS_SEQUENCE_IMPL_HPP
|
||||||
|
#define BOOST_FUSION_CONTAINER_DEQUE_DETAIL_IS_SEQUENCE_IMPL_HPP
|
||||||
|
|
||||||
|
#include <boost/mpl/bool.hpp>
|
||||||
|
|
||||||
|
namespace boost { namespace fusion
|
||||||
|
{
|
||||||
|
struct deque_tag;
|
||||||
|
|
||||||
|
namespace extension
|
||||||
|
{
|
||||||
|
template<typename T>
|
||||||
|
struct is_sequence_impl;
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct is_sequence_impl<deque_tag>
|
||||||
|
{
|
||||||
|
template<typename Sequence>
|
||||||
|
struct apply
|
||||||
|
: mpl::true_
|
||||||
|
{};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
|
#endif
|
@ -36,8 +36,8 @@
|
|||||||
|
|
||||||
#define N BOOST_PP_ITERATION()
|
#define N BOOST_PP_ITERATION()
|
||||||
|
|
||||||
template <typename Derived, BOOST_PP_ENUM_PARAMS(N, typename T)>
|
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||||
struct BOOST_PP_CAT(vector_data, N) : sequence_base<Derived>
|
struct BOOST_PP_CAT(vector_data, N)
|
||||||
{
|
{
|
||||||
BOOST_PP_CAT(vector_data, N)()
|
BOOST_PP_CAT(vector_data, N)()
|
||||||
: BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {}
|
: BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {}
|
||||||
@ -73,12 +73,11 @@
|
|||||||
|
|
||||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||||
struct BOOST_PP_CAT(vector, N)
|
struct BOOST_PP_CAT(vector, N)
|
||||||
: BOOST_PP_CAT(vector_data, N)<
|
: BOOST_PP_CAT(vector_data, N)<BOOST_PP_ENUM_PARAMS(N, T)>
|
||||||
BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>
|
, sequence_base<BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> >
|
||||||
, 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, N)<BOOST_PP_ENUM_PARAMS(N, T)> this_type;
|
||||||
typedef BOOST_PP_CAT(vector_data, N)<this_type, BOOST_PP_ENUM_PARAMS(N, T)> base_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 mpl::BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> types;
|
||||||
typedef vector_tag fusion_tag;
|
typedef vector_tag fusion_tag;
|
||||||
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
||||||
|
@ -13,22 +13,18 @@
|
|||||||
#include <boost/mpl/equal_to.hpp>
|
#include <boost/mpl/equal_to.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||||
#include <boost/fusion/support/detail/is_mpl_sequence.hpp>
|
|
||||||
|
|
||||||
namespace boost { namespace fusion { namespace detail
|
namespace boost { namespace fusion { namespace detail
|
||||||
{
|
{
|
||||||
template <typename Sequence>
|
|
||||||
struct is_native_fusion_sequence : is_base_of<sequence_root, Sequence> {};
|
|
||||||
|
|
||||||
template <typename Seq1, typename Seq2>
|
template <typename Seq1, typename Seq2>
|
||||||
struct enable_equality
|
struct enable_equality
|
||||||
: mpl::or_<is_native_fusion_sequence<Seq1>, is_native_fusion_sequence<Seq2> >
|
: mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
|
||||||
{};
|
{};
|
||||||
|
|
||||||
template <typename Seq1, typename Seq2>
|
template <typename Seq1, typename Seq2>
|
||||||
struct enable_comparison
|
struct enable_comparison
|
||||||
: mpl::and_<
|
: mpl::and_<
|
||||||
mpl::or_<is_native_fusion_sequence<Seq1>, is_native_fusion_sequence<Seq2> >
|
mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
|
||||||
, mpl::equal_to<result_of::size<Seq1>, result_of::size<Seq2> >
|
, mpl::equal_to<result_of::size<Seq1>, result_of::size<Seq2> >
|
||||||
>
|
>
|
||||||
{};
|
{};
|
||||||
|
@ -9,17 +9,17 @@
|
|||||||
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
|
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
|
||||||
|
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
#include <boost/type_traits/is_base_of.hpp>
|
|
||||||
#include <boost/mpl/is_sequence.hpp>
|
#include <boost/mpl/is_sequence.hpp>
|
||||||
#include <boost/mpl/and.hpp>
|
#include <boost/mpl/and.hpp>
|
||||||
#include <boost/mpl/not.hpp>
|
#include <boost/mpl/not.hpp>
|
||||||
|
#include <boost/type_traits/is_convertible.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion { namespace detail
|
namespace boost { namespace fusion { namespace detail
|
||||||
{
|
{
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct is_mpl_sequence
|
struct is_mpl_sequence
|
||||||
: mpl::and_<
|
: mpl::and_<
|
||||||
mpl::not_<is_base_of<sequence_root, T> >
|
mpl::not_<is_convertible<T, from_sequence_convertible_type> >
|
||||||
, mpl::is_sequence<T> >
|
, mpl::is_sequence<T> >
|
||||||
{};
|
{};
|
||||||
}}}
|
}}}
|
||||||
|
@ -7,12 +7,13 @@
|
|||||||
#if !defined(FUSION_IS_SEQUENCE_05052005_1002)
|
#if !defined(FUSION_IS_SEQUENCE_05052005_1002)
|
||||||
#define FUSION_IS_SEQUENCE_05052005_1002
|
#define FUSION_IS_SEQUENCE_05052005_1002
|
||||||
|
|
||||||
#include <boost/type_traits/is_base_of.hpp>
|
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
#include <boost/fusion/support/tag_of.hpp>
|
#include <boost/fusion/support/tag_of.hpp>
|
||||||
#include <boost/mpl/is_sequence.hpp>
|
#include <boost/mpl/is_sequence.hpp>
|
||||||
#include <boost/mpl/or.hpp>
|
#include <boost/mpl/or.hpp>
|
||||||
#include <boost/mpl/bool.hpp>
|
#include <boost/mpl/bool.hpp>
|
||||||
|
#include <boost/type_traits/is_convertible.hpp>
|
||||||
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -29,7 +30,9 @@ namespace boost { namespace fusion
|
|||||||
struct is_sequence_impl
|
struct is_sequence_impl
|
||||||
{
|
{
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
struct apply : is_base_of<sequence_root, Sequence> {};
|
struct apply
|
||||||
|
: is_convertible<Sequence, detail::from_sequence_convertible_type>
|
||||||
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -12,10 +12,14 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct sequence_root {};
|
namespace detail
|
||||||
|
{
|
||||||
|
struct from_sequence_convertible_type
|
||||||
|
{};
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
struct sequence_base : sequence_root
|
struct sequence_base
|
||||||
{
|
{
|
||||||
Sequence const&
|
Sequence const&
|
||||||
derived() const
|
derived() const
|
||||||
@ -28,6 +32,11 @@ namespace boost { namespace fusion
|
|||||||
{
|
{
|
||||||
return static_cast<Sequence&>(*this);
|
return static_cast<Sequence&>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator detail::from_sequence_convertible_type()const
|
||||||
|
{
|
||||||
|
return detail::from_sequence_convertible_type();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fusion_sequence_tag;
|
struct fusion_sequence_tag;
|
||||||
|
Reference in New Issue
Block a user