|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r56151 - in sandbox/variadic_templates: . boost/mpl boost/mpl/list/aux_ boost/mpl/map/aux_ boost/mpl/vector/aux_ libs/mpl/test
From: cppljevans_at_[hidden]
Date: 2009-09-11 20:55:17
Author: cppljevans
Date: 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
New Revision: 56151
URL: http://svn.boost.org/trac/boost/changeset/56151
Log:
* In several of sequence tests and headers:
Rm'ed the:
typedef SEQ type;
For reason's outlined in the:
//!@nv-mpl_diff:
comments to:
libs/mpl/test/list_c.cpp
* Created X_item_fold classes for X in {m,s,v,l}
and made that a metafunction instead of just
a template.
* Renamed foldr_pkg to foldr_pack
* Used foldr_pack with X_item_fold to define super
of all sequences.
Added:
sandbox/variadic_templates/Jamfile (contents, props changed)
sandbox/variadic_templates/boost/mpl/foldr_iter.hpp (contents, props changed)
sandbox/variadic_templates/boost/mpl/foldr_pack.hpp
- copied, changed from r55955, /sandbox/variadic_templates/boost/mpl/foldr_pkg.hpp
sandbox/variadic_templates/boost/mpl/vector/aux_/begin_end.hpp (contents, props changed)
sandbox/variadic_templates/libs/mpl/test/foldr_pack.cpp (contents, props changed)
sandbox/variadic_templates/libs/mpl/test/for_each.cpp (contents, props changed)
sandbox/variadic_templates/libs/mpl/test/list_c.cpp (contents, props changed)
sandbox/variadic_templates/libs/mpl/test/set_c.cpp (contents, props changed)
sandbox/variadic_templates/libs/mpl/test/vector_c.cpp (contents, props changed)
Removed:
sandbox/variadic_templates/boost/mpl/foldr_pkg.hpp
Text files modified:
sandbox/variadic_templates/boost/mpl/foldr_pack.hpp | 36 +++++++++++++++-------------
sandbox/variadic_templates/boost/mpl/list.hpp | 17 ++++++++-----
sandbox/variadic_templates/boost/mpl/list/aux_/begin_end.hpp | 6 ++--
sandbox/variadic_templates/boost/mpl/list/aux_/item.hpp | 26 +++++++++++++++++---
sandbox/variadic_templates/boost/mpl/list/aux_/list0.hpp | 2
sandbox/variadic_templates/boost/mpl/list_c.hpp | 7 +++--
sandbox/variadic_templates/boost/mpl/map/aux_/clear_impl.hpp | 2
sandbox/variadic_templates/boost/mpl/reverse_fold.hpp | 4 +-
sandbox/variadic_templates/boost/mpl/set.hpp | 7 ++---
sandbox/variadic_templates/boost/mpl/set_c.hpp | 5 ++-
sandbox/variadic_templates/boost/mpl/vector.hpp | 8 +++---
sandbox/variadic_templates/boost/mpl/vector/aux_/item.hpp | 6 ++--
sandbox/variadic_templates/boost/mpl/vector_c.hpp | 7 +++--
sandbox/variadic_templates/libs/mpl/test/Jamfile | 2 +
sandbox/variadic_templates/libs/mpl/test/copy.cpp | 21 ++++------------
sandbox/variadic_templates/libs/mpl/test/copy_if.cpp | 50 +++++++++++++++++++++++++++++----------
sandbox/variadic_templates/libs/mpl/test/map.cpp | 23 ++++++++++++++----
17 files changed, 142 insertions(+), 87 deletions(-)
Added: sandbox/variadic_templates/Jamfile
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/Jamfile 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,6 @@
+project boost
+ : requirements
+ <include>.
+ : usage-requirements
+ <include>.
+ ;
Added: sandbox/variadic_templates/boost/mpl/foldr_iter.hpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/boost/mpl/foldr_iter.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,68 @@
+#ifndef BOOST_MPL_FOLDR_ITER_HPP_VARIADIC_TEMPLATES
+#define BOOST_MPL_FOLDR_ITER_HPP_VARIADIC_TEMPLATES
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/if_recur.hpp>
+#include <boost/mpl/aux_/if_recur_fold.hpp>
+namespace boost { namespace mpl {
+
+ template
+ < typename IterNow //start ValueIterator.
+ , typename IterEnd //end ValueIterator.
+ , typename State0 //initial State
+ , typename OpIterState //Operator: (ValueIterator,State) -> State
+ >
+ struct
+foldr_iter
+/**@brief
+ * Same as foldl_iter except association is to the right,
+ * and Operator arguments are swapped.
+ * IOW, the analogue result (see comments to foldl_iter.hpp) is:
+ * F(x1,F(x2,F(x3,z)))
+ *
+ * This template is similar to the haskell foldr described on p. 117 of:
+ *
+ * http://haskell.org/definition/haskell98-report.pdf
+ *
+ * where:
+ * haskell these_comments
+ * ------- --------------
+ * f F
+ * a Value
+ * b State
+ * z initial State
+ */
+: apply
+ < OpIterState
+ , IterNow
+ , typename foldr_iter
+ < typename next<IterNow>::type
+ , IterEnd
+ , State0
+ , OpIterState
+ >::type
+ >
+{
+};
+
+ template
+ < typename IterEnd
+ , typename State0
+ , typename OpIterState
+ >
+ struct
+foldr_iter
+ < IterEnd
+ , IterEnd
+ , State0
+ , OpIterState
+ >
+{
+ typedef
+ State0
+ type
+ ;
+};
+
+}}//exit boost::mpl namespace
+
+#endif //include guard
Copied: sandbox/variadic_templates/boost/mpl/foldr_pack.hpp (from r55955, /sandbox/variadic_templates/boost/mpl/foldr_pkg.hpp)
==============================================================================
--- /sandbox/variadic_templates/boost/mpl/foldr_pkg.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/foldr_pack.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -1,16 +1,15 @@
-#ifndef BOOST_MPL_FOLDR_PKG_HPP_VARIADIC_TEMPLATES
-#define BOOST_MPL_FOLDR_PKG_HPP_VARIADIC_TEMPLATES
-#include <boost/mpl/apply.hpp>
+#ifndef BOOST_MPL_FOLDR_PACK_HPP_VARIADIC_TEMPLATES
+#define BOOST_MPL_FOLDR_PACK_HPP_VARIADIC_TEMPLATES
namespace boost { namespace mpl {
template
< typename State0 //initial State
- , typename OpValueState_State //Operator: (Value,State) -> State
+ , template<typename Value,typename State>class OpValueState_State //Operator: (Value,State) -> State
, typename... Values
>
struct
-foldr_pkg
+foldr_pack
/**@brief
* Apply OpValueState_State to each element in Values...
* starting with intial State, State0. Associate the applications
@@ -40,38 +39,41 @@
;
template
< typename State0 //initial State
- , typename OpValueState_State //Operator: (Value,State) -> State
+ , template<typename Value,typename State>class OpValueState_State
, typename Head
, typename... Tail
>
struct
-foldr_pkg
+foldr_pack
< State0
, OpValueState_State
, Head
, Tail...
>
-: apply
- < OpValueState_State
- , Head
- , typename foldr_pkg
+: OpValueState_State
+ < Head
+ , typename foldr_pack
< State0
, OpValueState_State
, Tail...
>::type
- >::type
-{};
+ >
+{
+};
template
- < typename State0 //initial State
- , typename OpValueState_State //Operator: (Value,State) -> State
+ < typename State0
+ , template<typename Value,typename State>class OpValueState_State
>
struct
-foldr_pkg
+foldr_pack
< State0
, OpValueState_State
>
{
- typedef State0 type;
+ typedef
+ State0
+ type
+ ;
};
}}//exit boost::mpl namespace
Deleted: sandbox/variadic_templates/boost/mpl/foldr_pkg.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/foldr_pkg.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
+++ (empty file)
@@ -1,79 +0,0 @@
-#ifndef BOOST_MPL_FOLDR_PKG_HPP_VARIADIC_TEMPLATES
-#define BOOST_MPL_FOLDR_PKG_HPP_VARIADIC_TEMPLATES
-#include <boost/mpl/apply.hpp>
-
-namespace boost { namespace mpl {
-
- template
- < typename State0 //initial State
- , typename OpValueState_State //Operator: (Value,State) -> State
- , typename... Values
- >
- struct
-foldr_pkg
-/**@brief
- * Apply OpValueState_State to each element in Values...
- * starting with intial State, State0. Associate the applications
- * to the right.
- *
- * For example, the analogous operation on run-time-value's is:
- *
- * Assuming:
- * z == the run-time-value analogue of State0.
- * xI == the analogue of I-th element in Values...
- * F == the analogue of OpValueState_State.
- * Then the analogue of result would be:
- * F(x1,F(x2,F(x3,z)))
- *
- * This template is similar to the haskell foldr described on p. 117 of:
- *
- * http://haskell.org/definition/haskell98-report.pdf
- *
- * where:
- * haskell these_comments
- * ------- --------------
- * f F
- * a typename
- * b State
- * z initial State
- */
-;
- template
- < typename State0 //initial State
- , typename OpValueState_State //Operator: (Value,State) -> State
- , typename Head
- , typename... Tail
- >
- struct
-foldr_pkg
- < State0
- , OpValueState_State
- , Head
- , Tail...
- >
-: apply
- < OpValueState_State
- , Head
- , typename foldr_pkg
- < State0
- , OpValueState_State
- , Tail...
- >::type
- >::type
-{};
- template
- < typename State0 //initial State
- , typename OpValueState_State //Operator: (Value,State) -> State
- >
- struct
-foldr_pkg
- < State0
- , OpValueState_State
- >
-{
- typedef State0 type;
-};
-
-}}//exit boost::mpl namespace
-
-#endif //include guard
Modified: sandbox/variadic_templates/boost/mpl/list.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/list.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/list.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -1,8 +1,7 @@
#ifndef BOOST_MPL_LIST_HPP_INCLUDED
#define BOOST_MPL_LIST_HPP_INCLUDED
#include <boost/mpl/list/list0.hpp>
-#include <boost/mpl/foldr_pkg.hpp>
-#include <boost/mpl/quote.hpp>
+#include <boost/mpl/foldr_pack.hpp>
namespace boost
{
@@ -14,19 +13,23 @@
>
struct
list
- : foldr_pkg
- < list0
- , quote2<l_item>
- , Values...
- >::type
//@diff-nv-mpl:
// This specialization corresponds to all of the listI
// for I=1..., which are defined in non-variadic mpl in
// one of the files:
// boost/mpl/list/aux_/preprocessed/plain/listN.hpp
// for some N in 10,20,...
+ : foldr_pack
+ < list0
+ , l_item_fold
+ , Values...
+ >::type
{
+ #ifdef TYPEDEF_SEQ_TYPE
+ typedef list type;
+ #endif
};
+
}//exit mpl namespace
Modified: sandbox/variadic_templates/boost/mpl/list/aux_/begin_end.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/list/aux_/begin_end.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/list/aux_/begin_end.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -11,8 +11,8 @@
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
-// $Date: 2009/08/30 04:12:38 $
-// $Revision: 1.3 $
+// $Date: 2009/09/02 16:17:55 $
+// $Revision: 1.5 $
#include <boost/mpl/begin_end_fwd.hpp>
#include <boost/mpl/list/aux_/iterator.hpp>
@@ -26,7 +26,7 @@
{
template< typename List > struct apply
{
- typedef l_iter<typename List::pkg_type> type;
+ typedef l_iter<typename List::type> type;
};
};
Modified: sandbox/variadic_templates/boost/mpl/list/aux_/item.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/list/aux_/item.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/list/aux_/item.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -11,8 +11,8 @@
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
-// $Date: 2009/08/30 14:45:16 $
-// $Revision: 1.7 $
+// $Date: 2009/09/01 19:28:35 $
+// $Revision: 1.10 $
#include <boost/mpl/list/aux_/tag.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
@@ -25,20 +25,38 @@
, typename Next
>
struct l_item
+ : Next
+//!
+//!@diff-nv-mpl:
+//! WHAT:
+//! Inherits from Next.
+//! WHY:
+//! Elimiates need to typedef tag (inherited from last Next)
+//! and, in the case of list_c, the need to typedef value_type
+//! (since it's also inherited from last Next, which, in the
+//! case of list_c, would be list0_c.
+//!
{
// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
typedef int begin;
#endif
- typedef aux::list_tag tag;
typedef l_item type;
- typedef l_item pkg_type;
typedef typename next<typename Next::size>::type size;
typedef T item;
typedef Next next;
};
+template<
+ typename T
+ , typename Next
+ >
+struct l_item_fold
+{
+ typedef l_item<T,Next> type;
+};
+
}}
#endif // BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
Modified: sandbox/variadic_templates/boost/mpl/list/aux_/list0.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/list/aux_/list0.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/list/aux_/list0.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -27,7 +27,7 @@
#endif
typedef aux::list_tag tag;
typedef list0 type;
- typedef list0 pkg_type;
+// typedef type end_type;
typedef long_<0> size;
};
Modified: sandbox/variadic_templates/boost/mpl/list_c.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/list_c.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/list_c.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -9,14 +9,15 @@
{
template
< typename Integral
- , Integral... Args
+ , Integral... Values
>
struct
list_c
-: list<integral_c<Integral,Args>...>
+ : list
+ < integral_c<Integral,Values>...
+ >
{
typedef Integral value_type;
- typedef list_c type;
};
}//exit mpl namespace
Modified: sandbox/variadic_templates/boost/mpl/map/aux_/clear_impl.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/map/aux_/clear_impl.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/map/aux_/clear_impl.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -26,7 +26,7 @@
{
template< typename Map > struct apply
{
- typedef map<> type;
+ typedef map0 type;
};
};
Modified: sandbox/variadic_templates/boost/mpl/reverse_fold.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/reverse_fold.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/reverse_fold.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -1,6 +1,6 @@
#ifndef BOOST_MPL_REVERSE_FOLD_HPP_VARIADIC_TEMPLATES
#define BOOST_MPL_REVERSE_FOLD_HPP_VARIADIC_TEMPLATES
-#include <boost/mpl/foldr_iter_if.hpp>
+#include <boost/mpl/foldr_iter.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/lambda.hpp>
@@ -16,7 +16,7 @@
reverse_fold
{
typedef
- typename foldr_iter_if
+ typename foldr_iter
< typename begin<Sequence>::type
, typename end<Sequence>::type
, State
Modified: sandbox/variadic_templates/boost/mpl/set.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/set.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/set.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -16,8 +16,7 @@
#include <boost/mpl/aux_/value_wknd.hpp>
#include <boost/mpl/set/set0.hpp>
-#include <boost/mpl/foldr_pkg.hpp>
-#include <boost/mpl/quote.hpp>
+#include <boost/mpl/foldr_pack.hpp>
namespace boost
{
@@ -29,9 +28,9 @@
>
struct
set
- : foldr_pkg
+ : foldr_pack
< set0
- , s_item<arg<1>,arg<2> >
+ , s_item_fold
, Values...
>::type
//!
Modified: sandbox/variadic_templates/boost/mpl/set_c.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/set_c.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/set_c.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -13,10 +13,11 @@
>
struct
set_c
- : set<integral_c<Integral,Args>...>
+ : set
+ < integral_c<Integral,Args>...
+ >
{
typedef Integral value_type;
- typedef set_c type;
};
}//exit mpl namespace
Modified: sandbox/variadic_templates/boost/mpl/vector.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/vector.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/vector.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -7,7 +7,7 @@
//! indirectly #includes vector_fwd.hpp.
//!
#include <boost/mpl/vector/vector0.hpp>
-#include <boost/mpl/foldr_pkg.hpp>
+#include <boost/mpl/foldr_pack.hpp>
namespace boost
{
@@ -19,9 +19,9 @@
>
struct
vector
- : foldr_pkg
+ : foldr_pack
< vector0
- , v_item_fold<arg<1>,arg<2> >
+ , v_item_fold
, Values...
>::type
//!
@@ -36,7 +36,7 @@
//! WHAT:
//! 1) Instead of adding items from the tail, items are added from
//! head.
-//! 2) foldr_pkg is used instead of recursive call of vector.
+//! 2) foldr_pack is used instead of recursive call of vector.
//! WHY:
//! 1) The variadic template compiler doesn't allow parameter
//! packs to be followed by anything else (designated here as the
Added: sandbox/variadic_templates/boost/mpl/vector/aux_/begin_end.hpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/boost/mpl/vector/aux_/begin_end.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// 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)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2009/09/08 19:38:37 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# include <boost/mpl/begin_end_fwd.hpp>
+# include <boost/mpl/vector/aux_/iterator.hpp>
+# include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct begin_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef v_iter<typename Vector::type,0> type;
+ };
+};
+
+template<>
+struct end_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef v_iter<typename Vector::type,Vector::size::value> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
Modified: sandbox/variadic_templates/boost/mpl/vector/aux_/item.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/vector/aux_/item.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/vector/aux_/item.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -11,8 +11,8 @@
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
-// $Date: 2009/03/27 20:36:14 $
-// $Revision: 1.3 $
+// $Date: 2009/09/07 04:00:08 $
+// $Revision: 1.5 $
#include <boost/mpl/long.hpp>
#include <boost/mpl/void.hpp>
@@ -89,8 +89,8 @@
, typename Base
>
struct v_item_fold
- : v_item<T,Base,1>
{
+ typedef v_item<T,Base,1> type;
};
// "erasure" item
Modified: sandbox/variadic_templates/boost/mpl/vector_c.hpp
==============================================================================
--- sandbox/variadic_templates/boost/mpl/vector_c.hpp (original)
+++ sandbox/variadic_templates/boost/mpl/vector_c.hpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -9,14 +9,15 @@
{
template
< typename Integral
- , Integral... Args
+ , Integral... Values
>
struct
vector_c
- : vector<integral_c<Integral,Args>...>
+ : vector
+ < integral_c<Integral,Values>...
+ >
{
typedef Integral value_type;
- typedef vector_c type;
};
}//exit mpl namespace
Modified: sandbox/variadic_templates/libs/mpl/test/Jamfile
==============================================================================
--- sandbox/variadic_templates/libs/mpl/test/Jamfile (original)
+++ sandbox/variadic_templates/libs/mpl/test/Jamfile 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -34,6 +34,7 @@
compile find.cpp ;
compile find_if.cpp ;
compile fold.cpp ;
+ compile foldr_pack.cpp ;
run for_each.cpp ;
compile front.cpp ;
@@ -46,6 +47,7 @@
compile insert.cpp ;
compile insert_range.cpp ;
run int.cpp ;
+ compile int.cpp : : int.compile ;
run integral_c.cpp : : : <toolset>vacpp:<cxxflags>-qchars=signed ;
compile is_placeholder.cpp ;
compile is_sequence.cpp ;
Modified: sandbox/variadic_templates/libs/mpl/test/copy.cpp
==============================================================================
--- sandbox/variadic_templates/libs/mpl/test/copy.cpp (original)
+++ sandbox/variadic_templates/libs/mpl/test/copy.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -9,17 +9,12 @@
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
-// $Date: 2009/05/26 21:10:09 $
-// $Revision: 1.5 $
+// $Date: 2009/09/04 02:54:46 $
+// $Revision: 1.7 $
-#define USE_RANGE_C
-#ifdef USE_RANGE_C
- #include <boost/mpl/range_c.hpp>
-#else
- //disallow using range_c because currently
- //(gcc-4.4-20090109) compiler buggy.
-#endif
+#include <boost/mpl/range_c.hpp>
#include <boost/mpl/vector_c.hpp>
+#include <boost/mpl/vector.hpp>
#include <boost/mpl/copy.hpp>
#include <boost/mpl/front_inserter.hpp>
#include <boost/mpl/size.hpp>
@@ -30,18 +25,14 @@
{
typedef vector_c<int,9,8,7,6,5,4,3,2,1,0> answer;
typedef copy<
- #ifdef USE_RANGE_C
range_c<int,0,10>
- #else
- vector_c<int,0,1,2,3,4,5,6,7,8,9>
- #endif
, mpl::front_inserter< vector<> >
>::type result;
MPL_ASSERT_RELATION( size<result>::value, ==, 10 );
MPL_ASSERT(( equal< result,answer > ));
}
-#ifdef USE_RANGE_C
+
MPL_TEST_CASE()
{
typedef vector_c<int,10,11,12,13,14,15,16,17,18,19> numbers;
@@ -53,4 +44,4 @@
MPL_ASSERT_RELATION( size<result>::value, ==, 20 );
MPL_ASSERT(( equal< result,range_c<int,0,20> > ));
}
-#endif
+
Modified: sandbox/variadic_templates/libs/mpl/test/copy_if.cpp
==============================================================================
--- sandbox/variadic_templates/libs/mpl/test/copy_if.cpp (original)
+++ sandbox/variadic_templates/libs/mpl/test/copy_if.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -9,10 +9,11 @@
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
-// $Date: 2009/08/23 20:20:38 $
-// $Revision: 1.5 $
+// $Date: 2009/09/10 21:59:42 $
+// $Revision: 1.10 $
#include <boost/mpl/copy_if.hpp>
+#include <boost/mpl/list.hpp>
#include <boost/mpl/list_c.hpp>
#include <boost/mpl/front_inserter.hpp>
#include <boost/mpl/less.hpp>
@@ -30,26 +31,49 @@
typedef copy_if<
numbers
, less<_,int_<5> >
- , mpl::front_inserter< list_c<int> >
+ , mpl::front_inserter
+ < list<>
+ >
>::type result;
MPL_ASSERT_RELATION(size<result>::value, ==, 5);
-// MPL_ASSERT(( is_same<void,begin<answer>::type> ));
- // MPL_ASSERT(( is_same<void,begin<result>::type> ));
MPL_ASSERT(( equal<result,answer> ));
+
}
MPL_TEST_CASE()
{
- typedef list<int,float,long,float,char,long,double,double>::type types;
- typedef list<float,float,double,double>::type float_types;
- typedef reverse_copy_if<
- types
- , is_float<_>
- , mpl::front_inserter< list<> >
- >::type result;
+ typedef
+ list
+ < int
+ , float
+ , long
+ , float
+ , char
+ , long
+ , double
+ , double
+ >::type
+ types;
+ typedef
+ list
+ < float
+ , float
+ , double
+ , double
+ >::type
+ answer;
+ typedef
+ reverse_copy_if
+ < types
+ , is_float<_>
+ , mpl::front_inserter
+ < list<>
+ >
+ >::type
+ result;
MPL_ASSERT_RELATION(mpl::size<result>::value, ==, 4);
- MPL_ASSERT(( equal<result,float_types> ));
+ MPL_ASSERT(( equal<result,answer> ));
}
Added: sandbox/variadic_templates/libs/mpl/test/foldr_pack.cpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/libs/mpl/test/foldr_pack.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,26 @@
+
+// Copyright Larry Evans 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)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2009/08/29 21:19:01 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/foldr_pack.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/mpl/aux_/test.hpp>
+
+MPL_TEST_CASE()
+{
+ typedef foldr_pack<int,pair,float,char>::type result;
+ typedef pair<float,pair<char,int> > answer;
+ MPL_ASSERT(( is_same<answer,result> ));
+}
Added: sandbox/variadic_templates/libs/mpl/test/for_each.cpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/libs/mpl/test/for_each.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,91 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// 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)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2009/09/11 14:48:54 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/for_each.hpp>
+
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/range_c.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/bind.hpp>
+
+#include <vector>
+#include <iostream>
+#include <algorithm>
+#include <typeinfo>
+#include <cassert>
+
+namespace mpl = boost::mpl;
+
+struct type_printer
+{
+ type_printer(std::ostream& s) : f_stream(&s) {}
+ template< typename U > void operator()(mpl::identity<U>)
+ {
+ *f_stream << typeid(U).name() << '\n';
+ }
+
+ private:
+ std::ostream* f_stream;
+};
+
+struct value_printer
+{
+ value_printer(std::ostream& s) : f_stream(&s) {}
+ template< typename U > void operator()(U x)
+ {
+ *f_stream << x << '\n';
+ }
+
+ private:
+ std::ostream* f_stream;
+};
+
+#ifdef __ICL
+# pragma warning(disable:985)
+#endif
+
+int main()
+{
+ typedef mpl::list<char,short,int,long,float,double> types;
+ mpl::for_each< types,mpl::make_identity<mpl::_1> >(type_printer(std::cout));
+
+ typedef mpl::range_c<int,0,10> numbers;
+ std::vector<int> v;
+
+//!@nv-mpl_diff:
+//! WHAT:
+//! Added test for defined(__GXX_EXPERIMENTAL_CXX0X__)
+//! WHY:
+//! The bug in variadic g++ reported here:
+//!
+//! http://lists.boost.org/Archives/boost/2009/09/155922.php
+//!
+#if defined(__SGI_STL_PORT) || defined(__GXX_EXPERIMENTAL_CXX0X__)
+ void (std::vector<int>::* push_back)(int const&) = &std::vector<int>::push_back;
+ mpl::for_each<numbers>(
+ boost::bind(push_back, &v, _1)
+ );
+#else
+ mpl::for_each<numbers>(
+ boost::bind(&std::vector<int>::push_back, &v, _1)
+ );
+#endif
+
+ mpl::for_each< numbers >(value_printer(std::cout));
+
+ for (unsigned i = 0; i < v.size(); ++i)
+ assert(v[i] == (int)i);
+
+ return 0;
+}
Added: sandbox/variadic_templates/libs/mpl/test/list_c.cpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/libs/mpl/test/list_c.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,109 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// 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)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2009/09/10 22:53:37 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/list_c.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/mpl/aux_/test.hpp>
+
+
+//!@nv-mpl_diff:
+//! WHAT:
+//! 1) expresstions such as:
+//! list_c<T,c1,c2,...>::type
+//! were replaced with just:
+//! list_c<T,c1,c2,...>
+//! WHY:
+//! 1) list_c<T,c1,c2,...> was changed
+//! to inheirit from:
+//! l_item<integral_c<T,c1>,Next>
+//! where Next was a function of <T,c2,...>
+//! , and the only purpose of purpose
+//! of using list_c<T,c1,c2,...>::type
+//! instead of l_item<integral-c<C1,c1>,Next>
+//! was to provide another name for T.
+//! As defined here, T could simply be
+//! gotten by front<list_c<T,c1...> >::value_type;
+//! hence, there's no real need for
+//! list_c<C1,c1,c2,...>::type.
+//! 2) Trying to emulate more precisely the non-variadic
+//! list_c was proving too difficult.
+//! 3) The only mention of list_c<T,c1,c2,...>::type
+//! (actually seq_c<T,c1,c2,...>) in:
+//! http://www.boost.org/doc/libs/1_40_0/libs/mpl/doc/refmanual/integral-sequence-wrapper.html
+//! is with seqn_c<T1,c1,c2,... cn>. Since there's no
+//! numbered sequences in variadic mpl, that specification
+//! doesn't apply.
+
+#if !BOOST_WORKAROUND(BOOST_MSVC,<= 1200)
+MPL_TEST_CASE()
+{
+ typedef list_c<bool,true> l1;
+ typedef list_c<bool,false> l2;
+
+ MPL_ASSERT(( is_same< l1::value_type, bool > ));
+ MPL_ASSERT(( is_same< l2::value_type, bool > ));
+
+ MPL_ASSERT_RELATION( front<l1>::type::value, ==, true );
+ MPL_ASSERT_RELATION( front<l2>::type::value, ==, false );
+}
+#endif
+
+MPL_TEST_CASE()
+{
+ typedef list_c<int,-1> l1;
+ typedef list_c<int,0,1> l2;
+ typedef list_c<int,1,2,3> l3;
+
+ MPL_ASSERT(( is_same< l1::value_type, int > ));
+ MPL_ASSERT(( is_same< l2::value_type, int > ));
+ MPL_ASSERT(( is_same< l3::value_type, int > ));
+
+ MPL_ASSERT_RELATION( size<l1>::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<l2>::value, ==, 2 );
+ MPL_ASSERT_RELATION( size<l3>::value, ==, 3 );
+ MPL_ASSERT_RELATION( front<l1>::type::value, ==, -1 );
+ MPL_ASSERT_RELATION( front<l2>::type::value, ==, 0 );
+ MPL_ASSERT_RELATION( front<l3>::type::value, ==, 1 );
+}
+
+MPL_TEST_CASE()
+{
+ typedef list_c<unsigned,0> l1;
+ typedef list_c<unsigned,1,2> l2;
+
+ MPL_ASSERT(( is_same< l1::value_type, unsigned > ));
+ MPL_ASSERT(( is_same< l2::value_type, unsigned > ));
+
+ MPL_ASSERT_RELATION( size<l1>::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<l2>::value, ==, 2 );
+ MPL_ASSERT_RELATION( front<l1>::type::value, ==, 0 );
+ MPL_ASSERT_RELATION( front<l2>::type::value, ==, 1 );
+}
+
+MPL_TEST_CASE()
+{
+ typedef list_c<unsigned,2,1> l2;
+
+ MPL_ASSERT(( is_same< l2::value_type, unsigned > ));
+
+ typedef begin<l2>::type i1;
+ typedef next<i1>::type i2;
+ typedef next<i2>::type i3;
+
+ MPL_ASSERT_RELATION( deref<i1>::type::value, ==, 2 );
+ MPL_ASSERT_RELATION( deref<i2>::type::value, ==, 1 );
+ MPL_ASSERT(( is_same< i3, end<l2>::type > ));
+}
Modified: sandbox/variadic_templates/libs/mpl/test/map.cpp
==============================================================================
--- sandbox/variadic_templates/libs/mpl/test/map.cpp (original)
+++ sandbox/variadic_templates/libs/mpl/test/map.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -40,7 +40,7 @@
MPL_ASSERT_RELATION( size<m>::type::value, ==, 1 );
MPL_ASSERT_NOT(( empty<m> ));
- MPL_ASSERT(( is_same< clear<m>::type,map<> > ));
+ MPL_ASSERT(( is_same< clear<m>::type,map0 > ));
MPL_ASSERT(( is_same< at<m,int>::type,unsigned > ));
MPL_ASSERT(( is_same< at<m,char>::type,void_ > ));
@@ -64,7 +64,7 @@
MPL_ASSERT_RELATION( size<m2>::type::value, ==, 2 );
MPL_ASSERT_NOT(( empty<m2>::type ));
- MPL_ASSERT(( is_same< clear<m2>::type,map<> > ));
+ MPL_ASSERT(( is_same< clear<m2>::type,map0 > ));
MPL_ASSERT(( is_same< at<m2,int>::type,unsigned > ));
MPL_ASSERT(( is_same< at<m2,char>::type,long > ));
@@ -125,12 +125,12 @@
MPL_TEST_CASE()
{
- typedef map<> m;
+ typedef map0 m;
MPL_ASSERT_RELATION( size<m>::type::value, ==, 0 );
MPL_ASSERT(( empty<m>::type ));
- MPL_ASSERT(( is_same< clear<m>::type,map<> > ));
+ MPL_ASSERT(( is_same< clear<m>::type,map0 > ));
MPL_ASSERT(( is_same< at<m,char>::type,void_ > ));
MPL_ASSERT_NOT(( has_key<m,char>::type ));
@@ -192,5 +192,18 @@
> mymap;
test<mymap>();
- test<mymap::type>();
+//!@nv-mpl_diff:
+//! WHAT:
+//! removed:
+//! test<mymap::type>();
+//! WHY:
+//! The only mention of map<T1,T2,...TN>::type on:
+//!
+//! http://www.boost.org/doc/libs/1_40_0/libs/mpl/doc/refmanual/map.html
+//!
+//! only mentions an equality with mapN<T1,T2,...,TN> (i.e. numbered maps).
+//! Since there are no numbered maps in variadic mpl, that mention is not
+//! relevant; hence, that test is unneeded.
+//!
+
}
Added: sandbox/variadic_templates/libs/mpl/test/set_c.cpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/libs/mpl/test/set_c.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,88 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// 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)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2009/09/11 00:24:49 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/set_c.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/size.hpp>
+
+#include <boost/mpl/aux_/test.hpp>
+
+namespace test { namespace {
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+template< typename S, typename S::value_type k >
+struct at_c
+ : at< S, integral_c<typename S::value_type,k> >::type
+{
+};
+#else
+template< typename S, long k >
+struct at_c
+ : aux::msvc_eti_base<
+ at< S, integral_c<typename S::value_type,k> >
+ >
+{
+};
+#endif
+}}
+
+//!@nv-mpl_diff:
+//! See list_c.cpp @nv-mpl_diff.
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+MPL_TEST_CASE()
+{
+ typedef set_c<bool,true> s1;
+ typedef set_c<bool,false> s2;
+ typedef set_c<bool,true,false> s3;
+
+ MPL_ASSERT_RELATION( size<s1>::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<s2>::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<s3>::value, ==, 2 );
+
+ MPL_ASSERT(( is_same< s1::value_type, bool > ));
+ MPL_ASSERT(( is_same< s3::value_type, bool > ));
+ MPL_ASSERT(( is_same< s2::value_type, bool > ));
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ MPL_ASSERT_RELATION( ( test::at_c<s1,true>::value ), ==, true );
+ MPL_ASSERT_RELATION( ( test::at_c<s2,false>::value ), ==, false );
+ MPL_ASSERT_RELATION( ( test::at_c<s3,true>::value ), ==, true );
+ MPL_ASSERT_RELATION( ( test::at_c<s3,false>::value ), ==, false );
+
+ MPL_ASSERT(( is_same< test::at_c<s1,false>::type, void_ > ));
+ MPL_ASSERT(( is_same< test::at_c<s2,true>::type, void_ > ));
+#endif
+}
+#endif
+
+MPL_TEST_CASE()
+{
+ typedef set_c<char,'a'> s1;
+ typedef set_c<char,'a','b','c','d','e','f','g','h'> s2;
+
+ MPL_ASSERT_RELATION( size<s1>::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<s2>::value, ==, 8 );
+
+ MPL_ASSERT(( is_same< s1::value_type, char > ));
+ MPL_ASSERT(( is_same< s2::value_type, char > ));
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ MPL_ASSERT_RELATION( ( test::at_c<s1,'a'>::value ), ==, 'a' );
+ MPL_ASSERT_RELATION( ( test::at_c<s2,'a'>::value ), ==, 'a' );
+ MPL_ASSERT_RELATION( ( test::at_c<s2,'d'>::value ), ==, 'd' );
+ MPL_ASSERT_RELATION( ( test::at_c<s2,'h'>::value ), ==, 'h' );
+
+ MPL_ASSERT(( is_same< test::at_c<s1,'z'>::type, void_ > ));
+ MPL_ASSERT(( is_same< test::at_c<s2,'k'>::type, void_ > ));
+#endif
+}
Added: sandbox/variadic_templates/libs/mpl/test/vector_c.cpp
==============================================================================
--- (empty file)
+++ sandbox/variadic_templates/libs/mpl/test/vector_c.cpp 2009-09-11 20:55:14 EDT (Fri, 11 Sep 2009)
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// 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)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2009/09/11 00:06:21 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/vector_c.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/size.hpp>
+
+#include <boost/mpl/aux_/test.hpp>
+
+//!@nv-mpl_diff:
+//! See list_c.cpp @nv-mpl_diff.
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <=1200)
+MPL_TEST_CASE()
+{
+ typedef vector_c<bool,true> v1;
+ typedef vector_c<bool,false> v2;
+
+ MPL_ASSERT(( is_same< v1::value_type, bool > ));
+ MPL_ASSERT(( is_same< v2::value_type, bool > ));
+
+ MPL_ASSERT_RELATION( front<v1>::type::value, ==, true );
+ MPL_ASSERT_RELATION( front<v2>::type::value, ==, false );
+}
+#endif
+
+MPL_TEST_CASE()
+{
+ typedef vector_c<int,-1> v1;
+ typedef vector_c<int,0,1> v2;
+ typedef vector_c<int,1,2,3> v3;
+
+ MPL_ASSERT(( is_same< v1::value_type, int > ));
+ MPL_ASSERT(( is_same< v2::value_type, int > ));
+ MPL_ASSERT(( is_same< v3::value_type, int > ));
+
+ MPL_ASSERT_RELATION( size<v1>::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<v2>::value, ==, 2 );
+ MPL_ASSERT_RELATION( size<v3>::value, ==, 3 );
+
+ MPL_ASSERT_RELATION( front<v1>::type::value, ==, -1 );
+ MPL_ASSERT_RELATION( front<v2>::type::value, ==, 0 );
+ MPL_ASSERT_RELATION( front<v3>::type::value, ==, 1 );
+}
+
+MPL_TEST_CASE()
+{
+ typedef vector_c<unsigned,0> v1;
+ typedef vector_c<unsigned,1,2> v2;
+
+ MPL_ASSERT(( is_same< v1::value_type, unsigned > ));
+ MPL_ASSERT(( is_same< v2::value_type, unsigned > ));
+
+ MPL_ASSERT_RELATION( size<v1>::type::value, ==, 1 );
+ MPL_ASSERT_RELATION( size<v2>::type::value, ==, 2 );
+
+ MPL_ASSERT_RELATION( front<v1>::type::value, ==, 0 );
+ MPL_ASSERT_RELATION( front<v2>::type::value, ==, 1 );
+}
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