|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r55557 - in sandbox/SOC/2009/fusion: . boost/fusion boost/fusion/adapted boost/fusion/adapted/detail/array boost/fusion/adapted/detail/boost_tuple boost/fusion/adapted/detail/mpl boost/fusion/adapted/detail/struct boost/fusion/adapted/struct boost/fusion/algorithm boost/fusion/algorithm/iteration boost/fusion/algorithm/query boost/fusion/algorithm/transformation boost/fusion/algorithm/transformation/detail boost/fusion/algorithm/transformation/detail/filter_key_view boost/fusion/algorithm/transformation/detail/pp boost/fusion/algorithm/transformation/detail/variadic_templates boost/fusion/container boost/fusion/container/list boost/fusion/container/list/detail/cons boost/fusion/container/list/detail/list boost/fusion/container/map boost/fusion/container/map/detail boost/fusion/container/set boost/fusion/container/set/detail boost/fusion/container/vector boost/fusion/container/vector/detail boost/fusion/container/vector/detail/pp boost/fusion/container/vector/detail/variadic_templates boost/fusion/functional boost/fusion/iterator boost/fusion/mpl boost/fusion/sequence boost/fusion/sequence/comparison boost/fusion/sequence/comparison/detail boost/fusion/sequence/intrinsic boost/fusion/sequence/io boost/fusion/support boost/fusion/support/detail boost/fusion/support/variadic_templates boost/fusion/tuple boost/fusion/view/detail boost/fusion/view/filter_view boost/fusion/view/iterator_range boost/fusion/view/joint_view boost/fusion/view/joint_view/detail boost/fusion/view/reverse_view boost/fusion/view/reverse_view/detail boost/fusion/view/transform_view boost/fusion/view/zip_view boost/fusion/view/zip_view/detail libs/fusion/example/test libs/fusion/test/sequence
From: mr.chr.schmidt_at_[hidden]
Date: 2009-08-12 17:36:42
Author: cschmidt
Date: 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
New Revision: 55557
URL: http://svn.boost.org/trac/boost/changeset/55557
Log:
asserts & bugfixes
Added:
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/is_in_seq.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/support/detail/workaround.hpp (contents, props changed)
Removed:
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp
Text files modified:
sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp | 7 +
sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp | 11 +++
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp | 35 ++++---------
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp | 33 ++++++++---
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp | 5 -
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp | 4 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp | 21 +++----
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp | 20 ++----
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp | 21 +++----
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp | 13 ++++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp | 9 +-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp | 15 +++++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp | 8 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp | 18 ++++--
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp | 62 +++++++++++++++++++---
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp | 18 +++---
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp | 9 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp | 11 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp | 8 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp | 31 +++++++----
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp | 11 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp | 11 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp | 20 ++++---
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp | 14 +++-
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp | 4 +
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp | 8 ++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp | 10 +++
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp | 6 -
sandbox/SOC/2009/fusion/boost/fusion/container.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp | 16 +++++
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp | 4 +
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp | 14 ++++
sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp | 7 +-
sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp | 8 ++
sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp | 25 ++++++---
sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp | 17 ++----
sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp | 15 +++-
sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp | 7 +
sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp | 15 +---
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp | 12 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp | 15 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp | 15 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp | 11 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp | 15 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp | 15 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp | 7 +
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp | 55 ++++++++++++++------
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp | 10 +++
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp | 16 ++++-
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp | 12 +++-
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp | 6 +
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp | 12 ++++
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp | 39 +++++++++++++-
sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp | 12 +++
sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp | 14 ++++-
sandbox/SOC/2009/fusion/boost/fusion/support.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp | 105 ++++++++++++++++++++++++++++++++-------
sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp | 49 +++++++++++++++++-
sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp | 28 ++++++++-
sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp | 18 +++---
sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp | 14 +----
sandbox/SOC/2009/fusion/boost/fusion/view.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp | 39 +++++---------
sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp | 4 +
sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp | 14 ++--
sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp | 6 ++
sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp | 5 -
sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp | 5 +
sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp | 10 +++
sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp | 5 -
sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp | 6 -
sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp | 32 +++++------
sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp | 6 -
sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp | 59 ++++++++++++++-------
sandbox/SOC/2009/fusion/build.bat | 2
sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp | 47 +++++++++++++++++
sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp | 2
sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp | 3 -
sandbox/SOC/2009/fusion/project-root.jam | 5 +
147 files changed, 1132 insertions(+), 460 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,13 @@
#ifndef BOOST_FUSION_ADAPTED_HPP
#define BOOST_FUSION_ADAPTED_HPP
-#include <boost/fusion/adapted/boost_tuple.hpp>
-#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/fusion/adapted/array.hpp>
+#include <boost/fusion/adapted/boost_array.hpp>
+#include <boost/fusion/adapted/boost_tuple.hpp>
#include <boost/fusion/adapted/mpl.hpp>
+//TODO!!!
+//#include <boost/fusion/adapted/std_array.hpp>
+#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/fusion/adapted/struct.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,7 +6,6 @@
#ifndef BOOST_FUSION_ADAPTED_BOOST_ARRAY_HPP
#define BOOST_FUSION_ADAPTED_BOOST_ARRAY_HPP
-#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/support/ref.hpp>
#define BOOST_FUSION_ADAPTED_ARRAY_TYPE class
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -21,8 +21,9 @@
#include <boost/fusion/adapted/detail/boost_tuple/size_impl.hpp>
#include <boost/fusion/adapted/detail/boost_tuple/at_impl.hpp>
#include <boost/fusion/adapted/detail/boost_tuple/value_at_impl.hpp>
-#include <boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp>
#include <boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp>
#include <boost/fusion/adapted/detail/boost_tuple/end_impl.hpp>
+#include <boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp>
+#include <boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template<typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_END_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template<typename Tag>
@@ -19,7 +21,14 @@
template <typename SeqRef>
struct apply
{
- typedef boost_tuple_iterator<SeqRef> type;
+ typedef
+ basic_iterator<
+ boost_tuple_iterator_tag
+ , random_access_traversal_tag
+ , SeqRef
+ , 0
+ >
+ type;
static type
call(SeqRef seq)
Deleted: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
+++ (empty file)
@@ -1,104 +0,0 @@
-/*=============================================================================
- 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)
-==============================================================================*/
-
-#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BOOST_TUPLE_ITERATOR_HPP
-#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BOOST_TUPLE_ITERATOR_HPP
-
-#include <boost/fusion/iterator/iterator_facade.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace fusion
-{
- struct forward_traversal_tag;
-
- template <typename ConsRef>
- struct boost_tuple_iterator
- : iterator_facade<boost_tuple_iterator<ConsRef>, forward_traversal_tag>
- {
- typedef ConsRef cons_type;
-
- template <typename ItRef>
- struct value_of
- {
- typedef typename
- detail::remove_reference<ConsRef>::type::head_type
- type;
- };
-
- template <typename ItRef>
- struct deref
- {
- typedef typename
- detail::forward_as<
- ConsRef
- , typename detail::remove_reference<
- ConsRef
- >::type::head_type
- >::type
- type;
-
- static type
- call(ItRef it)
- {
- return it.cons->get_head();
- }
- };
-
- template <typename ItRef>
- struct next
- {
- typedef
- boost_tuple_iterator<
- typename detail::forward_as<
- ConsRef
- , typename detail::remove_reference<
- ConsRef
- >::type::tail_type
- >::type
- >
- type;
-
- static type
- call(ItRef it)
- {
- return type(it.cons->get_tail(),0);
- }
- };
-
- template <typename It1Ref, typename It2Ref>
- struct equal_to
- : is_same<
- typename detail::identity<ConsRef>::type
- , typename detail::identity<
- typename detail::remove_reference<It2Ref>::type::cons_type
- >::type
- >
- {};
-
- template<typename OtherIt>
- boost_tuple_iterator(OtherIt const& it)
- : cons(it.cons)
- {}
-
- boost_tuple_iterator(ConsRef cons, int)
- : cons(&cons)
- {}
-
- template<typename OtherIt>
- boost_tuple_iterator&
- operator=(OtherIt const& it)
- {
- cons=it.cons;
- return *this;
- }
-
- typename detail::remove_reference<ConsRef>::type* cons;
- };
-}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,7 @@
namespace boost { namespace fusion
{
- struct forward_traversal_tag;
+ struct random_access_traversal_tag;
namespace extension
{
@@ -23,7 +23,7 @@
template<typename SeqRef>
struct apply
{
- typedef forward_traversal_tag type;
+ typedef random_access_traversal_tag type;
};
};
}
Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,43 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ADAPTED_DETAIL_BOOST_TUPLE_DEREF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_DEREF_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<boost_tuple_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef typename detail::remove_reference<ItRef>::type it;
+
+ typedef typename
+ detail::forward_as<
+ typename it::seq_type
+ , typename tuples::element<
+ it::index::value
+ , typename detail::remove_reference<
+ typename it::seq_type
+ >::type
+ >::type
+ >::type
+ type;
+
+ static type
+ call(ItRef it_)
+ {
+ return get<it::index::value>(*it_.seq);
+ }
+ };
+ };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,8 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_END_IMPL_HPP
-#include <boost/mpl/bool.hpp>
-#include <boost/type_traits/is_convertible.hpp>
+#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
{
@@ -19,37 +18,25 @@
template <>
struct end_impl<boost_tuple_tag>
{
- template <typename>
+ template <typename SeqRef>
struct apply
{
typedef
- boost_tuple_iterator<tuples::null_type const volatile&>
+ basic_iterator<
+ boost_tuple_iterator_tag
+ , random_access_traversal_tag
+ , SeqRef
+ , tuples::length<
+ typename detail::identity<SeqRef>::type
+ >::value
+ >
type;
- template<typename Seq>
static type
- call(Seq const& seq, mpl::true_)
+ call(SeqRef seq)
{
return type(seq,0);
}
-
- template<typename Seq>
- static type
- call(Seq const& seq, mpl::false_)
- {
- return call(seq.get_tail());
- }
-
- template<typename Seq>
- static type
- call(Seq const& seq)
- {
- return call(seq,
- typename is_convertible<
- Seq*
- , tuples::null_type const volatile*
- >::type());
- }
};
};
}}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,7 @@
namespace boost { namespace fusion
{
struct boost_tuple_tag;
+ struct boost_tuple_iterator_tag;
namespace traits
{
Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,34 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ADAPTED_DETAIL_BOOST_TUPLE_VALUE_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_VALUE_OF_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct value_of_impl;
+
+ template <>
+ struct value_of_impl<boost_tuple_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef typename detail::remove_reference<ItRef>::type it;
+
+ typedef typename
+ tuples::element<
+ it::index::value
+ , typename detail::remove_reference<
+ typename it::seq_type
+ >::type
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,13 +11,8 @@
#include <boost/mpl/begin.hpp>
#include <boost/mpl/is_sequence.hpp>
-
-namespace boost { namespace mpl
-{
- struct forward_iterator_tag;
- struct bidirectional_iterator_tag;
- struct random_access_iterator_tag;
-}}
+#include <boost/mpl/iterator_category.hpp>
+#include <boost/mpl/iterator_tags.hpp>
namespace boost { namespace fusion
{
@@ -62,9 +57,27 @@
{
typedef typename
detail::mpl_iterator_category<
- typename mpl::begin<
- typename detail::identity<SeqRef>::type
- >::type::category
+ typename mpl::iterator_category<
+ typename mpl::begin<
+ typename detail::identity<SeqRef>::type
+ >::type
+ >::type
+ >::type
+ type;
+ };
+ };
+
+ template<>
+ struct category_of_impl<mpl_iterator_tag>
+ {
+ template<typename ItRef>
+ struct apply
+ {
+ typedef typename
+ detail::mpl_iterator_category<
+ typename mpl::iterator_category<
+ typename detail::identity<ItRef>::type
+ >::type
>::type
type;
};
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,7 +11,7 @@
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/fusion/support/category_of.hpp>
-//TODO assoc iterator!
+//TODO doc no assoc iterator!
namespace boost { namespace fusion
{
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,8 +9,6 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_IMPL_HPP
-#include <boost/fusion/support/assert.hpp>
-
#include <boost/mpl/int.hpp>
namespace boost { namespace fusion { namespace extension
@@ -24,9 +22,6 @@
template <typename SeqRef, typename N>
struct apply
{
- //BOOST_FUSION_INDEX_CHECK(n_value,
- // struct_size<Sequence>::value);
-
typedef typename
detail::forward_as<
SeqRef
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template<typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_END_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -19,7 +19,7 @@
struct assoc_struct_iterator_tag;
struct assoc_struct_category
- : forward_traversal_tag, associative_sequence_tag
+ : bidirectional_traversal_tag, associative_sequence_tag
{};
namespace extension
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,4 +11,5 @@
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
+
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -7,7 +7,6 @@
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_HPP
#include <boost/fusion/support/ref.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/adapted/detail/struct/extension.hpp>
#include <boost/fusion/adapted/detail/struct/adapt_base.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -7,7 +7,6 @@
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
#include <boost/fusion/support/ref.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/adapted/detail/struct/extension.hpp>
#include <boost/fusion/adapted/detail/struct/adapt_base.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/algorithm/iteration/fold.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -18,7 +19,10 @@
template <typename Seq, typename State, typename F>
struct accumulate
: fold<Seq, State, F>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
}
template <typename Seq, typename State, typename F>
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/algorithm/iteration/detail/fold.hpp>
@@ -23,6 +24,9 @@
template <typename Seq, typename State, typename F>
struct fold
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
detail::fold_impl<
size<Seq>::value
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
@@ -20,15 +21,22 @@
namespace result_of
{
- template <typename, typename>
+ template <typename Seq, typename>
struct for_each
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef void type;
};
}
template <typename Seq, typename F>
- inline void
+ inline typename
+ result_of::for_each<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
for_each(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
BOOST_FUSION_R_ELSE_CLREF(F) f)
{
@@ -40,7 +48,7 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Seq, typename F>
- inline void
+ inline typename result_of::for_each<Seq&,F const&>::type
for_each(Seq& seq,F const& f)
{
detail::for_each_unrolled<result_of::size<Seq&>::value>::call(
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,10 +10,11 @@
#include <boost/fusion/algorithm/query/all.hpp>
#include <boost/fusion/algorithm/query/any.hpp>
-#include <boost/fusion/algorithm/query/count.hpp>
#include <boost/fusion/algorithm/query/count_if.hpp>
-#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/algorithm/query/count.hpp>
#include <boost/fusion/algorithm/query/find_if.hpp>
+#include <boost/fusion/algorithm/query/find_key.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
#include <boost/fusion/algorithm/query/none.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,7 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/algorithm/query/detail/all.hpp>
@@ -19,15 +20,22 @@
{
namespace result_of
{
- template <typename, typename>
+ template <typename Seq, typename>
struct all
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef bool type;
};
}
template <typename Seq, typename F>
- inline bool
+ inline typename
+ result_of::all<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
all(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
{
return
@@ -40,7 +48,7 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Seq, typename F>
- inline bool
+ inline typename result_of::all<Seq&, F const&>::type
all(Seq& seq, F const& f)
{
return
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,7 @@
#include <boost/fusion/algorithm/query/all.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -39,15 +40,22 @@
namespace result_of
{
- template <typename Seq, typename F>
+ template <typename Seq, typename>
struct any
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef bool type;
};
}
template <typename Seq, typename F>
- inline bool
+ inline typename
+ result_of::any<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
any(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
{
return !fusion::all(
@@ -57,7 +65,7 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Seq, typename F>
- inline bool
+ inline typename result_of::any<Seq&,F const&>::type
any(Seq& seq, F const& f)
{
return !fusion::all(seq,detail::any_helper<F const&>(f));
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/algorithm/query/count_if.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/algorithm/query/detail/count.hpp>
@@ -18,15 +19,22 @@
{
namespace result_of
{
- template <typename Seq, typename F>
+ template <typename Seq, typename>
struct count
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef int type;
};
}
template <typename Seq, typename T>
- inline int
+ inline typename
+ result_of::count<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(T)
+ >::type
count(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(T) x)
{
return fusion::count_if(
@@ -36,7 +44,7 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Seq, typename T>
- inline int
+ inline typename result_of::count<Seq&, T const&>::type
count(Seq& seq, T const& x)
{
return fusion::count_if(seq,detail::count_helper<T const&>(x));
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/algorithm/iteration/fold.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -38,15 +39,22 @@
namespace result_of
{
- template <typename Seq, typename F>
+ template <typename Seq, typename>
struct count_if
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef int type;
};
}
template <typename Seq, typename F>
- inline int
+ inline typename
+ result_of::count_if<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
count_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
{
return fold(BOOST_FUSION_FORWARD(Seq,seq),
@@ -56,7 +64,7 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Seq, typename F>
- inline int
+ inline typename result_of::count_if<Seq&,F const&>::type
count_if(Seq& seq, F const& f)
{
return fold(seq,
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,13 +11,12 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/type_traits/is_same.hpp>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
@@ -28,6 +27,9 @@
template <typename Seq, typename T>
struct find
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
detail::static_seq_find_if<
typename begin<Seq>::type
@@ -54,15 +56,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename T, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<
- is_const<Seq>
- , result_of::find<Seq&, T>
- >::type const
-#else
- inline typename result_of::find<Seq&, T>::type const
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::find<,Seq,&, T>) const
find(Seq& seq)
{
return result_of::find<Seq&, T>::filter::call(seq);
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,15 +12,13 @@
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
#include <boost/mpl/quote.hpp>
#include <boost/mpl/lambda.hpp>
#include <boost/mpl/bind.hpp>
#include <boost/mpl/placeholders.hpp>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
@@ -31,6 +29,9 @@
template <typename Seq, typename Pred>
struct find_if
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
detail::static_find_if<
typename begin<Seq>::type
@@ -59,15 +60,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Pred, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<
- is_const<Seq>
- , result_of::find_if<Seq&, Pred>
- >::type const
-#else
- inline typename result_of::find_if<Seq&, Pred>::type const
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::find_if<,Seq,&,Pred>)
find_if(Seq& seq)
{
return result_of::find_if<Seq&, Pred>::gen::call(fusion::begin(seq));
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,11 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/key_of.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
#include <boost/type_traits/is_same.hpp>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
@@ -27,6 +26,9 @@
template <typename Seq, typename T>
struct find_key
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
detail::static_seq_find_if<
typename begin<Seq>::type
@@ -53,15 +55,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename T, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<
- is_const<Seq>
- , result_of::find_key<Seq&, T>
- >::type const
-#else
- inline typename result_of::find_key<Seq&, T>::type const
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::find_key<,Seq,&, T>) const
find_key(Seq& seq)
{
return result_of::find_key<Seq&, T>::filter::call(seq);
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,8 @@
#define BOOST_FUSION_ALGORITHM_QUERY_NONE_HPP
#include <boost/fusion/algorithm/query/any.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
namespace boost { namespace fusion
{
@@ -18,12 +20,19 @@
template <typename Seq, typename F>
struct none
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef bool type;
};
}
template <typename Seq, typename F>
- inline bool
+ inline typename
+ result_of::none<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
none(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
{
return !fusion::any(
@@ -33,7 +42,7 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Seq, typename F>
- inline bool
+ inline typename result_of::none<Seq&, F const&>::type
none(Seq& seq, F const& f)
{
return !fusion::any(seq,f);
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,10 @@
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_HPP
#include <boost/fusion/algorithm/transformation/clear.hpp>
-#include <boost/fusion/algorithm/transformation/erase.hpp>
#include <boost/fusion/algorithm/transformation/erase_key.hpp>
-#include <boost/fusion/algorithm/transformation/filter.hpp>
+#include <boost/fusion/algorithm/transformation/erase.hpp>
#include <boost/fusion/algorithm/transformation/filter_if.hpp>
+#include <boost/fusion/algorithm/transformation/filter.hpp>
#include <boost/fusion/algorithm/transformation/insert_range.hpp>
#include <boost/fusion/algorithm/transformation/insert.hpp>
#include <boost/fusion/algorithm/transformation/join.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -17,6 +17,7 @@
#include <boost/fusion/support/is_view.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -30,6 +31,9 @@
template <typename Seq>
struct clear
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+
#ifdef BOOST_NO_VARIADIC_TEMPLATES
typedef vector0<> vec;
#else
@@ -40,10 +44,7 @@
mpl::eval_if<
traits::is_view<Seq>
, mpl::identity<vec>
- , result_of::convert<
- typename traits::tag_of<Seq>::type
- , vec
- >
+ , convert<typename traits::tag_of<Seq>::type, vec>
>::type
type;
};
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,79 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HPP
+
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/view/detail/view_storage.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/ref.hpp>
+
+#include <boost/mpl/bool.hpp>
+
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp>
+
+//TODO: test
+
+namespace boost { namespace fusion
+{
+ struct fusion_sequence_tag;
+
+ namespace detail
+ {
+ template <typename Seq, typename Pred>
+ struct filter_key_view
+ : sequence_base<filter_key_view<Seq, Pred> >
+ {
+ typedef view_storage<Seq> storage_type;
+ typedef typename storage_type::type seq_type;
+ typedef Pred pred_type;
+
+ typedef associative_sequence_tag category;
+ typedef filter_key_view_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::true_ is_view;
+
+#define FILTER_KEY_VIEW_CTOR(COMBINATION,_)\
+ template<typename OtherSeq>\
+ filter_key_view(filter_key_view<OtherSeq,Pred> COMBINATION view)\
+ : seq(static_cast<filter_key_view<OtherSeq,Pred>COMBINATION>(\
+ view).seq)\
+ {}
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(FILTER_KEY_VIEW_CTOR,_)
+
+#undef FILTER_KEY_VIEW_CTOR
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ explicit
+ filter_key_view(typename storage_type::call_param seq)
+ : seq(seq)
+ {}
+#else
+ template<typename OtherSeq>
+ explicit
+ filter_key_view(OtherSeq&& seq)
+ : seq(std::forward<OtherSeq>(seq))
+ {}
+#endif
+
+ template<typename OtherFilterKeyView>
+ filter_key_view&
+ operator=(BOOST_FUSION_R_ELSE_CLREF(OtherFilterKeyView) other_view)
+ {
+ seq=BOOST_FUSION_FORWARD(OtherFilterKeyView,other_view).seq;
+ return *this;
+ }
+
+ detail::view_storage<Seq> seq;
+ };
+ }
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,41 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_AT_KEY_IMPL_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_AT_KEY_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct at_key_impl;
+
+ template <>
+ struct at_key_impl<detail::filter_key_view_tag>
+ {
+ template <typename SeqRef,typename Key>
+ struct apply
+ {
+ typedef typename
+ result_of::at_key<
+ typename detail::forward_as<
+ SeqRef
+ , typename detail::remove_reference<SeqRef>::type_seq_type
+ >::type
+ , Key
+ >::type
+ type;
+
+ static type
+ call(SeqRef seq)
+ {
+ return at_key<Key>(seq.seq.get());
+ }
+ };
+ };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,14 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_FILTER_KEY_VIEW_FWD_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_FILTER_KEY_VIEW_FWD_HPP
+
+namespace boost { namespace fusion { namespace detail
+{
+ struct filter_key_view_tag;
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,40 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HAS_KEY_IMPL_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HAS_KEY_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct has_key;
+
+ template <>
+ struct has_key<detail::filter_key_view_tag>
+ {
+ template <typename SeqRef,typename Key>
+ struct apply
+ {
+ typedef typename detail::remove_reference<SeqRef>::type seq;
+
+ typedef typename
+ mpl::eval_if<
+ mpl::apply1<typename seq::pred_type,Key>
+ , mpl::identity<mpl::false_>
+ , result_of::has_key<typename seq::storage_type,Key>
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,32 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_VALUE_AT_KEY_IMPL_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_VALUE_AT_KEY_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct value_at_key;
+
+ template <>
+ struct value_at_key<detail::filter_key_view_tag>
+ {
+ template <typename SeqRef,typename Key>
+ struct apply
+ {
+ typedef typename
+ result_of::value_at_key<
+ typename detail::remove_reference<SeqRef>::type_seq_type
+ , Key
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/is_in_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/is_in_seq.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,54 @@
+// Copyright Christopher Schmidt 2009.
+// 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_SUPPORT_DETAIL_IS_IN_SEQ_HPP
+#define BOOST_FUSION_SUPPORT_DETAIL_IS_IN_SEQ_HPP
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/begin.hpp>
+# include <boost/fusion/sequence/intrinsic/end.hpp>
+# include <boost/fusion/iterator/next.hpp>
+# include <boost/fusion/iterator/next.hpp>
+# include <boost/fusion/iterator/equal_to.hpp>
+
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/eval_if.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename It, typename Begin,typename End>
+ struct next_is_in_range;
+
+ template<typename It, typename Begin,typename End>
+ struct is_in_range
+ : mpl::eval_if<
+ result_of::equal_to<It,Begin>
+ , mpl::identity<mpl::true_>
+ , mpl::eval_if<
+ result_of::equal_to<Begin,End>
+ , mpl::identity<mpl::false_>
+ , next_is_in_range<It,Begin,End>
+ >
+ >::type
+ {};
+
+ template<typename It, typename Begin,typename End>
+ struct next_is_in_range
+ : is_in_range<It,typename result_of::next<Begin>::type,End>
+ {};
+
+ template<typename It, typename Seq>
+ struct is_in_seq
+ : is_in_range<
+ It
+ , typename result_of::begin<Seq>::type
+ , typename result_of::end<Seq>::type
+ >
+ {};
+}}}
+
+#endif
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,12 @@
#include <boost/fusion/view/zip_view.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/template.hpp>
+#include <boost/fusion/support/assert.hpp>
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#endif
namespace boost { namespace fusion
{
@@ -37,6 +43,15 @@
struct zip
EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(FUSION_MAX_ZIP_SEQUENCES,N)
{
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERS
+#define BOOST_FUSION_IS_FORWARD_ASSERT(Z,N,_)\
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<BOOST_PP_CAT(T,N)>));
+
+ BOOST_PP_REPEAT(N,BOOST_FUSION_IS_FORWARD_ASSERT,_)
+
+#undef BOOST_FUSION_IS_FORWARD_ASSERT
+#endif
+
typedef
zip_view<
typename result_of::vector_tie<
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,11 @@
#include <boost/fusion/container/generation/vector_tie.hpp>
#include <boost/fusion/view/zip_view.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/mpl/and.hpp>
+#endif
namespace boost { namespace fusion {
@@ -18,6 +23,9 @@
template<typename... Seqs>
struct zip
{
+ //TODO variadic template to fixed length macro!!!
+ //BOOST_FUSION_MPL_ASSERT((mpl::and_<traits::is_forward<Seqs>...>));
+
typedef
zip_view<typename result_of::vector_tie<Seqs...>::type>
type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,12 +8,15 @@
#ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_ERASE_HPP
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_ERASE_HPP
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/view/joint_view/joint_view.hpp>
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/algorithm/transformation/detail/is_in_seq.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
@@ -69,13 +72,16 @@
>
struct erase
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef typename begin<Seq>::type seq_first_type;
typedef typename end<Seq>::type seq_last_type;
- //TODO cschmidt: !
- //BOOST_FUSION_STATIC_ASSERT(
- // (!equal_to<seq_first_type, seq_last_type>::value),
- // "sequence empty");
+ BOOST_FUSION_MPL_ASSERT(
+ (detail::is_in_range<First,seq_first_type,seq_last_type>));
+ BOOST_FUSION_MPL_ASSERT(
+ (detail::is_in_range<Last,First,seq_last_type>));
typedef
iterator_range<
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,8 +10,20 @@
#include <boost/fusion/algorithm/query/find_key.hpp>
#include <boost/fusion/algorithm/transformation/erase.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#endif
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view.hpp>
+
+//TODO doc singular?!
namespace boost { namespace fusion
{
namespace result_of
@@ -19,33 +31,63 @@
template <typename Seq, typename Key>
struct erase_key
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ BOOST_FUSION_MPL_ASSERT((has_key<Seq,Key>));
+
typedef typename
- erase<
- Seq
- , typename find_key<
- typename detail::add_lref<Seq>::type
- , Key
- >::type
+ mpl::eval_if<
+ traits::is_forward<Seq>
+ , erase<
+ Seq
+ , typename find_key<
+ typename detail::add_lref<Seq>::type
+ , Key
+ >::type
+ >
+ , mpl::identity<
+ detail::filter_key_view<Seq,is_same<mpl::_1,Key> >
+ >
>::type
type;
+
+ static type
+ call_impl(Seq seq,mpl::true_ /*is_forward*/)
+ {
+ return fusion::erase(seq,fusion::find_key<Key>(seq));
+ }
+
+ static type
+ call_impl(Seq seq,mpl::false_ /*is_forward*/)
+ {
+ return type(seq);
+ }
+
+ static type
+ call(Seq seq)
+ {
+ return call_impl(seq,typename traits::is_forward<Seq>::type());
+ }
};
}
- //TODO test const
template <typename Key, typename Seq>
inline typename
result_of::erase_key<BOOST_FUSION_R_ELSE_CLREF(Seq), Key>::type
erase_key(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
{
- return erase(BOOST_FUSION_FORWARD(Seq,seq),find_key<Key>(seq));
+ return
+ result_of::erase_key<BOOST_FUSION_R_ELSE_CLREF(Seq), Key>::call(
+ seq);
}
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Key, typename Seq>
- inline typename result_of::erase_key<Seq&, Key>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::erase_key<,Seq,&, Key>)
erase_key(Seq& seq)
{
- return erase(seq,find_key<Key>(seq));
+ return result_of::erase_key<Seq&, Key>::call(seq);
}
#endif
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,8 +9,10 @@
#ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_FILTER_HPP
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_FILTER_HPP
-#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/algorithm/transformation/filter_if.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -21,8 +23,10 @@
{
template <typename Seq, typename T>
struct filter
+ : filter_if<Seq, is_same<mpl::_1, T> >
{
- typedef filter_view<Seq, is_same<mpl::_1, T> > type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
};
}
@@ -30,18 +34,16 @@
inline typename result_of::filter<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
filter(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
{
- return typename
- result_of::filter<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type(
- BOOST_FUSION_FORWARD(Seq,seq));
+ return filter_if<is_same<mpl::_1, T> >(BOOST_FUSION_FORWARD(Seq,seq));
}
- //TODO!!!
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename T, typename Seq>
- inline typename result_of::filter<Seq&, T>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::filter<,Seq,&, T>)
filter(Seq& seq)
{
- return typename result_of::filter<Seq&, T>::type(seq);
+ return filter_if<is_same<mpl::_1, T> >(seq);
}
#endif
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,9 @@
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_FILTER_IF_HPP
#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
namespace boost { namespace fusion
{
@@ -17,6 +20,9 @@
template <typename Seq, typename Pred>
struct filter_if
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef filter_view<Seq, Pred> type;
};
}
@@ -33,7 +39,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Pred, typename Seq>
- inline typename result_of::filter_if<Seq&, Pred>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::filter_if<,Seq,&, Pred>)
filter_if(Seq& seq)
{
return typename result_of::filter_if<Seq&, Pred>::type(seq);
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
#include <boost/fusion/view/single_view/single_view.hpp>
#include <boost/fusion/algorithm/transformation/insert_range.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/algorithm/transformation/detail/is_in_seq.hpp>
namespace boost { namespace fusion
{
@@ -21,9 +23,14 @@
: insert_range<
Seq
, Pos
- , single_view<typename detail::as_fusion_element<T>::type>
+ , BOOST_FUSION_R_ELSE_CLREF(
+ single_view<typename detail::as_fusion_element<T>::type>)
>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((detail::is_in_seq<Pos, Seq>));
+ };
}
template <typename Seq, typename Pos, typename T>
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,6 +14,8 @@
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/algorithm/transformation/detail/is_in_seq.hpp>
#include <boost/preprocessor/empty.hpp>
@@ -24,6 +26,12 @@
template <typename Seq, typename Pos, typename Range>
struct insert_range
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((detail::is_in_seq<Pos, Seq>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Range>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Range>));
+
typedef
iterator_range<
typename begin<Seq>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,8 @@
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_JOIN_HPP
#include <boost/fusion/view/joint_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/preprocessor/empty.hpp>
@@ -17,29 +19,34 @@
namespace result_of
{
- template<typename Lhs, typename Rhs>
+ template<typename Seq1, typename Seq2>
struct join
{
- typedef joint_view<Lhs,Rhs> type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
+ typedef joint_view<Seq1,Seq2> type;
};
}
-#define BOOST_FUSION_JOIN(LHS_CV_REF_MODIFIER,RHS_CV_REF_MODIFIER)\
- template<typename Lhs, typename Rhs>\
+#define BOOST_FUSION_JOIN(SEQ1_CV_REF_MODIFIER,SEQ2_CV_REF_MODIFIER)\
+ template<typename Seq1, typename Seq2>\
inline typename\
result_of::join<\
- Lhs LHS_CV_REF_MODIFIER\
- , Rhs RHS_CV_REF_MODIFIER\
+ Seq1 SEQ1_CV_REF_MODIFIER\
+ , Seq2 SEQ2_CV_REF_MODIFIER\
>::type\
- join(Lhs LHS_CV_REF_MODIFIER lhs,\
- Rhs RHS_CV_REF_MODIFIER rhs)\
+ join(Seq1 SEQ1_CV_REF_MODIFIER seq1,\
+ Seq2 SEQ2_CV_REF_MODIFIER seq2)\
{\
return typename\
result_of::join<\
- Lhs LHS_CV_REF_MODIFIER\
- , Rhs RHS_CV_REF_MODIFIER\
- >::type(BOOST_FUSION_FORWARD(Lhs LHS_CV_REF_MODIFIER,lhs)\
- , BOOST_FUSION_FORWARD(Rhs RHS_CV_REF_MODIFIER,rhs));\
+ Seq1 SEQ1_CV_REF_MODIFIER\
+ , Seq2 SEQ2_CV_REF_MODIFIER\
+ >::type(BOOST_FUSION_FORWARD(Seq1 SEQ1_CV_REF_MODIFIER,seq1)\
+ , BOOST_FUSION_FORWARD(Seq2 SEQ2_CV_REF_MODIFIER,seq2));\
}
BOOST_FUSION_JOIN(
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,15 @@
#ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_BACK_HPP
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_BACK_HPP
-#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -20,6 +25,10 @@
template <typename Seq>
struct pop_back
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((size<Seq>));
+
typedef
iterator_range<
typename begin<Seq>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,15 @@
#ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_FRONT_HPP
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_FRONT_HPP
-#include <boost/fusion/view/iterator_range/iterator_range.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -20,6 +25,10 @@
template <typename Seq>
struct pop_front
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((size<Seq>));
+
typedef
iterator_range<
typename next<typename begin<Seq>::type>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
#include <boost/fusion/view/joint_view/joint_view.hpp>
#include <boost/fusion/view/single_view/single_view.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -19,6 +21,9 @@
template <typename Seq, typename T>
struct push_back
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
joint_view<
Seq
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
#include <boost/fusion/view/joint_view/joint_view.hpp>
#include <boost/fusion/view/single_view/single_view.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -19,6 +21,9 @@
template <typename Seq, typename T>
struct push_front
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
joint_view<
single_view<typename detail::as_fusion_element<T>::type>
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,10 @@
#ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_REMOVE_HPP
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_REMOVE_HPP
-#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/algorithm/transformation/remove_if.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
#include <boost/mpl/not.hpp>
#include <boost/mpl/placeholders.hpp>
@@ -20,10 +23,10 @@
{
template <typename Seq, typename T>
struct remove
+ : remove_if<Seq, is_same<mpl::_1, T> >
{
- typedef
- filter_view<Seq, mpl::not_<is_same<mpl::_1, T> > >
- type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
};
}
@@ -31,17 +34,16 @@
inline typename result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
remove(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
{
- return typename
- result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type(
- BOOST_FUSION_FORWARD(Seq,seq));
+ return remove_if<is_same<mpl::_1, T> >(BOOST_FUSION_FORWARD(Seq,seq));
}
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename T, typename Seq>
- inline typename result_of::remove<Seq&, T>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::remove<,Seq,&, T>)
remove_if(Seq& seq)
{
- return typename result_of::remove<Seq&, T>::type(seq);
+ return remove_if<is_same<mpl::_1, T> >(seq);
}
#endif
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,10 @@
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_REMOVE_IF_HPP
#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
+
#include <boost/mpl/not.hpp>
namespace boost { namespace fusion
@@ -18,9 +22,10 @@
template <typename Seq, typename Pred>
struct remove_if
{
- typedef
- filter_view<Seq, mpl::not_<Pred> >
- type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
+ typedef filter_view<Seq, mpl::not_<Pred> > type;
};
}
@@ -36,7 +41,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename Pred, typename Seq>
- inline typename result_of::remove_if<Seq&, Pred>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::remove_if<,Seq,&, Pred>)
remove_if(Seq& seq)
{
return typename result_of::remove_if<Seq&, Pred>::type(seq);
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/algorithm/transformation/replace_if.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
namespace boost { namespace fusion
@@ -55,6 +56,9 @@
template <typename Seq, typename T>
struct replace
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
detail::replace_helper<
typename detail::as_fusion_element<T>::type
@@ -67,7 +71,6 @@
};
}
- //TODO cschmidt: Assert compatibility Old-/NewValue!
template <typename Seq, typename OldValue, typename NewValue>
inline typename
result_of::replace<
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/view/transform_view/transform_view.hpp>
#include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
namespace boost { namespace fusion
@@ -20,6 +21,9 @@
template <typename Seq, typename F, typename NewValue>
struct replace_if
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef
detail::replace_if_helper<
typename detail::as_fusion_element<F>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_REVERSE_HPP
#include <boost/fusion/view/reverse_view/reverse_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -17,6 +19,9 @@
template <typename Seq>
struct reverse
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef reverse_view<Seq> type;
};
}
@@ -25,7 +30,8 @@
inline typename result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
reverse(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
{
- return typename result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
+ return typename
+ result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
BOOST_FUSION_FORWARD(Seq,seq));
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_TRANSFORM_HPP
#include <boost/fusion/view/transform_view/transform_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/preprocessor/empty.hpp>
@@ -21,6 +23,11 @@
template <typename Seq1, typename Seq2, typename F = void_>
struct transform
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
typedef transform_view<Seq1,Seq2,F> type;
};
@@ -31,6 +38,9 @@
struct transform<Seq, F>
#endif
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef transform_view<Seq, F> type;
};
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,10 +11,8 @@
#include <boost/config.hpp>
-#if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# ifndef FUSION_MAX_ZIP_SEQUENCES
-# define FUSION_MAX_ZIP_SEQUENCES 10
-# endif
+#if (defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)) && !defined(FUSION_MAX_ZIP_SEQUENCES)
+# define FUSION_MAX_ZIP_SEQUENCES 10
#endif
#ifdef BOOST_NO_VARIADIC_TEMPLATES
Modified: sandbox/SOC/2009/fusion/boost/fusion/container.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,10 @@
#ifndef BOOST_FUSION_CONTAINER_HPP
#define BOOST_FUSION_CONTAINER_HPP
-#include <boost/fusion/container/vector.hpp>
+#include <boost/fusion/container/generation.hpp>
#include <boost/fusion/container/list.hpp>
#include <boost/fusion/container/map.hpp>
#include <boost/fusion/container/set.hpp>
-#include <boost/fusion/container/generation.hpp>
+#include <boost/fusion/container/vector.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,14 +8,16 @@
#ifndef BOOST_FUSION_CONTAINER_GENERATION_HPP
#define BOOST_FUSION_CONTAINER_GENERATION_HPP
-#include <boost/fusion/container/generation/ignore.hpp>
#include <boost/fusion/container/generation/cons_tie.hpp>
+#include <boost/fusion/container/generation/ignore.hpp>
#include <boost/fusion/container/generation/list_tie.hpp>
#include <boost/fusion/container/generation/make_cons.hpp>
#include <boost/fusion/container/generation/make_list.hpp>
#include <boost/fusion/container/generation/make_map.hpp>
+#include <boost/fusion/container/generation/make_set.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
+#include <boost/fusion/container/generation/map_tie.hpp>
+#include <boost/fusion/container/generation/pair_tie.hpp>
#include <boost/fusion/container/generation/vector_tie.hpp>
-#include <boost/fusion/container/generation/make_set.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_CONTAINER_LIST_HPP
#define BOOST_FUSION_CONTAINER_LIST_HPP
+#include <boost/fusion/container/list/limits.hpp>
#include <boost/fusion/container/list/cons.hpp>
#include <boost/fusion/container/list/list.hpp>
#include <boost/fusion/container/list/convert.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,16 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/front.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/empty.hpp>
+#endif
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/assign_tags.hpp>
#include <boost/fusion/support/sequence_assign.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/bool.hpp>
@@ -64,7 +68,15 @@
template<typename SeqAssign>
nil(BOOST_FUSION_R_ELSE_CLREF(SeqAssign))
{
- //TODO cschmidt: assert!
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::empty<typename SeqAssign::seq_type>));
+#else
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::empty<
+ typename detail::remove_reference<SeqAssign>::type::seq_type
+ >));
+#endif
}
template<typename It>
@@ -75,7 +87,7 @@
nil&
operator=(BOOST_FUSION_R_ELSE_CLREF(Seq))
{
- //TODO cschmidt: assert!
+ BOOST_FUSION_MPL_ASSERT((result_of::empty<Seq>));
return *this;
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_AT_IMPL_HPP
#define BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_AT_IMPL_HPP
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
#include <boost/mpl/int.hpp>
namespace boost { namespace fusion
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_BEGIN_IMPL_HPP
#define BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
@@ -23,7 +25,7 @@
typedef
basic_iterator<
list_iterator_tag
- , forward_traversal_tag
+ , bidirectional_traversal_tag
, SeqRef
, 0
>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_END_IMPL_HPP
#define BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_END_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
namespace boost { namespace fusion { namespace extension
@@ -25,7 +26,7 @@
typedef
basic_iterator<
list_iterator_tag
- , forward_traversal_tag
+ , bidirectional_traversal_tag
, SeqRef
, result_of::size<SeqRef>::type::value
>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,6 @@
#include <boost/fusion/container/list/list_fwd.hpp>
#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/ref.hpp>
@@ -31,7 +30,7 @@
struct list
: sequence_base<list<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)> >
{
- typedef forward_traversal_tag category;
+ typedef bidirectional_traversal_tag category;
typedef list_tag fusion_tag;
typedef fusion_sequence_tag tag;
typedef mpl::false_ is_view;
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -16,6 +16,7 @@
struct list_tag;
struct list_iterator_tag;
struct forward_traversal_tag;
+ struct bidirectional_traversal_tag;
VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_LIST_SIZE)
struct list;
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
#ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
#define BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
#ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
#define BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,6 @@
#include <boost/fusion/container/map/map_fwd.hpp>
#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/support/pair.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/ref.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,7 +18,7 @@
struct map_iterator_tag;
struct map_category
- : forward_traversal_tag, associative_sequence_tag
+ : bidirectional_traversal_tag, associative_sequence_tag
{};
VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_MAP_SIZE)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_BEGIN_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_END_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_END_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,6 @@
#include <boost/fusion/container/set/set_fwd.hpp>
#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/ref.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,7 +18,7 @@
struct set_iterator_tag;
struct set_category
- : forward_traversal_tag, associative_sequence_tag
+ : bidirectional_traversal_tag, associative_sequence_tag
{};
VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_SET_SIZE)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_BEGIN_IMPL_HPP
#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_BEGIN_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_END_IMPL_HPP
#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_END_IMPL_HPP
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
namespace boost { namespace fusion { namespace extension
{
template <typename Tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,7 +6,6 @@
#ifndef BOOST_PP_IS_ITERATING
# include <boost/fusion/container/vector/vector_fwd.hpp>
# include <boost/fusion/sequence/intrinsic/begin.hpp>
-# include <boost/fusion/iterator/basic_iterator.hpp>
# include <boost/fusion/iterator/deref.hpp>
# include <boost/fusion/iterator/next.hpp>
# include <boost/fusion/iterator/advance_c.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,6 +14,7 @@
#include <boost/fusion/support/sequence_assign.hpp>
#include <boost/fusion/support/assign_tags.hpp>
#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/int.hpp>
@@ -151,13 +152,19 @@
vector(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... arguments)
: base(detail::assign_directly(),
BOOST_FUSION_FORWARD(OtherArguments,arguments)...)
- {}
+ {
+ BOOST_FUSION_STATIC_ASSERT((
+ sizeof...(Elements)==sizeof...(OtherArguments)));
+ }
#define VECTOR_ASSIGN_CTOR(COMBINATION,_)\
template<typename SeqRef>\
vector(support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
: base(detail::assign_by_deref(),fusion::begin(seq_assign.get()))\
- {}
+ {\
+ BOOST_FUSION_STATIC_ASSERT((\
+ sizeof...(Elements)==result_of::size<SeqRef>::value));\
+ }
BOOST_FUSION_ALL_CTOR_COMBINATIONS(VECTOR_ASSIGN_CTOR,_);
@@ -176,6 +183,9 @@
vector&
operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
{
+ BOOST_FUSION_STATIC_ASSERT((
+ sizeof...(Elements)==result_of::size<Seq>::value));
+
static_cast<base*>(this)->assign(
fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
return *this;
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,7 +12,6 @@
# include <boost/fusion/container/vector/detail/pp/vector.hpp>
#else
# include <boost/fusion/container/vector/vector_fwd.hpp>
-# include <boost/fusion/iterator/basic_iterator.hpp>
# include <boost/fusion/support/ref.hpp>
# include <boost/fusion/container/vector/detail/at_impl.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,11 @@
#ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_HPP
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_HPP
-#include <boost/fusion/functional/adapter/fused.hpp>
-#include <boost/fusion/functional/adapter/fused_procedure.hpp>
#include <boost/fusion/functional/adapter/fused_function_object.hpp>
-#include <boost/fusion/functional/adapter/unfused.hpp>
+#include <boost/fusion/functional/adapter/fused_procedure.hpp>
+#include <boost/fusion/functional/adapter/fused.hpp>
+#include <boost/fusion/functional/adapter/limits.hpp>
#include <boost/fusion/functional/adapter/unfused_typed.hpp>
+#include <boost/fusion/functional/adapter/unfused.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,9 +9,9 @@
#ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_HPP
#define BOOST_FUSION_FUNCTIONAL_GENERATION_HPP
-#include <boost/fusion/functional/generation/make_fused.hpp>
-#include <boost/fusion/functional/generation/make_fused_procedure.hpp>
#include <boost/fusion/functional/generation/make_fused_function_object.hpp>
+#include <boost/fusion/functional/generation/make_fused_procedure.hpp>
+#include <boost/fusion/functional/generation/make_fused.hpp>
#include <boost/fusion/functional/generation/make_unfused.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,8 +9,9 @@
#ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_HPP
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_HPP
-#include <boost/fusion/functional/invocation/invoke.hpp>
-#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
#include <boost/fusion/functional/invocation/invoke_function_object.hpp>
+#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
+#include <boost/fusion/functional/invocation/invoke.hpp>
+#include <boost/fusion/functional/invocation/limits.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,14 +8,18 @@
#ifndef BOOST_FUSION_ITERATOR_HPP
#define BOOST_FUSION_ITERATOR_HPP
-#include <boost/fusion/iterator/iterator_facade.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
+#include <boost/fusion/iterator/advance_c.hpp>
#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/basic_iterator.hpp>
+#include <boost/fusion/iterator/deref_data.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/distance.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/fusion/iterator/key_of.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/value_of_data.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -22,7 +22,6 @@
template <typename Tag>
struct advance_impl
{
- // default implementation
template <typename ItRef, typename N>
struct apply
: mpl::if_c<
@@ -30,11 +29,7 @@
, advance_detail::forward<ItRef, N::value>
, advance_detail::backward<ItRef, N::value>
>::type
- {
-// BOOST_FUSION_MPL_ASSERT_NOT(
-// traits::is_random_access<ItRef>,
-// "default implementation not available for random access iterators");
- };
+ {};
};
template <>
@@ -57,13 +52,26 @@
typename detail::add_lref<It>::type
, mpl::int_<N>
>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ BOOST_FUSION_STATIC_ASSERT((
+ N>=0 ||
+ traits::is_bidirectional<It>::value));
+
+ };
template <typename It, typename N>
struct advance
: extension::advance_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type, N>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ BOOST_FUSION_STATIC_ASSERT((
+ N::value>=0 ||
+ traits::is_bidirectional<It>::value));
+ };
}
template <int N, typename It>
@@ -79,7 +87,6 @@
{
return result_of::advance<It const&, N>::call(it);
}
-
}}
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,7 @@
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/equal_to.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -37,7 +38,10 @@
struct deref
: extension::deref_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ };
}
template <typename It>
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -37,7 +38,10 @@
struct deref_data
: extension::deref_data_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<It>));
+ };
}
template <typename It>
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -15,9 +15,7 @@
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
-
- // Special tags:
- struct iterator_facade_tag; // iterator facade tag
+ struct iterator_facade_tag;
namespace extension
{
@@ -28,14 +26,7 @@
template <typename FirstRef, typename LastRef>
struct apply
: distance_detail::linear_distance<FirstRef, LastRef>
- {
- /*BOOST_FUSION_MPL_ASSERT_NOT(
- traits::is_random_access<FirstRef>,
- "default implementation not available for random access iterators");
- BOOST_FUSION_MPL_ASSERT_NOT(
- traits::is_random_access<FirstRef>,
- "default implementation not available for random access iterators");*/
- };
+ {};
};
template <>
@@ -59,6 +50,10 @@
, typename detail::add_lref<Last>::type
>::type
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<First>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<First>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<Last>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Last>));
};
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,10 @@
#ifndef BOOST_FUSION_ITERATOR_EQUAL_TO_HPP
#define BOOST_FUSION_ITERATOR_EQUAL_TO_HPP
-#include <boost/type_traits/is_same.hpp>
#include <boost/fusion/support/tag_of.hpp>
-#include <boost/type_traits/add_const.hpp>
#include <boost/fusion/support/is_iterator.hpp>
+#include <boost/fusion/support/assert.hpp>
+
#include <boost/mpl/and.hpp>
#include <boost/utility/enable_if.hpp>
@@ -44,7 +44,12 @@
typename detail::add_lref<It1>::type
, typename detail::add_lref<It2>::type
>::type
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It1>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It2>));
+ };
}
namespace iterator_operators
@@ -52,7 +57,7 @@
template <typename It1, typename It2>
inline typename
enable_if<
- mpl::and_<is_fusion_iterator<It1>, is_fusion_iterator<It2> >
+ mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
, bool
>::type
operator==(It1 const&, It2 const&)
@@ -63,7 +68,7 @@
template <typename It1, typename It2>
inline typename
enable_if<
- mpl::and_<is_fusion_iterator<It1>, is_fusion_iterator<It2> >
+ mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
, bool
>::type
operator!=(It1 const&, It1 const&)
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
#define BOOST_FUSION_ITERATOR_KEY_OF_HPP
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -36,7 +37,10 @@
struct key_of
: extension::key_of_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<It>));
+ };
}
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
#define BOOST_FUSION_ITERATOR_NEXT_HPP
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -35,7 +36,10 @@
struct next
: extension::next_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ };
}
template <typename It>
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
#define BOOST_FUSION_ITERATOR_PRIOR_HPP
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -35,7 +36,10 @@
struct prior
: extension::prior_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_bidirectional<It>));
+ };
}
template <typename It>
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
#define BOOST_FUSION_ITERATOR_VALUE_OF_HPP
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -35,7 +36,10 @@
struct value_of
: extension::value_of_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ };
}
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
#define BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -36,7 +37,10 @@
struct value_of_data
: extension::value_of_data_impl<typename traits::tag_of<It>::type>::
template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<It>));
+ };
}
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,18 +8,21 @@
#ifndef BOOST_FUSION_MPL_HPP
#define BOOST_FUSION_MPL_HPP
+#include <boost/fusion/support/category_of.hpp>
+
#include <boost/fusion/mpl/at.hpp>
#include <boost/fusion/mpl/back.hpp>
#include <boost/fusion/mpl/begin.hpp>
#include <boost/fusion/mpl/clear.hpp>
#include <boost/fusion/mpl/empty.hpp>
#include <boost/fusion/mpl/end.hpp>
-#include <boost/fusion/mpl/erase.hpp>
#include <boost/fusion/mpl/erase_key.hpp>
+#include <boost/fusion/mpl/erase.hpp>
#include <boost/fusion/mpl/front.hpp>
+#include <boost/fusion/mpl/fusion_iterator.hpp>
#include <boost/fusion/mpl/has_key.hpp>
-#include <boost/fusion/mpl/insert.hpp>
#include <boost/fusion/mpl/insert_range.hpp>
+#include <boost/fusion/mpl/insert.hpp>
#include <boost/fusion/mpl/pop_back.hpp>
#include <boost/fusion/mpl/pop_front.hpp>
#include <boost/fusion/mpl/push_back.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -29,6 +29,8 @@
typedef It iterator;
};
+ //TODO deref
+
template <typename It>
struct next<fusion_iterator<It> >
{
@@ -59,7 +61,6 @@
struct distance<fusion_iterator<First>, fusion_iterator<Last> >
: fusion::result_of::distance<First, Last>
{};
-
}}
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,10 @@
#ifndef BOOST_FUSION_SEQUENCE_HPP
#define BOOST_FUSION_SEQUENCE_HPP
-#include <boost/fusion/sequence/sequence_facade.hpp>
#include <boost/fusion/sequence/comparison.hpp>
+#include <boost/fusion/sequence/convert.hpp>
#include <boost/fusion/sequence/intrinsic.hpp>
#include <boost/fusion/sequence/io.hpp>
-#include <boost/fusion/sequence/convert.hpp>
+#include <boost/fusion/sequence/sequence_facade.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,8 +8,8 @@
#ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_ENABLE_COMPARISON_HPP
#define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_ENABLE_COMPARISON_HPP
-#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/and.hpp>
@@ -18,16 +18,11 @@
namespace boost { namespace fusion { namespace detail
{
- template <typename SeqRef>
- struct is_native_fusion_sequence
- : is_base_of<sequence_root, typename detail::identity<SeqRef>::type>
- {};
-
template <typename Seq1Ref, typename Seq2Ref>
struct enable_equality
: mpl::or_<
- is_native_fusion_sequence<Seq1Ref>
- , is_native_fusion_sequence<Seq2Ref>
+ traits::is_sequence<Seq1Ref>
+ , traits::is_sequence<Seq2Ref>
>
{};
@@ -35,8 +30,8 @@
struct enable_comparison
: mpl::and_<
mpl::or_<
- is_native_fusion_sequence<Seq1Ref>
- , is_native_fusion_sequence<Seq2Ref>
+ traits::is_sequence<Seq1Ref>
+ , traits::is_sequence<Seq2Ref>
>
, mpl::equal_to<result_of::size<Seq1Ref>, result_of::size<Seq2Ref> >
>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,8 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/support/assert.hpp>
+
#include <boost/fusion/sequence/comparison/detail/equal_to.hpp>
#include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
@@ -21,6 +23,11 @@
inline bool
equal_to(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return
detail::sequence_equal_to<
Seq1 const&
@@ -40,6 +47,11 @@
>::type
operator==(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return fusion::equal_to(seq1, seq2);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
#ifdef FUSION_DIRECT_OPERATOR_USAGE
-#include <boost/fusion/sequence/comparison/detail/greater.hpp>
+# include <boost/fusion/sequence/comparison/detail/greater.hpp>
#else
-#include <boost/fusion/sequence/comparison/less.hpp>
+# include <boost/fusion/sequence/comparison/less.hpp>
#endif
namespace boost { namespace fusion
@@ -25,6 +26,11 @@
inline bool
greater(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
#ifdef FUSION_DIRECT_OPERATOR_USAGE
return
detail::sequence_greater<
@@ -46,6 +52,11 @@
>::type
operator>(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return fusion::greater(seq1, seq2);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
#ifdef FUSION_DIRECT_OPERATOR_USAGE
-#include <boost/fusion/sequence/comparison/detail/greater_equal.hpp>
+# include <boost/fusion/sequence/comparison/detail/greater_equal.hpp>
#else
-#include <boost/fusion/sequence/comparison/less.hpp>
+# include <boost/fusion/sequence/comparison/less.hpp>
#endif
namespace boost { namespace fusion
@@ -25,6 +26,11 @@
inline bool
greater_equal(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
#ifdef FUSION_DIRECT_OPERATOR_USAGE
return
detail::sequence_greater_equal<
@@ -46,6 +52,11 @@
>::type
operator>=(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return fusion::greater_equal(seq1, seq2);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/sequence/comparison/detail/less.hpp>
#include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
@@ -21,6 +22,11 @@
inline bool
less(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return
detail::sequence_less<
Seq1 const&
@@ -38,6 +44,11 @@
>::type
operator<(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return fusion::less(seq1, seq2);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
-#ifdef FUSION_DIRECT_OPERATOR_USAGE
+# ifdef FUSION_DIRECT_OPERATOR_USAGE
#include <boost/fusion/sequence/comparison/detail/less_equal.hpp>
#else
-#include <boost/fusion/sequence/comparison/less.hpp>
+# include <boost/fusion/sequence/comparison/less.hpp>
#endif
namespace boost { namespace fusion
@@ -25,6 +26,11 @@
inline bool
less_equal(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
#ifdef FUSION_DIRECT_OPERATOR_USAGE
return
detail::sequence_less_equal<
@@ -75,6 +81,11 @@
>::type
operator<=(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return fusion::less_equal(seq1, seq2);
}
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
#ifdef FUSION_DIRECT_OPERATOR_USAGE
-#include <boost/fusion/sequence/comparison/detail/not_equal_to.hpp>
+# include <boost/fusion/sequence/comparison/detail/not_equal_to.hpp>
#else
-#include <boost/fusion/sequence/comparison/equal_to.hpp>
+# include <boost/fusion/sequence/comparison/equal_to.hpp>
#endif
namespace boost { namespace fusion
@@ -25,6 +26,11 @@
inline bool
not_equal_to(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
#ifdef FUSION_DIRECT_OPERATOR_USAGE
return
detail::sequence_not_equal_to<
@@ -48,6 +54,11 @@
>::type
operator!=(Seq1 const& seq1, Seq2 const& seq2)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
return fusion::not_equal_to(seq1, seq2);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,7 +9,9 @@
#define BOOST_FUSION_SEQUENCE_CONVERT_HPP
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+//TODO doc!!!
namespace boost { namespace fusion
{
namespace extension
@@ -23,6 +25,9 @@
template <typename Tag, typename Seq>
struct convert
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef typename extension::convert_impl<Tag> gen;
typedef typename gen::
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_HPP
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/fusion/sequence/intrinsic/back.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -16,8 +18,9 @@
#include <boost/fusion/sequence/intrinsic/front.hpp>
#include <boost/fusion/sequence/intrinsic/has_key.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
-#include <boost/fusion/sequence/intrinsic/value_at.hpp>
-#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+#include <boost/fusion/sequence/intrinsic/swap.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at_c.hpp>
#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,14 +8,19 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_AT_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_AT_HPP
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/container/list/list_fwd.hpp>
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/int.hpp>
-
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/mpl/or.hpp>
+# include <boost/type_traits/is_same.hpp>
#endif
namespace boost { namespace fusion
@@ -43,12 +48,34 @@
struct at
: extension::at_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type, N>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
+ };
template <typename Seq, int N>
struct at_c
: at<Seq, mpl::int_<N> >
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N,size<Seq>::value);
+ };
}
template <typename N, typename Seq>
@@ -58,14 +85,10 @@
return result_of::at<BOOST_FUSION_R_ELSE_CLREF(Seq), N>::call(seq);
}
- //cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
#ifdef BOOST_NO_RVALUE_REFERENCES
template <typename N, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename lazy_disable_if<is_const<Seq>,result_of::at<Seq&, N> >::type
-#else
- inline typename result_of::at<Seq&, N>::type
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::at<,Seq,&,N>)
at(Seq& seq)
{
return result_of::at<Seq&, N>::call(seq);
@@ -82,12 +105,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <int N, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<is_const<Seq>,result_of::at_c<Seq&, N> >::type
-#else
- inline typename result_of::at_c<Seq&, N>::type
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::at_c<,Seq,&, N>)
at_c(Seq& seq)
{
return fusion::at<mpl::int_<N> >(seq);
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,14 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_AT_KEY_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_AT_KEY_HPP
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#endif
#include <boost/fusion/iterator/deref_data.hpp>
#include <boost/fusion/algorithm/query/find_key.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -58,7 +62,11 @@
struct at_key
: extension::at_key_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type, Key>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ BOOST_FUSION_MPL_ASSERT((has_key<Seq,Key>));
+ };
}
template <typename Key, typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,14 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_BACK_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_BACK_HPP
-#include <boost/fusion/support/ref.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/empty.hpp>
+#endif
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/iterator/prior.hpp>
#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
#include <boost/mpl/bool.hpp>
@@ -23,10 +27,12 @@
{
template <typename Seq>
struct back
- : result_of::deref<typename result_of::prior<
- typename result_of::end<Seq>::type>::type
- >
- {};
+ : deref<typename prior<typename end<Seq>::type>::type>
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT_NOT((empty<Seq>));
+ };
}
template <typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -36,7 +37,10 @@
struct begin
: extension::begin_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
}
template <typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,9 +8,10 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_EMPTY_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_EMPTY_HPP
-#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
#include <boost/mpl/bool.hpp>
@@ -25,7 +26,7 @@
{
template <typename SeqRef>
struct apply
- : mpl::bool_<(result_of::size<SeqRef>::value == 0)>
+ : mpl::bool_<!result_of::size<SeqRef>::value>
{};
};
@@ -44,8 +45,11 @@
template <typename Seq>
struct empty
: extension::empty_impl<typename traits::tag_of<Seq>::type>::
- template apply<typename detail::add_lref<Seq>::type>
- {};
+ template apply<typename detail::add_lref<Seq>::type>::type
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
}
template <typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -36,7 +37,9 @@
struct end
: extension::end_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type>
- {};
+ {
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
}
template <typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,9 +8,13 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_FRONT_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_FRONT_HPP
-#include <boost/fusion/support/ref.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/empty.hpp>
+#endif
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/bool.hpp>
@@ -22,8 +26,12 @@
{
template <typename Seq>
struct front
- : result_of::deref<typename result_of::begin<Seq>::type>
- {};
+ : deref<typename begin<Seq>::type>
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT_NOT((empty<Seq>));
+ };
}
template <typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,7 @@
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/not.hpp>
@@ -53,7 +54,10 @@
struct has_key
: extension::has_key_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type, Key>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ };
}
template <typename Key, typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/int.hpp>
@@ -45,7 +46,10 @@
struct size
: extension::size_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type>::type
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
}
template <typename Seq>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -17,6 +17,10 @@
# include <boost/fusion/sequence/intrinsic/front.hpp>
# include <boost/fusion/sequence/intrinsic/back.hpp>
#endif
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
+#include <boost/fusion/support/assert.hpp>
#include <algorithm>
@@ -42,13 +46,19 @@
template<typename Seq1, typename Seq2>
struct swap
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+ BOOST_FUSION_STATIC_ASSERT((size<Seq1>::value==size<Seq2>::value));
+
typedef void type;
};
}
#ifdef BOOST_NO_RVALUE_REFERENCES
template<typename Seq1, typename Seq2>
- void
+ typename result_of::swap<Seq1&,Seq2&>::type
swap(Seq1& seq1, Seq2& seq2)
{
for_each(zip_view<typename result_of::vector_tie<Seq1&,Seq2&>::type>(
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,19 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_HPP
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/container/list/list_fwd.hpp>
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/int.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/mpl/or.hpp>
+# include <boost/type_traits/is_same.hpp>
+#endif
namespace boost { namespace fusion
{
@@ -39,12 +48,36 @@
struct value_at
: extension::value_at_impl<typename traits::tag_of<Seq>::type>::
template apply<typename detail::add_lref<Seq>::type, N>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
+ BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
+ };
template <typename Seq, int N>
struct value_at_c
- : fusion::result_of::value_at<Seq,mpl::int_<N> >
- {};
+ : result_of::value_at<Seq,mpl::int_<N> >
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N,size<Seq>::value);
+ BOOST_FUSION_INDEX_CHECK(N,size<Seq>::value);
+ };
}
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,14 @@
#ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_KEY_HPP
#define BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_KEY_HPP
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#endif
#include <boost/fusion/iterator/value_of_data.hpp>
#include <boost/fusion/algorithm/query/find_key.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/int.hpp>
@@ -49,11 +53,15 @@
namespace result_of
{
- template <typename Seq, typename N>
+ template <typename Seq, typename Key>
struct value_at_key
: extension::value_at_key_impl<typename traits::tag_of<Seq>::type>::
- template apply<typename detail::add_lref<Seq>::type, N>
- {};
+ template apply<typename detail::add_lref<Seq>::type, Key>
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ BOOST_FUSION_MPL_ASSERT((has_key<Seq,Key>));
+ };
}
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,9 +9,11 @@
#if !defined(BOOST_IN_05042005_0120)
#define BOOST_IN_05042005_0120
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/assert.hpp>
+
#include <istream>
-#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/sequence/io/detail/in.hpp>
namespace boost { namespace fusion
@@ -20,6 +22,9 @@
inline std::istream&
in(std::istream& is, Seq& seq)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
detail::read_sequence(is, seq);
return is;
}
@@ -30,10 +35,13 @@
inline typename
enable_if<
fusion::traits::is_sequence<Seq>
- , std::istream&
+ , std::istream&
>::type
operator>>(std::istream& is, Seq& seq)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
return fusion::in(is, seq);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,20 +9,25 @@
#if !defined(BOOST_OUT_05042005_0120)
#define BOOST_OUT_05042005_0120
-#include <ostream>
-
-#include <boost/fusion/sequence/io/detail/out.hpp>
#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/or.hpp>
+#include <ostream>
+
+#include <boost/fusion/sequence/io/detail/out.hpp>
+
namespace boost { namespace fusion
{
template <typename Seq>
inline std::ostream&
out(std::ostream& os, Seq& seq)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
detail::print_sequence(os, seq);
return os;
}
@@ -37,6 +42,9 @@
>::type
operator<<(std::ostream& os, Seq const& seq)
{
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
return fusion::out(os, seq);
}
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/support.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,7 @@
#ifndef BOOST_FUSION_SUPPORT_HPP
#define BOOST_FUSION_SUPPORT_HPP
-//TODO cschmidt: is this file needed?
+//TODO cschmidt: decouple internal helper and public support classes
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/support/is_iterator.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,30 +6,95 @@
#ifndef BOOST_FUSION_SUPPORT_ASSERT_HPP
#define BOOST_FUSION_SUPPORT_ASSERT_HPP
-#include <boost/config.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/config.hpp>
-#ifdef BOOST_NO_STATIC_ASSERT
-# include <boost/mpl/assert.hpp>
-# include <boost/static_assert.hpp>
-
-# define BOOST_FUSION_MPL_ASSERT(PRED,MESSAGE) BOOST_MPL_ASSERT(PRED)
-# define BOOST_FUSION_MPL_ASSERT_NOT(PRED,MESSAGE) BOOST_MPL_ASSERT_NOT(PRED)
-# define BOOST_FUSION_MPL_ASSERT_RELATION(X,REL,Y,MESSAGE)\
- BOOST_MPL_ASSERT_RELATION(X,REL,Y)
-# define BOOST_FUSION_STATIC_ASSERT(PRED,MESSAGE) BOOST_STATIC_ASSERT(PRED)
+# ifdef BOOST_NO_STATIC_ASSERT
+# include <boost/mpl/assert.hpp>
+# include <boost/static_assert.hpp>
+
+# define BOOST_FUSION_MPL_ASSERT(PRED)\
+ BOOST_MPL_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_NOT(PRED)\
+ BOOST_MPL_ASSERT_NOT(PRED)
+# define BOOST_FUSION_STATIC_ASSERT(PRED)\
+ BOOST_STATIC_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_MSG(PRED,MESSAGE)\
+ BOOST_FUSION_MPL_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_NOT_MSG(PRED,MESSAGE)\
+ BOOST_FUSION_MPL_ASSERT_NOT(PRED)
+# define BOOST_FUSION_STATIC_ASSERT_MSG(PRED,MESSAGE)\
+ BOOST_FUSION_STATIC_ASSERT(PRED)
+# else
+# include <boost/preprocessor/stringize.hpp>
+# include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ typedef char small_type;
+ struct big_type
+ {
+ char data[1024];
+ };
+
+ template<typename Pred>
+ typename mpl::if_<Pred,small_type,big_type>::type
+ evaluate_pred(void(*)(Pred));
+}}}
+
+# define BOOST_FUSION_MPL_ASSERT(PRED)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))==\
+ sizeof(detail::small_type)\
+ , "assert failed: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_MPL_ASSERT_NOT(PRED)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))==\
+ sizeof(detail::big_type)\
+ , "assert failed: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_STATIC_ASSERT(PRED)\
+ static_assert(\
+ PRED\
+ , "assert failed: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_MPL_ASSERT_MSG(PRED,MESSAGE)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))==\
+ sizeof(detail::small_type)\
+ , MESSAGE " - assert expression: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_MPL_ASSERT_NOT_MSG(PRED,MESSAGE)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))!=\
+ , sizeof(detail::small_type)\
+ , MESSAGE " - assert expression: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_STATIC_ASSERT_MSG(PRED,MESSAGE)\
+ static_assert(\
+ PRED\
+ , MESSAGE " - assert expression: " BOOST_PP_STRINGIZE(PRED))
+# endif
#else
-# define BOOST_FUSION_MPL_ASSERT(PRED,MESSAGE)\
- static_assert(PRED::value,MESSAGE)
-# define BOOST_FUSION_MPL_ASSERT_NOT(PRED,MESSAGE)\
- static_assert(!PRED::value,MESSAGE)
-# define BOOST_FUSION_MPL_ASSERT_RELATION(X,REL,Y,MESSAGE)\
- static_assert(X REL Y,MESSAGE)
-# define BOOST_FUSION_STATIC_ASSERT(PRED,MESSAGE)\
- static_assert(PRED,MESSAGE)
+# define BOOST_FUSION_MPL_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_NOT(PRED)
+# define BOOST_FUSION_STATIC_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_MSG(PRED,MESSAGE)
+# define BOOST_FUSION_MPL_ASSERT_NOT_MSG(PRED,MESSAGE)
+# define BOOST_FUSION_STATIC_ASSERT_MSG(PRED,MESSAGE)
#endif
#define BOOST_FUSION_INDEX_CHECK(INDEX,MAX)\
- BOOST_FUSION_MPL_ASSERT_RELATION(INDEX, >=, 0, "index out of range")\
- BOOST_FUSION_MPL_ASSERT_RELATION(INDEX, <, MAX, "index out of range")
+ BOOST_FUSION_STATIC_ASSERT_MSG(\
+ INDEX >= 0 && INDEX < MAX, "index out of range")
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+//TODO ->support.hpp
+# include <boost/fusion/support/is_view.hpp>
+# include <boost/fusion/support/is_sequence.hpp>
+# include <boost/fusion/support/is_iterator.hpp>
+# include <boost/fusion/support/category_of.hpp>
+# include <boost/fusion/support/tag_of.hpp>
+#endif
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/tag_of.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/iterator_tags.hpp>
#include <boost/type_traits/is_base_of.hpp>
namespace boost { namespace fusion
@@ -22,17 +24,58 @@
: incrementable_traversal_tag
{};
+ //cschmidt: to ensure full compatibility between fusion and mpl iterators,
+ //the tags should inheritate the corresponding mpl tags.
+ //Fusion tags may be used as template arguments for iterator base classes
+ //(e.g. fusion::iterator_facade), therefore emulate the mpl tags (see
+ //(3.4.2/2) for more details.
struct forward_traversal_tag
: single_pass_traversal_tag
- {};
+ {
+ typedef mpl::forward_iterator_tag::tag tag;
+ typedef mpl::forward_iterator_tag::value_type value_type;
+ typedef forward_traversal_tag type;
+ BOOST_STATIC_CONSTANT(
+ value_type,
+ value=mpl::forward_iterator_tag::value);
+
+ operator value_type() const
+ {
+ return value;
+ }
+ };
struct bidirectional_traversal_tag
: forward_traversal_tag
- {};
+ {
+ typedef mpl::bidirectional_iterator_tag::tag tag;
+ typedef mpl::bidirectional_iterator_tag::value_type value_type;
+ typedef bidirectional_traversal_tag type;
+ BOOST_STATIC_CONSTANT(
+ value_type,
+ value=mpl::bidirectional_iterator_tag::value);
+
+ operator value_type() const
+ {
+ return value;
+ }
+ };
struct random_access_traversal_tag
: bidirectional_traversal_tag
- {};
+ {
+ typedef mpl::random_access_iterator_tag::tag tag;
+ typedef mpl::random_access_iterator_tag::value_type value_type;
+ typedef bidirectional_traversal_tag type;
+ BOOST_STATIC_CONSTANT(
+ value_type,
+ value=mpl::random_access_iterator_tag::value);
+
+ operator value_type() const
+ {
+ return value;
+ }
+ };
struct associative_sequence_tag
{};
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,9 +9,9 @@
#ifndef BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP
#define BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP
-#include <boost/fusion/support/deduce.hpp>
#include <boost/fusion/container/vector/convert.hpp>
#include <boost/fusion/view/transform_view.hpp>
+#include <boost/fusion/support/deduce.hpp>
namespace boost { namespace fusion
{
Added: sandbox/SOC/2009/fusion/boost/fusion/support/detail/workaround.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/workaround.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,29 @@
+// Copyright Christopher Schmidt 2009.
+// 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_SUPPORT_DETAIL_WORKAROUND_HPP
+#define BOOST_FUSION_SUPPORT_DETAIL_WORKAROUND_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_RVALUE_REFERENCES
+# include <boost/detail/workaround.hpp>
+
+//cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
+# if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
+# include <boost/type_traits/is_const.hpp>
+# include <boost/utility/enable_if.hpp>
+
+# define BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(PRE,ARG,ARG_MODIFIER,POST)\
+ typename lazy_disable_if<\
+ is_const<ARG>\
+ , PRE ARG ARG_MODIFIER, POST\
+ >::type
+# else
+# define BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(PRE,ARG,ARG_MODIFIER,POST)\
+ typename PRE ARG ARG_MODIFIER, POST ::type
+# endif
+#endif
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,17 +9,35 @@
#define BOOST_FUSION_SUPPORT_IS_ITERATOR_HPP
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/iterator_base.hpp>
#include <boost/type_traits/is_base_of.hpp>
+//TODO doc!!!
+
namespace boost { namespace fusion
{
- struct iterator_root;
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_iterator_impl
+ {
+ template <typename T>
+ struct apply
+ : is_base_of<iterator_root, typename detail::identity<T>::type>
+ {};
+ };
+ }
- template <typename T>
- struct is_fusion_iterator
- : is_base_of<iterator_root, typename detail::identity<T>::type>
- {};
+ namespace traits
+ {
+ template <typename T>
+ struct is_iterator
+ : extension::is_iterator_impl<
+ typename fusion::traits::tag_of<T>::type
+ >::template apply<typename detail::add_lref<T>::type>::type
+ {};
+ }
}}
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
#include <boost/type_traits/is_base_of.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -23,7 +23,6 @@
#include <boost/type_traits/is_array.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/add_volatile.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,6 +18,8 @@
template<typename Seq>
struct sequence_assign_type
{
+ typedef Seq seq_type;
+
sequence_assign_type(Seq seq)
: seq(seq)
{}
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,7 +18,6 @@
namespace boost { namespace fusion
{
- struct sequence_root;
struct mpl_sequence_tag;
struct mpl_iterator_tag;
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -28,6 +28,7 @@
# define DUMMY1(_)
# define DUMMY2(_,__)
+ //cschmidt: for claritys sake no linebreaks
# define VARIADIC_TEMPLATE(N) template<BOOST_PP_ENUM_PARAMS(N, typename T)>
# define VARIADIC_TEMPLATE_WITH_DEFAULT(N) template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(N, typename T, void_)>
# define EXPAND_TEMPLATE_ARGUMENTS(N) BOOST_PP_ENUM_PARAMS(N, T)
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,9 +10,8 @@
//BOOST_MPL_CFG_NO_HAS_XXX ?!
#include <boost/mpl/has_xxx.hpp>
-#include <boost/mpl/bool.hpp>
-namespace boost{namespace fusion
+namespace boost { namespace fusion
{
namespace detail
{
@@ -23,24 +22,25 @@
struct variadic_quote
{
private:
- template<typename ConcreteType,typename/* HasType*/>
+ template<typename ConcreteType,bool/* HasType*/>
struct apply_impl
{
typedef ConcreteType type;
};
template<typename ConcreteType>
- struct apply_impl<ConcreteType,mpl::true_>
+ struct apply_impl<ConcreteType,true>
: ConcreteType
- {
- };
+ {};
public:
template<typename... Argument>
struct apply
- : apply_impl<Type<Argument...>,detail::has_type<Type<Argument...> > >
- {
- };
+ : apply_impl<
+ Type<Argument...>
+ , detail::has_type<Type<Argument...> >::type::value
+ >
+ {};
};
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,8 +8,8 @@
#ifndef BOOST_FUSION_TUPLE_HPP
#define BOOST_FUSION_TUPLE_HPP
-#include <boost/fusion/tuple/tuple_fwd.hpp>
-#include <boost/fusion/tuple/tuple.hpp>
#include <boost/fusion/tuple/make_tuple.hpp>
+#include <boost/fusion/tuple/tuple_fwd.hpp>
#include <boost/fusion/tuple/tuple_tie.hpp>
+#include <boost/fusion/tuple/tuple.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -17,11 +17,7 @@
#include <boost/fusion/sequence/io.hpp>
#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/fusion/support/ref.hpp>
-
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
+#include <boost/fusion/support/detail/workaround.hpp>
#include <boost/fusion/container/detail/forward_ctor.hpp>
@@ -89,12 +85,8 @@
#ifdef BOOST_NO_RVALUE_REFERENCES
template <int N, typename Tuple>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<is_const<Tuple>,result_of::at_c<Tuple&, N> >::type
-#else
- inline typename result_of::at_c<Tuple&, N>::type
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::at_c<,Tuple,&, N>)
get(Tuple& tuple)
{
return at_c<N>(tuple);
Modified: sandbox/SOC/2009/fusion/boost/fusion/view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,8 +11,9 @@
#include <boost/fusion/view/filter_view.hpp>
#include <boost/fusion/view/iterator_range.hpp>
#include <boost/fusion/view/joint_view.hpp>
-#include <boost/fusion/view/transform_view.hpp>
#include <boost/fusion/view/reverse_view.hpp>
+#include <boost/fusion/view/single_view.hpp>
+#include <boost/fusion/view/transform_view.hpp>
#include <boost/fusion/view/zip_view.hpp>
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,47 +9,36 @@
#ifndef BOOST_FUSION_VIEW_DETAIL_STRICTEST_TRAVERSAL_HPP
#define BOOST_FUSION_VIEW_DETAIL_STRICTEST_TRAVERSAL_HPP
-#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/algorithm/iteration/fold.hpp>
-#include <boost/fusion/mpl.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/ref.hpp>
-#include <boost/mpl/or.hpp>
#include <boost/mpl/if.hpp>
-
-#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_base_of.hpp>
namespace boost { namespace fusion
{
- struct forward_traversal_tag;
- struct bidirectional_traversal_tag;
- struct random_access_traversal_tag;
-
namespace detail
{
- template<typename Tag1, typename Tag2>
- struct stricter_traversal
- {
- typedef typename
- mpl::if_<
- is_convertible<Tag2,Tag1>
- , Tag1
- , Tag2
- >::type
- type;
- };
-
struct strictest_traversal_impl
{
template<typename Sig>
struct result;
- template<typename Self, typename Next, typename StrictestSoFar>
- struct result<Self(Next, StrictestSoFar)>
+ template<typename Self, typename NextSeq, typename StrictestSoFar>
+ struct result<Self(NextSeq, StrictestSoFar)>
{
- typedef typename traits::category_of<Next>::type next_tag;
+ typedef typename traits::category_of<NextSeq>::type next_tag;
+ typedef typename
+ detail::identity<StrictestSoFar>::type
+ strictest_so_far_identity;
typedef typename
- stricter_traversal<StrictestSoFar,next_tag>::type
+ mpl::if_<
+ is_base_of<strictest_so_far_identity,next_tag>
+ , strictest_so_far_identity
+ , next_tag
+ >::type
type;
};
};
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,7 @@
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/view/detail/view_storage.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -42,6 +43,9 @@
struct filter_view
: sequence_base<filter_view<Seq, Pred> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef detail::view_storage<Seq> storage_type;
typedef typename storage_type::type seq_type;
typedef Pred pred_type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,7 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/bool.hpp>
@@ -33,16 +34,15 @@
struct iterator_range
: sequence_base<iterator_range<First, Last> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<First>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<First>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<Last>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Last>));
+
typedef First begin_type;
typedef Last end_type;
- typedef typename
- mpl::eval_if<
- traits::is_associative<begin_type>
- , mpl::inherit2<forward_traversal_tag,associative_sequence_tag>
- , mpl::identity<forward_traversal_tag>
- >::type
- category;
+ typedef typename traits::category_of<First>::type category;
typedef typename result_of::distance<begin_type, end_type>::type size;
typedef iterator_range_tag fusion_tag;
typedef fusion_sequence_tag tag;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,6 @@
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/support/iterator_base.hpp>
-#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,6 +14,7 @@
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/view/detail/view_storage.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -44,6 +45,11 @@
struct joint_view
: sequence_base<joint_view<Seq1, Seq2> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
typedef detail::view_storage<Seq1> storage1_type;
typedef typename storage1_type::type seq1_type;
typedef detail::view_storage<Seq2> storage2_type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,6 @@
#include <boost/fusion/support/iterator_base.hpp>
#include <boost/fusion/support/category_of.hpp>
-#include <boost/fusion/support/assert.hpp>
namespace boost { namespace fusion
{
@@ -25,10 +24,6 @@
typedef reverse_view_iterator_tag fusion_tag;
typedef typename traits::category_of<first_type>::type category;
- //BOOST_FUSION_STATIC_ASSERT(
- // (is_base_of<bidirectional_traversal_tag, category>::value),
- // "underlying iterator must be bidirectional");
-
reverse_view_iterator(First const& first)
: first(first)
{}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,8 +14,8 @@
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/view/detail/view_storage.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -46,6 +46,9 @@
struct reverse_view
: sequence_base<reverse_view<Seq> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_bidirectional<Seq>));
+
typedef detail::view_storage<Seq> storage_type;
typedef typename storage_type::type seq_type;
typedef typename traits::category_of<seq_type>::type seq_category;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,9 +18,9 @@
# include <boost/fusion/container/vector/vector.hpp>
#endif
#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/support/ref.hpp>
#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/view/detail/strictest_traversal.hpp>
#include <boost/fusion/view/detail/view_storage.hpp>
@@ -57,6 +57,11 @@
struct transform_view
: sequence_base<transform_view<Seq1, Seq2, F,IsAssociative> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
//BOOST_FUSION_MPL_ASSERT_RELATION(
// result_of::size<Sequence1>,==,result_of::size<Sequence2>,
// "both sequences must have the same length");
@@ -135,6 +140,9 @@
struct unary_transform_view
: sequence_base<unary_transform_view<Seq, F, void_> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
typedef detail::view_storage<Seq> storage_type;
typedef typename storage_type::type seq_type;
typedef typename traits::category_of<seq_type>::type seq_category;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,7 +13,6 @@
#include <boost/fusion/container/vector/convert.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
-#include <boost/fusion/support/assert.hpp>
#include <boost/fusion/support/unused.hpp>
#include <boost/mpl/eval_if.hpp>
@@ -38,9 +37,7 @@
, mpl::identity<unused_type const&>
, result_of::at<SeqRef, N>
>
- {
- //BOOST_MPL_ASSERT((is_reference<SeqRef>));
- };
+ {};
template<typename Seq>
typename result<poly_at(BOOST_FUSION_R_ELSE_LREF(Seq))>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,11 +12,9 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
#include <boost/fusion/support/unused.hpp>
-#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/is_same.hpp>
namespace boost { namespace fusion
@@ -35,9 +33,7 @@
, mpl::identity<unused_type const&>
, result_of::begin<SeqRef>
>
- {
- BOOST_MPL_ASSERT((detail::is_lrref<SeqRef>));
- };
+ {};
template<typename Seq>
typename result<poly_begin(BOOST_FUSION_R_ELSE_LREF(Seq))>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,7 +14,6 @@
#include <boost/fusion/iterator/distance.hpp>
#include <boost/fusion/algorithm/query/find_if.hpp>
#include <boost/fusion/support/category_of.hpp>
-#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/placeholders.hpp>
@@ -30,19 +29,16 @@
struct best_distance
{
typedef typename
- result_of::find_if<
- typename SearchIt::iterators
- , is_same<
- traits::category_of<mpl::_1>
- , random_access_iterator_tag
- >
- >
- finder;
-
- //BOOST_MPL_ASSERT_NOT((is_same<typename finder::type, result_of::end<typename SearchIt::iterators> >));
-
- typedef typename
- result_of::distance<FoundIt, typename finder::type>::type
+ result_of::distance<
+ FoundIt
+ , typename result_of::find_if<
+ typename SearchIt::iterators
+ , is_same<
+ traits::category_of<mpl::_1>
+ , random_access_iterator_tag
+ >
+ >::type
+ >::type
type;
};
@@ -62,17 +58,17 @@
typename It1::iterators
, is_same<traits::category_of<mpl::_1>
, random_access_iterator_tag>
- >
- finder;
+ >::type
+ found_it;
typedef typename
mpl::eval_if<
is_same<
- typename finder::type
+ found_it
, typename result_of::end<typename It1::iterators>::type
>
, detail::default_distance<It1, It2>
- , detail::best_distance<typename finder::type, It2>
+ , detail::best_distance<found_it, It2>
>::type
type;
};
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -15,12 +15,10 @@
#include <boost/fusion/sequence/intrinsic/front.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
-#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/min.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/is_same.hpp>
namespace boost { namespace fusion
@@ -48,9 +46,7 @@
, mpl::identity<unused_type const&>
, get_endpoint<SeqRef, M>
>
- {
- BOOST_MPL_ASSERT((detail::is_lrref<SeqRef>));
- };
+ {};
template<typename Seq>
typename result<endpoints(BOOST_FUSION_R_ELSE_LREF(Seq))>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,6 +18,7 @@
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/unused.hpp>
#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
#include <boost/mpl/not.hpp>
#include <boost/mpl/placeholders.hpp>
@@ -28,8 +29,7 @@
#include <boost/mpl/bool.hpp>
#include <boost/mpl/eval_if.hpp>
-#include <boost/integer_traits.hpp>
-#include <boost/type_traits/is_reference.hpp>
+//#include <boost/integer_traits.hpp>
#include <boost/fusion/view/detail/strictest_traversal.hpp>
#include <boost/fusion/view/zip_view/detail/zip_view_fwd.hpp>
@@ -52,15 +52,31 @@
namespace detail
{
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
template<typename Seqs>
- struct all_references
- : fusion::result_of::equal_to<
- typename fusion::result_of::find_if<
- Seqs, mpl::not_<is_lrref<mpl::_1> >
- >::type
- , typename fusion::result_of::end<Seqs>::type
- >
- {};
+ struct all_forward_seqs
+ : mpl::true_
+ {
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::equal_to<
+ typename fusion::result_of::find_if<
+ Seqs
+ , mpl::not_<
+ traits::is_forward/*traits::is_sequence*/<mpl::_1>
+ >
+ >::type
+ , typename fusion::result_of::end<Seqs>::type
+ >));
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::equal_to<
+ typename fusion::result_of::find_if<
+ Seqs
+ , mpl::not_<detail::is_lrref<mpl::_1> >
+ >::type
+ , typename fusion::result_of::end<Seqs>::type
+ >));
+ };
+#endif
struct seq_size
{
@@ -71,13 +87,13 @@
struct result<Self(Seq)>
{
typedef typename
- mpl::eval_if<
- traits::is_forward<Seq>
- , result_of::size<Seq>
- , mpl::identity<
- mpl::int_<integer_traits<int>::const_max>
- >
- >::type
+ //mpl::eval_if<
+ // traits::is_forward<Seq>
+ /* ,*/ result_of::size<Seq>
+ // , mpl::identity<
+ // mpl::int_<integer_traits<int>::const_max>
+ // >
+ /*>*/::type
type;
};
};
@@ -93,8 +109,7 @@
typename detail::remove_reference<MinSize>::type,
typename detail::remove_reference<SeqSize>::type
>
- {
- };
+ {};
};
template<typename Seqs>
@@ -123,10 +138,14 @@
struct zip_view
: sequence_base< zip_view<Seqs> >
{
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seqs>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seqs>));
+
typedef typename
result_of::remove<Seqs, unused_type const&>::type
real_seqs;
- BOOST_MPL_ASSERT((detail::all_references<Seqs>));
+
+ BOOST_FUSION_MPL_ASSERT((detail::all_forward_seqs<real_seqs>));
typedef typename
fusion::result_of::as_vector<Seqs>::type
Modified: sandbox/SOC/2009/fusion/build.bat
==============================================================================
--- sandbox/SOC/2009/fusion/build.bat (original)
+++ sandbox/SOC/2009/fusion/build.bat 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -16,7 +16,7 @@
call :msvc
) else (
if "%1" == "" (
- call :msvc
+ call :gcc
) else (
echo Unknown toolset '%1'
goto :eof
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,8 @@
#include <boost/fusion/container.hpp>
#include <boost/fusion/view.hpp>
#include <boost/fusion/adapted.hpp>
+#include <boost/fusion/tuple.hpp>
+#include <boost/fusion/support.hpp>
#include <boost/mpl/placeholders.hpp>
@@ -113,6 +115,9 @@
}
};
+template<class>
+class C;
+
int main()
{
{
@@ -152,3 +157,45 @@
}
}
+/*#include <boost/mpl/transform.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/equal.hpp>
+
+#include <utility>
+
+namespace mpl=boost::mpl;
+
+struct my_make_pair {
+ template<typename T1, typename T2>
+ struct apply {
+ typedef std::pair<T1,T2> type;
+ };
+};
+
+
+
+int main(int argc, char *argv[])
+{
+ {
+ typedef mpl::vector<int,long> seq1;
+ typedef mpl::vector<float,double> seq2;
+ typedef mpl::vector<std::pair<int,float>,std::pair<long,double> > pairs;
+
+ typedef mpl::transform<seq1,seq2,my_make_pair>::type result;
+
+ static_assert( mpl::equal<result,pairs>::type::value, "");
+ }
+
+ typedef fusion::vector<int,long> seq1;
+
+ typedef fusion::vector<float,double> seq2;
+ typedef fusion::vector<std::pair<int,float>,std::pair<long,double> >
+pairs;
+
+ typedef mpl::transform<seq1,seq2,my_make_pair>::type result;
+
+ static_assert( mpl::equal<result,pairs>::type::value, "");
+ mpl::push_back<fusion::vector<>,int>::type z;
+
+ return 0;
+}*/
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,7 @@
#define FUSION_SEQUENCE list
#define FUSION_NO_RANDOM_ACCESS_SEQUENCE
-#define FUSION_TRAVERSAL_TAG forward_traversal_tag
+#define FUSION_TRAVERSAL_TAG bidirectional_traversal_tag
#include "./iterator.hpp"
int
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -49,15 +49,12 @@
seqs_type seqs(iv, cv, cl);
view v(seqs);
- BOOST_TEST(at_c<0>(v) == make_vector(1, 'a', 'y'));
- BOOST_TEST(at_c<1>(v) == make_vector(2, 'b', 'z'));
BOOST_TEST(front(v) == make_vector(1, 'a', 'y'));
BOOST_TEST(*next(begin(v)) == make_vector(2, 'b', 'z'));
BOOST_TEST(advance_c<2>(begin(v)) == end(v));
BOOST_TEST(distance(begin(v), end(v)) == 2);
BOOST_STATIC_ASSERT((boost::fusion::result_of::distance<boost::fusion::result_of::begin<view>::type, boost::fusion::result_of::end<view>::type>::value == 2));
- BOOST_MPL_ASSERT((boost::is_same<boost::fusion::result_of::value_at_c<view,0>::type, vector<int,char,char> >));
BOOST_MPL_ASSERT((boost::is_same<boost::fusion::result_of::value_of<boost::fusion::result_of::begin<view>::type>::type, vector<int,char,char> >));
}
return boost::report_errors();
Modified: sandbox/SOC/2009/fusion/project-root.jam
==============================================================================
--- sandbox/SOC/2009/fusion/project-root.jam (original)
+++ sandbox/SOC/2009/fusion/project-root.jam 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,12 +9,13 @@
project
: requirements <include>.
<include>$(BOOST_INCLUDES_PATH)
-# <toolset>gcc:<cxxflags>-std=c++0x
+ <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
+ <toolset>gcc:<cxxflags>-std=c++0x
: build-dir ../bin
: default-build debug <link>shared <runtime-link>shared <threading>multi
;
-#build-project libs/fusion/example/test ;
+build-project libs/fusion/example/test ;
#build-project libs/fusion/doc ;
#build-project libs/fusion/example/extension ;
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