|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r66411 - in trunk/boost/fusion: container/deque container/deque/detail container/vector/detail sequence/comparison/detail support support/detail
From: mr.chr.schmidt_at_[hidden]
Date: 2010-11-06 08:21:30
Author: cschmidt
Date: 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
New Revision: 66411
URL: http://svn.boost.org/trac/boost/changeset/66411
Log:
Fusion: removed fusion::sequence_root; Fixes #2335
Added:
trunk/boost/fusion/container/deque/detail/is_sequence_impl.hpp (contents, props changed)
Text files modified:
trunk/boost/fusion/container/deque/deque.hpp | 1 +
trunk/boost/fusion/container/vector/detail/vector_n.hpp | 11 +++++------
trunk/boost/fusion/sequence/comparison/detail/enable_comparison.hpp | 8 ++------
trunk/boost/fusion/support/detail/is_mpl_sequence.hpp | 4 ++--
trunk/boost/fusion/support/is_sequence.hpp | 7 +++++--
trunk/boost/fusion/support/sequence_base.hpp | 13 +++++++++++--
6 files changed, 26 insertions(+), 18 deletions(-)
Modified: trunk/boost/fusion/container/deque/deque.hpp
==============================================================================
--- trunk/boost/fusion/container/deque/deque.hpp (original)
+++ trunk/boost/fusion/container/deque/deque.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -27,6 +27,7 @@
#include <boost/fusion/container/deque/detail/at_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/is_sequence_impl.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/mpl/bool.hpp>
Added: trunk/boost/fusion/container/deque/detail/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/container/deque/detail/is_sequence_impl.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -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
Modified: trunk/boost/fusion/container/vector/detail/vector_n.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/detail/vector_n.hpp (original)
+++ trunk/boost/fusion/container/vector/detail/vector_n.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -36,8 +36,8 @@
#define N BOOST_PP_ITERATION()
- template <typename Derived, BOOST_PP_ENUM_PARAMS(N, typename T)>
- struct BOOST_PP_CAT(vector_data, N) : sequence_base<Derived>
+ template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+ struct BOOST_PP_CAT(vector_data, N)
{
BOOST_PP_CAT(vector_data, N)()
: BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {}
@@ -73,12 +73,11 @@
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
struct BOOST_PP_CAT(vector, N)
- : BOOST_PP_CAT(vector_data, N)<
- BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>
- , BOOST_PP_ENUM_PARAMS(N, T)>
+ : BOOST_PP_CAT(vector_data, N)<BOOST_PP_ENUM_PARAMS(N, T)>
+ , sequence_base<BOOST_PP_CAT(vector, N)<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_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 vector_tag fusion_tag;
typedef fusion_sequence_tag tag; // this gets picked up by MPL
Modified: trunk/boost/fusion/sequence/comparison/detail/enable_comparison.hpp
==============================================================================
--- trunk/boost/fusion/sequence/comparison/detail/enable_comparison.hpp (original)
+++ trunk/boost/fusion/sequence/comparison/detail/enable_comparison.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -13,22 +13,18 @@
#include <boost/mpl/equal_to.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
-#include <boost/fusion/support/detail/is_mpl_sequence.hpp>
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>
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>
struct enable_comparison
: 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> >
>
{};
Modified: trunk/boost/fusion/support/detail/is_mpl_sequence.hpp
==============================================================================
--- trunk/boost/fusion/support/detail/is_mpl_sequence.hpp (original)
+++ trunk/boost/fusion/support/detail/is_mpl_sequence.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -9,17 +9,17 @@
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/type_traits/is_base_of.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_convertible.hpp>
namespace boost { namespace fusion { namespace detail
{
template <typename T>
struct is_mpl_sequence
: mpl::and_<
- mpl::not_<is_base_of<sequence_root, T> >
+ mpl::not_<is_convertible<T, from_sequence_convertible_type> >
, mpl::is_sequence<T> >
{};
}}}
Modified: trunk/boost/fusion/support/is_sequence.hpp
==============================================================================
--- trunk/boost/fusion/support/is_sequence.hpp (original)
+++ trunk/boost/fusion/support/is_sequence.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -7,12 +7,13 @@
#if !defined(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/tag_of.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
namespace boost { namespace fusion
{
@@ -29,7 +30,9 @@
struct is_sequence_impl
{
template <typename Sequence>
- struct apply : is_base_of<sequence_root, Sequence> {};
+ struct apply
+ : is_convertible<Sequence, detail::from_sequence_convertible_type>
+ {};
};
template <>
Modified: trunk/boost/fusion/support/sequence_base.hpp
==============================================================================
--- trunk/boost/fusion/support/sequence_base.hpp (original)
+++ trunk/boost/fusion/support/sequence_base.hpp 2010-11-06 08:21:18 EDT (Sat, 06 Nov 2010)
@@ -12,10 +12,14 @@
namespace boost { namespace fusion
{
- struct sequence_root {};
+ namespace detail
+ {
+ struct from_sequence_convertible_type
+ {};
+ }
template <typename Sequence>
- struct sequence_base : sequence_root
+ struct sequence_base
{
Sequence const&
derived() const
@@ -28,6 +32,11 @@
{
return static_cast<Sequence&>(*this);
}
+
+ operator detail::from_sequence_convertible_type()const
+ {
+ return detail::from_sequence_convertible_type();
+ }
};
struct fusion_sequence_tag;
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk