From 8179a114c337c5e2deb84149542b3c687ba14ed2 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 15 Nov 2013 23:54:12 +0000 Subject: [PATCH 01/14] Added new tuple headers and updated tests to use a common test source file for each test. [SVN r86715] --- include/boost/preprocessor/tuple.hpp | 9 +- include/boost/preprocessor/tuple/insert.hpp | 37 +++++++ include/boost/preprocessor/tuple/pop_back.hpp | 64 +++++++++++ .../boost/preprocessor/tuple/pop_front.hpp | 65 +++++++++++ .../boost/preprocessor/tuple/push_back.hpp | 31 ++++++ .../boost/preprocessor/tuple/push_front.hpp | 32 ++++++ include/boost/preprocessor/tuple/remove.hpp | 64 +++++++++++ include/boost/preprocessor/tuple/replace.hpp | 37 +++++++ test/arithmetic.c | 52 +-------- test/arithmetic.cpp | 52 +-------- test/arithmetic.cxx | 62 +++++++++++ test/array.c | 81 +------------- test/array.cpp | 81 +------------- test/array.cxx | 93 ++++++++++++++++ test/comparison.c | 34 +----- test/comparison.cpp | 35 +----- test/comparison.cxx | 45 ++++++++ test/control.c | 30 +---- test/control.cpp | 30 +---- test/control.cxx | 40 +++++++ test/debug.c | 11 +- test/debug.cpp | 11 +- test/debug.cxx | 21 ++++ test/facilities.c | 18 +-- test/facilities.cpp | 18 +-- test/facilities.cxx | 28 +++++ test/list.c | 49 +-------- test/list.cpp | 49 +-------- test/list.cxx | 61 ++++++++++ test/logical.c | 26 +---- test/logical.cpp | 26 +---- test/logical.cxx | 36 ++++++ test/selection.c | 11 +- test/selection.cpp | 11 +- test/selection.cxx | 21 ++++ test/seq.c | 78 +------------ test/seq.cpp | 78 +------------ test/seq.cxx | 90 +++++++++++++++ test/slot.c | 17 +-- test/slot.cpp | 17 +-- test/slot.cxx | 27 +++++ test/tuple.c | 92 +--------------- test/tuple.cpp | 92 +--------------- test/tuple.cxx | 104 ++++++++++++++++++ test/variadic.c | 46 +------- test/variadic.cpp | 46 +------- test/variadic.cxx | 56 ++++++++++ 47 files changed, 1048 insertions(+), 1066 deletions(-) create mode 100644 include/boost/preprocessor/tuple/insert.hpp create mode 100644 include/boost/preprocessor/tuple/pop_back.hpp create mode 100644 include/boost/preprocessor/tuple/pop_front.hpp create mode 100644 include/boost/preprocessor/tuple/push_back.hpp create mode 100644 include/boost/preprocessor/tuple/push_front.hpp create mode 100644 include/boost/preprocessor/tuple/remove.hpp create mode 100644 include/boost/preprocessor/tuple/replace.hpp create mode 100644 test/arithmetic.cxx create mode 100644 test/array.cxx create mode 100644 test/comparison.cxx create mode 100644 test/control.cxx create mode 100644 test/debug.cxx create mode 100644 test/facilities.cxx create mode 100644 test/list.cxx create mode 100644 test/logical.cxx create mode 100644 test/selection.cxx create mode 100644 test/seq.cxx create mode 100644 test/slot.cxx create mode 100644 test/tuple.cxx create mode 100644 test/variadic.cxx diff --git a/include/boost/preprocessor/tuple.hpp b/include/boost/preprocessor/tuple.hpp index 0f4976b..76fad36 100644 --- a/include/boost/preprocessor/tuple.hpp +++ b/include/boost/preprocessor/tuple.hpp @@ -8,7 +8,7 @@ # */ # # /* Revised by Paul Mensonides (2002) */ -# /* Revised by Edward Diener (2011) */ +# /* Revised by Edward Diener (2011,2013) */ # # /* See http://www.boost.org for most recent version. */ # @@ -18,7 +18,14 @@ # include # include # include +# include +# include +# include +# include +# include # include +# include +# include # include # include # include diff --git a/include/boost/preprocessor/tuple/insert.hpp b/include/boost/preprocessor/tuple/insert.hpp new file mode 100644 index 0000000..ce4544f --- /dev/null +++ b/include/boost/preprocessor/tuple/insert.hpp @@ -0,0 +1,37 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_INSERT_HPP +# define BOOST_PREPROCESSOR_TUPLE_INSERT_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# +# /* BOOST_PP_TUPLE_INSERT */ +# +# define BOOST_PP_TUPLE_INSERT(tuple, i, elem) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ +/**/ +# +# /* BOOST_PP_TUPLE_INSERT_D */ +# +# define BOOST_PP_TUPLE_INSERT_D(d, tuple, i, elem) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ +/**/ +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_INSERT_HPP diff --git a/include/boost/preprocessor/tuple/pop_back.hpp b/include/boost/preprocessor/tuple/pop_back.hpp new file mode 100644 index 0000000..3ac414b --- /dev/null +++ b/include/boost/preprocessor/tuple/pop_back.hpp @@ -0,0 +1,64 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP +# define BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_TUPLE_POP_BACK */ +# +# define BOOST_PP_TUPLE_POP_BACK(tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_BACK_EXEC, \ + BOOST_PP_TUPLE_POP_BACK_RETURN \ + ) \ + (tuple) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_BACK_EXEC(tuple) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_BACK_RETURN(tuple) tuple +# +# /* BOOST_PP_TUPLE_POP_BACK_Z */ +# +# define BOOST_PP_TUPLE_POP_BACK_Z(z, tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_BACK_Z_EXEC, \ + BOOST_PP_TUPLE_POP_BACK_Z_RETURN \ + ) \ + (z, tuple) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_BACK_Z_EXEC(z, tuple) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_BACK_Z_RETURN(z, tuple) tuple +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP diff --git a/include/boost/preprocessor/tuple/pop_front.hpp b/include/boost/preprocessor/tuple/pop_front.hpp new file mode 100644 index 0000000..fafaa77 --- /dev/null +++ b/include/boost/preprocessor/tuple/pop_front.hpp @@ -0,0 +1,65 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP +# define BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# include +# include +# include +# +# +# /* BOOST_PP_TUPLE_POP_FRONT */ +# +# define BOOST_PP_TUPLE_POP_FRONT(tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_FRONT_EXEC, \ + BOOST_PP_TUPLE_POP_FRONT_RETURN \ + ) \ + (tuple) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_FRONT_EXEC(tuple) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_FRONT_RETURN(tuple) tuple +# +# /* BOOST_PP_TUPLE_POP_FRONT_Z */ +# +# define BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_FRONT_Z_EXEC, \ + BOOST_PP_TUPLE_POP_FRONT_Z_RETURN \ + ) \ + (z, tuple) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_FRONT_Z_EXEC(z, tuple) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ +/**/ +# +# define BOOST_PP_TUPLE_POP_FRONT_Z_RETURN(z, tuple) tuple +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP diff --git a/include/boost/preprocessor/tuple/push_back.hpp b/include/boost/preprocessor/tuple/push_back.hpp new file mode 100644 index 0000000..2ae8f63 --- /dev/null +++ b/include/boost/preprocessor/tuple/push_back.hpp @@ -0,0 +1,31 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP +# define BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# +# /* BOOST_PP_TUPLE_PUSH_BACK */ +# +# define BOOST_PP_TUPLE_PUSH_BACK(tuple, elem) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \ +/**/ +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP diff --git a/include/boost/preprocessor/tuple/push_front.hpp b/include/boost/preprocessor/tuple/push_front.hpp new file mode 100644 index 0000000..81fea85 --- /dev/null +++ b/include/boost/preprocessor/tuple/push_front.hpp @@ -0,0 +1,32 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP +# define BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# +# +# /* BOOST_PP_TUPLE_PUSH_FRONT */ +# +# define BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \ +/**/ +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP diff --git a/include/boost/preprocessor/tuple/remove.hpp b/include/boost/preprocessor/tuple/remove.hpp new file mode 100644 index 0000000..25fa376 --- /dev/null +++ b/include/boost/preprocessor/tuple/remove.hpp @@ -0,0 +1,64 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP +# define BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# include +# include +# include +# +# /* BOOST_PP_TUPLE_REMOVE */ +# +# define BOOST_PP_TUPLE_REMOVE(tuple, i) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_REMOVE_EXEC, \ + BOOST_PP_TUPLE_REMOVE_RETURN \ + ) \ + (tuple, i) \ +/**/ +# +# define BOOST_PP_TUPLE_REMOVE_EXEC(tuple, i) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \ +/**/ +# +# define BOOST_PP_TUPLE_REMOVE_RETURN(tuple, i) tuple +# +# /* BOOST_PP_TUPLE_REMOVE_D */ +# +# define BOOST_PP_TUPLE_REMOVE_D(d, tuple, i) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER_D(d, BOOST_PP_TUPLE_SIZE(tuple), 1), \ + BOOST_PP_TUPLE_REMOVE_D_EXEC, \ + BOOST_PP_TUPLE_REMOVE_D_RETURN \ + ) \ + (d, tuple, i) \ +/**/ +# +# define BOOST_PP_TUPLE_REMOVE_D_EXEC(d, tuple, i) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \ +/**/ +# +# define BOOST_PP_TUPLE_REMOVE_D_RETURN(d, tuple, i) tuple +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP diff --git a/include/boost/preprocessor/tuple/replace.hpp b/include/boost/preprocessor/tuple/replace.hpp new file mode 100644 index 0000000..320ef9e --- /dev/null +++ b/include/boost/preprocessor/tuple/replace.hpp @@ -0,0 +1,37 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2013. +# * 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 for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP +# define BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP +# +# include +# +# if BOOST_PP_VARIADICS +# +# include +# include +# include +# +# /* BOOST_PP_TUPLE_REPLACE */ +# +# define BOOST_PP_TUPLE_REPLACE(tuple, i, elem) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ +/**/ +# +# /* BOOST_PP_TUPLE_REPLACE_D */ +# +# define BOOST_PP_TUPLE_REPLACE_D(d, tuple, i, elem) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ +/**/ +# +# endif // BOOST_PP_VARIADICS +# +# endif // BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP diff --git a/test/arithmetic.c b/test/arithmetic.c index 4512314..53a071e 100644 --- a/test/arithmetic.c +++ b/test/arithmetic.c @@ -9,54 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include - -/* addition */ - -BEGIN BOOST_PP_ADD(2, 3) == 5 END - -BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), 2) == 6 END -BEGIN BOOST_PP_ADD(2, BOOST_PP_ADD(1, 4)) == 7 END -BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), BOOST_PP_ADD(2, 2)) == 8 END - -/* subtraction */ - -BEGIN BOOST_PP_SUB(11, 0) == 11 END -BEGIN BOOST_PP_SUB(12, 1) == 11 END -BEGIN BOOST_PP_SUB(3, 4) == 0 END - -BEGIN BOOST_PP_SUB(5, BOOST_PP_SUB(3, 2)) == 4 END -BEGIN BOOST_PP_SUB(BOOST_PP_SUB(10, 5), 2) == 3 END -BEGIN BOOST_PP_SUB(BOOST_PP_SUB(7, 3), BOOST_PP_SUB(10, 8)) == 2 END - -/* multiplication */ - -BEGIN BOOST_PP_MUL(0, 1) == 0 END -BEGIN BOOST_PP_MUL(1, 0) == 0 END -BEGIN BOOST_PP_MUL(1, 1) == 1 END -BEGIN BOOST_PP_MUL(4, 3) == 12 END - -BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), 2) == 8 END -BEGIN BOOST_PP_MUL(2, BOOST_PP_MUL(2, 2)) == 8 END -BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), BOOST_PP_MUL(2, 2)) == 16 END - -/* division */ - -BEGIN BOOST_PP_DIV(2, 1) == 2 END -BEGIN BOOST_PP_DIV(0, 5) == 0 END -BEGIN BOOST_PP_DIV(7, 3) == 2 END - -BEGIN BOOST_PP_DIV(BOOST_PP_DIV(4, 2), 2) == 1 END -BEGIN BOOST_PP_DIV(10, BOOST_PP_DIV(10, 2)) == 2 END -BEGIN BOOST_PP_DIV(BOOST_PP_DIV(10, 2), BOOST_PP_DIV(4, 2)) == 2 END - -/* modulus */ - -BEGIN BOOST_PP_MOD(5, 5) == 0 END -BEGIN BOOST_PP_MOD(9, 5) == 4 END -BEGIN BOOST_PP_MOD(7, 4) == 3 END - -BEGIN BOOST_PP_MOD(BOOST_PP_MOD(5, 3), 3) == 2 END -BEGIN BOOST_PP_MOD(5, BOOST_PP_MOD(4, 3)) == 0 END +# include diff --git a/test/arithmetic.cpp b/test/arithmetic.cpp index ae12227..53a071e 100644 --- a/test/arithmetic.cpp +++ b/test/arithmetic.cpp @@ -9,54 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include - -// addition - -BEGIN BOOST_PP_ADD(2, 3) == 5 END - -BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), 2) == 6 END -BEGIN BOOST_PP_ADD(2, BOOST_PP_ADD(1, 4)) == 7 END -BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), BOOST_PP_ADD(2, 2)) == 8 END - -// subtraction - -BEGIN BOOST_PP_SUB(11, 0) == 11 END -BEGIN BOOST_PP_SUB(12, 1) == 11 END -BEGIN BOOST_PP_SUB(3, 4) == 0 END - -BEGIN BOOST_PP_SUB(5, BOOST_PP_SUB(3, 2)) == 4 END -BEGIN BOOST_PP_SUB(BOOST_PP_SUB(10, 5), 2) == 3 END -BEGIN BOOST_PP_SUB(BOOST_PP_SUB(7, 3), BOOST_PP_SUB(10, 8)) == 2 END - -// multiplication - -BEGIN BOOST_PP_MUL(0, 1) == 0 END -BEGIN BOOST_PP_MUL(1, 0) == 0 END -BEGIN BOOST_PP_MUL(1, 1) == 1 END -BEGIN BOOST_PP_MUL(4, 3) == 12 END - -BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), 2) == 8 END -BEGIN BOOST_PP_MUL(2, BOOST_PP_MUL(2, 2)) == 8 END -BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), BOOST_PP_MUL(2, 2)) == 16 END - -// division - -BEGIN BOOST_PP_DIV(2, 1) == 2 END -BEGIN BOOST_PP_DIV(0, 5) == 0 END -BEGIN BOOST_PP_DIV(7, 3) == 2 END - -BEGIN BOOST_PP_DIV(BOOST_PP_DIV(4, 2), 2) == 1 END -BEGIN BOOST_PP_DIV(10, BOOST_PP_DIV(10, 2)) == 2 END -BEGIN BOOST_PP_DIV(BOOST_PP_DIV(10, 2), BOOST_PP_DIV(4, 2)) == 2 END - -// modulus - -BEGIN BOOST_PP_MOD(5, 5) == 0 END -BEGIN BOOST_PP_MOD(9, 5) == 4 END -BEGIN BOOST_PP_MOD(7, 4) == 3 END - -BEGIN BOOST_PP_MOD(BOOST_PP_MOD(5, 3), 3) == 2 END -BEGIN BOOST_PP_MOD(5, BOOST_PP_MOD(4, 3)) == 0 END +# include diff --git a/test/arithmetic.cxx b/test/arithmetic.cxx new file mode 100644 index 0000000..4512314 --- /dev/null +++ b/test/arithmetic.cxx @@ -0,0 +1,62 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include +# include + +/* addition */ + +BEGIN BOOST_PP_ADD(2, 3) == 5 END + +BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), 2) == 6 END +BEGIN BOOST_PP_ADD(2, BOOST_PP_ADD(1, 4)) == 7 END +BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), BOOST_PP_ADD(2, 2)) == 8 END + +/* subtraction */ + +BEGIN BOOST_PP_SUB(11, 0) == 11 END +BEGIN BOOST_PP_SUB(12, 1) == 11 END +BEGIN BOOST_PP_SUB(3, 4) == 0 END + +BEGIN BOOST_PP_SUB(5, BOOST_PP_SUB(3, 2)) == 4 END +BEGIN BOOST_PP_SUB(BOOST_PP_SUB(10, 5), 2) == 3 END +BEGIN BOOST_PP_SUB(BOOST_PP_SUB(7, 3), BOOST_PP_SUB(10, 8)) == 2 END + +/* multiplication */ + +BEGIN BOOST_PP_MUL(0, 1) == 0 END +BEGIN BOOST_PP_MUL(1, 0) == 0 END +BEGIN BOOST_PP_MUL(1, 1) == 1 END +BEGIN BOOST_PP_MUL(4, 3) == 12 END + +BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), 2) == 8 END +BEGIN BOOST_PP_MUL(2, BOOST_PP_MUL(2, 2)) == 8 END +BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), BOOST_PP_MUL(2, 2)) == 16 END + +/* division */ + +BEGIN BOOST_PP_DIV(2, 1) == 2 END +BEGIN BOOST_PP_DIV(0, 5) == 0 END +BEGIN BOOST_PP_DIV(7, 3) == 2 END + +BEGIN BOOST_PP_DIV(BOOST_PP_DIV(4, 2), 2) == 1 END +BEGIN BOOST_PP_DIV(10, BOOST_PP_DIV(10, 2)) == 2 END +BEGIN BOOST_PP_DIV(BOOST_PP_DIV(10, 2), BOOST_PP_DIV(4, 2)) == 2 END + +/* modulus */ + +BEGIN BOOST_PP_MOD(5, 5) == 0 END +BEGIN BOOST_PP_MOD(9, 5) == 4 END +BEGIN BOOST_PP_MOD(7, 4) == 3 END + +BEGIN BOOST_PP_MOD(BOOST_PP_MOD(5, 3), 3) == 2 END +BEGIN BOOST_PP_MOD(5, BOOST_PP_MOD(4, 3)) == 0 END diff --git a/test/array.c b/test/array.c index 3fe3a91..9150747 100644 --- a/test/array.c +++ b/test/array.c @@ -11,83 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# if BOOST_PP_VARIADICS -# include -# include -# endif - -# define ARRAY (3, (0, 1, 2)) -# define ARRAY_LARGE (33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) -# define ARRAY_VERY_LARGE (64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) - -// element access - -BEGIN BOOST_PP_ARRAY_ELEM(1, ARRAY) == 1 END -BEGIN BOOST_PP_ARRAY_ELEM(2, (5, (0, 1, 2, 3, 4))) == 2 END -BEGIN BOOST_PP_ARRAY_ELEM(28, ARRAY_LARGE) == 28 END -BEGIN BOOST_PP_ARRAY_ELEM(17, (33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))) == 17 END -BEGIN BOOST_PP_ARRAY_ELEM(42, ARRAY_VERY_LARGE) == 42 END -BEGIN BOOST_PP_ARRAY_ELEM(62, (64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63))) == 62 END - -// size - -BEGIN BOOST_PP_ARRAY_SIZE(ARRAY) == 3 END -BEGIN BOOST_PP_ARRAY_SIZE((5, (0, 1, 2, 3, 4))) == 5 END -BEGIN BOOST_PP_ARRAY_SIZE(ARRAY_LARGE) == 33 END -BEGIN BOOST_PP_ARRAY_SIZE((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))) == 33 END -BEGIN BOOST_PP_ARRAY_SIZE(ARRAY_VERY_LARGE) == 64 END -BEGIN BOOST_PP_ARRAY_SIZE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63))) == 64 END - -// enum - -# if BOOST_PP_VARIADICS - -BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_ARRAY_ENUM(ARRAY)) == 2 END -BEGIN BOOST_PP_VARIADIC_ELEM(3,BOOST_PP_ARRAY_ENUM((5, (0, 1, 2, 3, 4)))) == 3 END -BEGIN BOOST_PP_VARIADIC_ELEM(31,BOOST_PP_ARRAY_ENUM(ARRAY_LARGE)) == 31 END -BEGIN BOOST_PP_VARIADIC_ELEM(13,BOOST_PP_ARRAY_ENUM((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)))) == 13 END -BEGIN BOOST_PP_VARIADIC_ELEM(39,BOOST_PP_ARRAY_ENUM(ARRAY_VERY_LARGE)) == 39 END -BEGIN BOOST_PP_VARIADIC_ELEM(24,BOOST_PP_ARRAY_ENUM((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 24 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM((5, (0, 1, 2, 3, 4)))) == 5 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM(ARRAY_LARGE)) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM(ARRAY_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 64 END - -# endif - -// to_list - -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST(ARRAY), 1) == 1 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST((5, (0, 1, 2, 3, 4))), 4) == 4 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))), 26) == 26 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST(ARRAY_VERY_LARGE), 60) == 60 END - -// to_seq - -BEGIN BOOST_PP_SEQ_ELEM(0, BOOST_PP_ARRAY_TO_SEQ(ARRAY)) == 0 END -BEGIN BOOST_PP_SEQ_ELEM(3, BOOST_PP_ARRAY_TO_SEQ((5, (0, 1, 2, 3, 4)))) == 3 END -BEGIN BOOST_PP_SEQ_ELEM(17, BOOST_PP_ARRAY_TO_SEQ(ARRAY_LARGE)) == 17 END -BEGIN BOOST_PP_SEQ_ELEM(42, BOOST_PP_ARRAY_TO_SEQ((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 42 END - -// to_tuple - -# if BOOST_PP_VARIADICS - -BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_ARRAY_TO_TUPLE(ARRAY)) == 2 END -BEGIN BOOST_PP_TUPLE_ELEM(1, BOOST_PP_ARRAY_TO_TUPLE((5, (0, 1, 2, 3, 4)))) == 1 END -BEGIN BOOST_PP_TUPLE_ELEM(26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 END -BEGIN BOOST_PP_TUPLE_ELEM(37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END - -# else - -BEGIN BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_ARRAY_TO_TUPLE(ARRAY)) == 2 END -BEGIN BOOST_PP_TUPLE_ELEM(5, 1, BOOST_PP_ARRAY_TO_TUPLE((5, (0, 1, 2, 3, 4)))) == 1 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END - -# endif +# include diff --git a/test/array.cpp b/test/array.cpp index 3fe3a91..9150747 100644 --- a/test/array.cpp +++ b/test/array.cpp @@ -11,83 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# if BOOST_PP_VARIADICS -# include -# include -# endif - -# define ARRAY (3, (0, 1, 2)) -# define ARRAY_LARGE (33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) -# define ARRAY_VERY_LARGE (64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) - -// element access - -BEGIN BOOST_PP_ARRAY_ELEM(1, ARRAY) == 1 END -BEGIN BOOST_PP_ARRAY_ELEM(2, (5, (0, 1, 2, 3, 4))) == 2 END -BEGIN BOOST_PP_ARRAY_ELEM(28, ARRAY_LARGE) == 28 END -BEGIN BOOST_PP_ARRAY_ELEM(17, (33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))) == 17 END -BEGIN BOOST_PP_ARRAY_ELEM(42, ARRAY_VERY_LARGE) == 42 END -BEGIN BOOST_PP_ARRAY_ELEM(62, (64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63))) == 62 END - -// size - -BEGIN BOOST_PP_ARRAY_SIZE(ARRAY) == 3 END -BEGIN BOOST_PP_ARRAY_SIZE((5, (0, 1, 2, 3, 4))) == 5 END -BEGIN BOOST_PP_ARRAY_SIZE(ARRAY_LARGE) == 33 END -BEGIN BOOST_PP_ARRAY_SIZE((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))) == 33 END -BEGIN BOOST_PP_ARRAY_SIZE(ARRAY_VERY_LARGE) == 64 END -BEGIN BOOST_PP_ARRAY_SIZE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63))) == 64 END - -// enum - -# if BOOST_PP_VARIADICS - -BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_ARRAY_ENUM(ARRAY)) == 2 END -BEGIN BOOST_PP_VARIADIC_ELEM(3,BOOST_PP_ARRAY_ENUM((5, (0, 1, 2, 3, 4)))) == 3 END -BEGIN BOOST_PP_VARIADIC_ELEM(31,BOOST_PP_ARRAY_ENUM(ARRAY_LARGE)) == 31 END -BEGIN BOOST_PP_VARIADIC_ELEM(13,BOOST_PP_ARRAY_ENUM((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)))) == 13 END -BEGIN BOOST_PP_VARIADIC_ELEM(39,BOOST_PP_ARRAY_ENUM(ARRAY_VERY_LARGE)) == 39 END -BEGIN BOOST_PP_VARIADIC_ELEM(24,BOOST_PP_ARRAY_ENUM((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 24 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM((5, (0, 1, 2, 3, 4)))) == 5 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM(ARRAY_LARGE)) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM(ARRAY_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 64 END - -# endif - -// to_list - -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST(ARRAY), 1) == 1 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST((5, (0, 1, 2, 3, 4))), 4) == 4 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))), 26) == 26 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST(ARRAY_VERY_LARGE), 60) == 60 END - -// to_seq - -BEGIN BOOST_PP_SEQ_ELEM(0, BOOST_PP_ARRAY_TO_SEQ(ARRAY)) == 0 END -BEGIN BOOST_PP_SEQ_ELEM(3, BOOST_PP_ARRAY_TO_SEQ((5, (0, 1, 2, 3, 4)))) == 3 END -BEGIN BOOST_PP_SEQ_ELEM(17, BOOST_PP_ARRAY_TO_SEQ(ARRAY_LARGE)) == 17 END -BEGIN BOOST_PP_SEQ_ELEM(42, BOOST_PP_ARRAY_TO_SEQ((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 42 END - -// to_tuple - -# if BOOST_PP_VARIADICS - -BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_ARRAY_TO_TUPLE(ARRAY)) == 2 END -BEGIN BOOST_PP_TUPLE_ELEM(1, BOOST_PP_ARRAY_TO_TUPLE((5, (0, 1, 2, 3, 4)))) == 1 END -BEGIN BOOST_PP_TUPLE_ELEM(26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 END -BEGIN BOOST_PP_TUPLE_ELEM(37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END - -# else - -BEGIN BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_ARRAY_TO_TUPLE(ARRAY)) == 2 END -BEGIN BOOST_PP_TUPLE_ELEM(5, 1, BOOST_PP_ARRAY_TO_TUPLE((5, (0, 1, 2, 3, 4)))) == 1 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END - -# endif +# include diff --git a/test/array.cxx b/test/array.cxx new file mode 100644 index 0000000..3fe3a91 --- /dev/null +++ b/test/array.cxx @@ -0,0 +1,93 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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) +# * * +# ************************************************************************** */ +# +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# include +# include +# include +# include +# if BOOST_PP_VARIADICS +# include +# include +# endif + +# define ARRAY (3, (0, 1, 2)) +# define ARRAY_LARGE (33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) +# define ARRAY_VERY_LARGE (64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) + +// element access + +BEGIN BOOST_PP_ARRAY_ELEM(1, ARRAY) == 1 END +BEGIN BOOST_PP_ARRAY_ELEM(2, (5, (0, 1, 2, 3, 4))) == 2 END +BEGIN BOOST_PP_ARRAY_ELEM(28, ARRAY_LARGE) == 28 END +BEGIN BOOST_PP_ARRAY_ELEM(17, (33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))) == 17 END +BEGIN BOOST_PP_ARRAY_ELEM(42, ARRAY_VERY_LARGE) == 42 END +BEGIN BOOST_PP_ARRAY_ELEM(62, (64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63))) == 62 END + +// size + +BEGIN BOOST_PP_ARRAY_SIZE(ARRAY) == 3 END +BEGIN BOOST_PP_ARRAY_SIZE((5, (0, 1, 2, 3, 4))) == 5 END +BEGIN BOOST_PP_ARRAY_SIZE(ARRAY_LARGE) == 33 END +BEGIN BOOST_PP_ARRAY_SIZE((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))) == 33 END +BEGIN BOOST_PP_ARRAY_SIZE(ARRAY_VERY_LARGE) == 64 END +BEGIN BOOST_PP_ARRAY_SIZE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63))) == 64 END + +// enum + +# if BOOST_PP_VARIADICS + +BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_ARRAY_ENUM(ARRAY)) == 2 END +BEGIN BOOST_PP_VARIADIC_ELEM(3,BOOST_PP_ARRAY_ENUM((5, (0, 1, 2, 3, 4)))) == 3 END +BEGIN BOOST_PP_VARIADIC_ELEM(31,BOOST_PP_ARRAY_ENUM(ARRAY_LARGE)) == 31 END +BEGIN BOOST_PP_VARIADIC_ELEM(13,BOOST_PP_ARRAY_ENUM((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)))) == 13 END +BEGIN BOOST_PP_VARIADIC_ELEM(39,BOOST_PP_ARRAY_ENUM(ARRAY_VERY_LARGE)) == 39 END +BEGIN BOOST_PP_VARIADIC_ELEM(24,BOOST_PP_ARRAY_ENUM((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 24 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM((5, (0, 1, 2, 3, 4)))) == 5 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM(ARRAY_LARGE)) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM(ARRAY_VERY_LARGE)) == 64 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_ARRAY_ENUM((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 64 END + +# endif + +// to_list + +BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST(ARRAY), 1) == 1 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST((5, (0, 1, 2, 3, 4))), 4) == 4 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST((33, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32))), 26) == 26 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_ARRAY_TO_LIST(ARRAY_VERY_LARGE), 60) == 60 END + +// to_seq + +BEGIN BOOST_PP_SEQ_ELEM(0, BOOST_PP_ARRAY_TO_SEQ(ARRAY)) == 0 END +BEGIN BOOST_PP_SEQ_ELEM(3, BOOST_PP_ARRAY_TO_SEQ((5, (0, 1, 2, 3, 4)))) == 3 END +BEGIN BOOST_PP_SEQ_ELEM(17, BOOST_PP_ARRAY_TO_SEQ(ARRAY_LARGE)) == 17 END +BEGIN BOOST_PP_SEQ_ELEM(42, BOOST_PP_ARRAY_TO_SEQ((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 42 END + +// to_tuple + +# if BOOST_PP_VARIADICS + +BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_ARRAY_TO_TUPLE(ARRAY)) == 2 END +BEGIN BOOST_PP_TUPLE_ELEM(1, BOOST_PP_ARRAY_TO_TUPLE((5, (0, 1, 2, 3, 4)))) == 1 END +BEGIN BOOST_PP_TUPLE_ELEM(26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 END +BEGIN BOOST_PP_TUPLE_ELEM(37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END + +# else + +BEGIN BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_ARRAY_TO_TUPLE(ARRAY)) == 2 END +BEGIN BOOST_PP_TUPLE_ELEM(5, 1, BOOST_PP_ARRAY_TO_TUPLE((5, (0, 1, 2, 3, 4)))) == 1 END +BEGIN BOOST_PP_TUPLE_ELEM(33, 26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 END +BEGIN BOOST_PP_TUPLE_ELEM(64, 37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END + +# endif diff --git a/test/comparison.c b/test/comparison.c index 77e7b1a..5f7daea 100644 --- a/test/comparison.c +++ b/test/comparison.c @@ -9,37 +9,5 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include +# include -/* equality */ - -BEGIN BOOST_PP_EQUAL(2, 0) == 0 END -BEGIN BOOST_PP_EQUAL(2, 2) == 1 END - -/* inequality */ - -BEGIN BOOST_PP_NOT_EQUAL(2, 0) == 1 END -BEGIN BOOST_PP_NOT_EQUAL(2, 2) == 0 END - -/* less */ - -BEGIN BOOST_PP_LESS(2, 1) == 0 END -BEGIN BOOST_PP_LESS(1, 2) == 1 END - -/* less_equal */ - -BEGIN BOOST_PP_LESS_EQUAL(2, 1) == 0 END -BEGIN BOOST_PP_LESS_EQUAL(1, 2) == 1 END -BEGIN BOOST_PP_LESS_EQUAL(2, 2) == 1 END - -/* greater */ - -BEGIN BOOST_PP_GREATER(2, 1) == 1 END -BEGIN BOOST_PP_GREATER(1, 2) == 0 END - -/* greater_equal */ - -BEGIN BOOST_PP_GREATER_EQUAL(2, 1) == 1 END -BEGIN BOOST_PP_GREATER_EQUAL(1, 2) == 0 END -BEGIN BOOST_PP_GREATER_EQUAL(2, 2) == 1 END diff --git a/test/comparison.cpp b/test/comparison.cpp index 411b9e8..40720c6 100644 --- a/test/comparison.cpp +++ b/test/comparison.cpp @@ -9,37 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -// equality - -BEGIN BOOST_PP_EQUAL(2, 0) == 0 END -BEGIN BOOST_PP_EQUAL(2, 2) == 1 END - -// inequality - -BEGIN BOOST_PP_NOT_EQUAL(2, 0) == 1 END -BEGIN BOOST_PP_NOT_EQUAL(2, 2) == 0 END - -// less - -BEGIN BOOST_PP_LESS(2, 1) == 0 END -BEGIN BOOST_PP_LESS(1, 2) == 1 END - -// less_equal - -BEGIN BOOST_PP_LESS_EQUAL(2, 1) == 0 END -BEGIN BOOST_PP_LESS_EQUAL(1, 2) == 1 END -BEGIN BOOST_PP_LESS_EQUAL(2, 2) == 1 END - -// greater - -BEGIN BOOST_PP_GREATER(2, 1) == 1 END -BEGIN BOOST_PP_GREATER(1, 2) == 0 END - -// greater_equal - -BEGIN BOOST_PP_GREATER_EQUAL(2, 1) == 1 END -BEGIN BOOST_PP_GREATER_EQUAL(1, 2) == 0 END -BEGIN BOOST_PP_GREATER_EQUAL(2, 2) == 1 END +# include diff --git a/test/comparison.cxx b/test/comparison.cxx new file mode 100644 index 0000000..77e7b1a --- /dev/null +++ b/test/comparison.cxx @@ -0,0 +1,45 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include + +/* equality */ + +BEGIN BOOST_PP_EQUAL(2, 0) == 0 END +BEGIN BOOST_PP_EQUAL(2, 2) == 1 END + +/* inequality */ + +BEGIN BOOST_PP_NOT_EQUAL(2, 0) == 1 END +BEGIN BOOST_PP_NOT_EQUAL(2, 2) == 0 END + +/* less */ + +BEGIN BOOST_PP_LESS(2, 1) == 0 END +BEGIN BOOST_PP_LESS(1, 2) == 1 END + +/* less_equal */ + +BEGIN BOOST_PP_LESS_EQUAL(2, 1) == 0 END +BEGIN BOOST_PP_LESS_EQUAL(1, 2) == 1 END +BEGIN BOOST_PP_LESS_EQUAL(2, 2) == 1 END + +/* greater */ + +BEGIN BOOST_PP_GREATER(2, 1) == 1 END +BEGIN BOOST_PP_GREATER(1, 2) == 0 END + +/* greater_equal */ + +BEGIN BOOST_PP_GREATER_EQUAL(2, 1) == 1 END +BEGIN BOOST_PP_GREATER_EQUAL(1, 2) == 0 END +BEGIN BOOST_PP_GREATER_EQUAL(2, 2) == 1 END diff --git a/test/control.c b/test/control.c index 0a2bb76..db729d9 100644 --- a/test/control.c +++ b/test/control.c @@ -9,32 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include - -# define TR(x) 1 - -BEGIN BOOST_PP_EXPR_IIF(0, TR)(0) == 0 END -BEGIN BOOST_PP_EXPR_IIF(1, TR)(0) == 1 END - -BEGIN BOOST_PP_EXPR_IF(3, TR)(0) == 1 END -BEGIN BOOST_PP_EXPR_IF(0, TR)(0) == 0 END - -BEGIN BOOST_PP_IIF(0, 1, 0) == 0 END -BEGIN BOOST_PP_IIF(1, 1, 0) == 1 END - -BEGIN BOOST_PP_IF(0, 1, 0) == 0 END -BEGIN BOOST_PP_IF(9, 1, 0) == 1 END - -# define PRED(d, state) state -# define OP_1(d, state) BOOST_PP_DEC(state) - -BEGIN BOOST_PP_WHILE(PRED, OP_1, 50) == 0 END - -# define OP_2(d, state) BOOST_PP_DEC(BOOST_PP_ADD(BOOST_PP_WHILE(PRED, OP_1, state), state)) -# define OP_3(d, state) BOOST_PP_DEC(BOOST_PP_ADD_D(d, BOOST_PP_WHILE_ ## d(PRED, OP_1, state), state)) - -BEGIN BOOST_PP_WHILE(PRED, OP_2, 10) == 0 END -BEGIN BOOST_PP_WHILE(PRED, OP_3, 10) == 0 END +# include diff --git a/test/control.cpp b/test/control.cpp index 0a2bb76..db729d9 100644 --- a/test/control.cpp +++ b/test/control.cpp @@ -9,32 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include - -# define TR(x) 1 - -BEGIN BOOST_PP_EXPR_IIF(0, TR)(0) == 0 END -BEGIN BOOST_PP_EXPR_IIF(1, TR)(0) == 1 END - -BEGIN BOOST_PP_EXPR_IF(3, TR)(0) == 1 END -BEGIN BOOST_PP_EXPR_IF(0, TR)(0) == 0 END - -BEGIN BOOST_PP_IIF(0, 1, 0) == 0 END -BEGIN BOOST_PP_IIF(1, 1, 0) == 1 END - -BEGIN BOOST_PP_IF(0, 1, 0) == 0 END -BEGIN BOOST_PP_IF(9, 1, 0) == 1 END - -# define PRED(d, state) state -# define OP_1(d, state) BOOST_PP_DEC(state) - -BEGIN BOOST_PP_WHILE(PRED, OP_1, 50) == 0 END - -# define OP_2(d, state) BOOST_PP_DEC(BOOST_PP_ADD(BOOST_PP_WHILE(PRED, OP_1, state), state)) -# define OP_3(d, state) BOOST_PP_DEC(BOOST_PP_ADD_D(d, BOOST_PP_WHILE_ ## d(PRED, OP_1, state), state)) - -BEGIN BOOST_PP_WHILE(PRED, OP_2, 10) == 0 END -BEGIN BOOST_PP_WHILE(PRED, OP_3, 10) == 0 END +# include diff --git a/test/control.cxx b/test/control.cxx new file mode 100644 index 0000000..0a2bb76 --- /dev/null +++ b/test/control.cxx @@ -0,0 +1,40 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include +# include +# include + +# define TR(x) 1 + +BEGIN BOOST_PP_EXPR_IIF(0, TR)(0) == 0 END +BEGIN BOOST_PP_EXPR_IIF(1, TR)(0) == 1 END + +BEGIN BOOST_PP_EXPR_IF(3, TR)(0) == 1 END +BEGIN BOOST_PP_EXPR_IF(0, TR)(0) == 0 END + +BEGIN BOOST_PP_IIF(0, 1, 0) == 0 END +BEGIN BOOST_PP_IIF(1, 1, 0) == 1 END + +BEGIN BOOST_PP_IF(0, 1, 0) == 0 END +BEGIN BOOST_PP_IF(9, 1, 0) == 1 END + +# define PRED(d, state) state +# define OP_1(d, state) BOOST_PP_DEC(state) + +BEGIN BOOST_PP_WHILE(PRED, OP_1, 50) == 0 END + +# define OP_2(d, state) BOOST_PP_DEC(BOOST_PP_ADD(BOOST_PP_WHILE(PRED, OP_1, state), state)) +# define OP_3(d, state) BOOST_PP_DEC(BOOST_PP_ADD_D(d, BOOST_PP_WHILE_ ## d(PRED, OP_1, state), state)) + +BEGIN BOOST_PP_WHILE(PRED, OP_2, 10) == 0 END +BEGIN BOOST_PP_WHILE(PRED, OP_3, 10) == 0 END diff --git a/test/debug.c b/test/debug.c index 6c4c5fa..7325e33 100644 --- a/test/debug.c +++ b/test/debug.c @@ -9,13 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -BEGIN sizeof(BOOST_PP_ASSERT_MSG(0, "text") "") / sizeof(char) != 1 END -BEGIN sizeof(BOOST_PP_ASSERT_MSG(1, "text") "") / sizeof(char) == 1 END - -BOOST_PP_ASSERT(10) - -# line BOOST_PP_LINE(100, __FILE__) -BEGIN __LINE__ == 100 END +# include diff --git a/test/debug.cpp b/test/debug.cpp index 6c4c5fa..7325e33 100644 --- a/test/debug.cpp +++ b/test/debug.cpp @@ -9,13 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -BEGIN sizeof(BOOST_PP_ASSERT_MSG(0, "text") "") / sizeof(char) != 1 END -BEGIN sizeof(BOOST_PP_ASSERT_MSG(1, "text") "") / sizeof(char) == 1 END - -BOOST_PP_ASSERT(10) - -# line BOOST_PP_LINE(100, __FILE__) -BEGIN __LINE__ == 100 END +# include diff --git a/test/debug.cxx b/test/debug.cxx new file mode 100644 index 0000000..6c4c5fa --- /dev/null +++ b/test/debug.cxx @@ -0,0 +1,21 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include + +BEGIN sizeof(BOOST_PP_ASSERT_MSG(0, "text") "") / sizeof(char) != 1 END +BEGIN sizeof(BOOST_PP_ASSERT_MSG(1, "text") "") / sizeof(char) == 1 END + +BOOST_PP_ASSERT(10) + +# line BOOST_PP_LINE(100, __FILE__) +BEGIN __LINE__ == 100 END diff --git a/test/facilities.c b/test/facilities.c index 31f7c77..25cef08 100644 --- a/test/facilities.c +++ b/test/facilities.c @@ -9,20 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include - -BEGIN BOOST_PP_APPLY(BOOST_PP_NIL) 0 == 0 END -BEGIN BOOST_PP_APPLY((0)) == 0 END - -BEGIN BOOST_PP_APPLY((BOOST_PP_EMPTY))() 0 == 0 END - -# define MACRO(x, y, z) 1 -# define ARGS (1, 2, 3) - -BEGIN BOOST_PP_EXPAND(MACRO ARGS) == 1 END - -BEGIN BOOST_PP_IDENTITY(1)() == 1 END - -BEGIN BOOST_PP_CAT(BOOST_PP_INTERCEPT, 2) 1 == 1 END +# include diff --git a/test/facilities.cpp b/test/facilities.cpp index 31f7c77..25cef08 100644 --- a/test/facilities.cpp +++ b/test/facilities.cpp @@ -9,20 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include - -BEGIN BOOST_PP_APPLY(BOOST_PP_NIL) 0 == 0 END -BEGIN BOOST_PP_APPLY((0)) == 0 END - -BEGIN BOOST_PP_APPLY((BOOST_PP_EMPTY))() 0 == 0 END - -# define MACRO(x, y, z) 1 -# define ARGS (1, 2, 3) - -BEGIN BOOST_PP_EXPAND(MACRO ARGS) == 1 END - -BEGIN BOOST_PP_IDENTITY(1)() == 1 END - -BEGIN BOOST_PP_CAT(BOOST_PP_INTERCEPT, 2) 1 == 1 END +# include diff --git a/test/facilities.cxx b/test/facilities.cxx new file mode 100644 index 0000000..31f7c77 --- /dev/null +++ b/test/facilities.cxx @@ -0,0 +1,28 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include +# include + +BEGIN BOOST_PP_APPLY(BOOST_PP_NIL) 0 == 0 END +BEGIN BOOST_PP_APPLY((0)) == 0 END + +BEGIN BOOST_PP_APPLY((BOOST_PP_EMPTY))() 0 == 0 END + +# define MACRO(x, y, z) 1 +# define ARGS (1, 2, 3) + +BEGIN BOOST_PP_EXPAND(MACRO ARGS) == 1 END + +BEGIN BOOST_PP_IDENTITY(1)() == 1 END + +BEGIN BOOST_PP_CAT(BOOST_PP_INTERCEPT, 2) 1 == 1 END diff --git a/test/list.c b/test/list.c index 3e83a04..23bb7b1 100644 --- a/test/list.c +++ b/test/list.c @@ -11,51 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# include -# include -# include - -# define LIST (4, (1, (5, (2, BOOST_PP_NIL)))) - -# define REVERSAL(d, x, y) BOOST_PP_SUB_D(d, y, x) - -BEGIN BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_SUB_D, 22, LIST) == 10 END -BEGIN BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_ADD_D, 0, LIST) == 12 END -BEGIN BOOST_PP_LIST_FOLD_RIGHT(REVERSAL, 0, LIST) == 4 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_REVERSE(LIST)) == 2514 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_REST_N(2, LIST)) == 52 END -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FIRST_N(2, LIST)) == 41 END - -BEGIN BOOST_PP_LIST_AT(LIST, 2) == 5 END -BEGIN BOOST_PP_LIST_SIZE(LIST) == 4 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D, 2, LIST)) == 6374 END -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_APPEND(BOOST_PP_LIST_REST(LIST), LIST)) == 1524152 END - -# define F1(r, state, x) + x + state -BEGIN BOOST_PP_LIST_FOR_EACH(F1, 1, LIST) == 16 END - -BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_LIST_TO_TUPLE(LIST)) == 2 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FILTER(BOOST_PP_LESS_D, 3, LIST)) == 45 END - -# define F2(r, x) + BOOST_PP_TUPLE_ELEM(2, 0, x) + 2 - BOOST_PP_TUPLE_ELEM(2, 1, x) -BEGIN BOOST_PP_LIST_FOR_EACH_PRODUCT(F2, 2, ( (1, (0, BOOST_PP_NIL)), (2, (3, BOOST_PP_NIL)) )) == 0 END - -# define L1 (0, (x, BOOST_PP_NIL)) -# define L2 (a, (1, (b, (2, BOOST_PP_NIL)))) -# define L3 (c, (3, (d, BOOST_PP_NIL))) - -# define LL (L1, (L2, (L3, BOOST_PP_NIL))) - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_APPEND_D, BOOST_PP_NIL, LL)) == 0x0a1b2c3d END - -BEGIN BOOST_PP_ARRAY_ELEM(2, BOOST_PP_LIST_TO_ARRAY(LIST)) == 5 END -BEGIN BOOST_PP_SEQ_ELEM(3, BOOST_PP_LIST_TO_SEQ(LIST)) == 2 END +# include diff --git a/test/list.cpp b/test/list.cpp index 3e83a04..23bb7b1 100644 --- a/test/list.cpp +++ b/test/list.cpp @@ -11,51 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# include -# include -# include - -# define LIST (4, (1, (5, (2, BOOST_PP_NIL)))) - -# define REVERSAL(d, x, y) BOOST_PP_SUB_D(d, y, x) - -BEGIN BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_SUB_D, 22, LIST) == 10 END -BEGIN BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_ADD_D, 0, LIST) == 12 END -BEGIN BOOST_PP_LIST_FOLD_RIGHT(REVERSAL, 0, LIST) == 4 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_REVERSE(LIST)) == 2514 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_REST_N(2, LIST)) == 52 END -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FIRST_N(2, LIST)) == 41 END - -BEGIN BOOST_PP_LIST_AT(LIST, 2) == 5 END -BEGIN BOOST_PP_LIST_SIZE(LIST) == 4 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D, 2, LIST)) == 6374 END -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_APPEND(BOOST_PP_LIST_REST(LIST), LIST)) == 1524152 END - -# define F1(r, state, x) + x + state -BEGIN BOOST_PP_LIST_FOR_EACH(F1, 1, LIST) == 16 END - -BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_LIST_TO_TUPLE(LIST)) == 2 END - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FILTER(BOOST_PP_LESS_D, 3, LIST)) == 45 END - -# define F2(r, x) + BOOST_PP_TUPLE_ELEM(2, 0, x) + 2 - BOOST_PP_TUPLE_ELEM(2, 1, x) -BEGIN BOOST_PP_LIST_FOR_EACH_PRODUCT(F2, 2, ( (1, (0, BOOST_PP_NIL)), (2, (3, BOOST_PP_NIL)) )) == 0 END - -# define L1 (0, (x, BOOST_PP_NIL)) -# define L2 (a, (1, (b, (2, BOOST_PP_NIL)))) -# define L3 (c, (3, (d, BOOST_PP_NIL))) - -# define LL (L1, (L2, (L3, BOOST_PP_NIL))) - -BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_APPEND_D, BOOST_PP_NIL, LL)) == 0x0a1b2c3d END - -BEGIN BOOST_PP_ARRAY_ELEM(2, BOOST_PP_LIST_TO_ARRAY(LIST)) == 5 END -BEGIN BOOST_PP_SEQ_ELEM(3, BOOST_PP_LIST_TO_SEQ(LIST)) == 2 END +# include diff --git a/test/list.cxx b/test/list.cxx new file mode 100644 index 0000000..3e83a04 --- /dev/null +++ b/test/list.cxx @@ -0,0 +1,61 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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) +# * * +# ************************************************************************** */ +# +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# include +# include +# include +# include +# include +# include +# include + +# define LIST (4, (1, (5, (2, BOOST_PP_NIL)))) + +# define REVERSAL(d, x, y) BOOST_PP_SUB_D(d, y, x) + +BEGIN BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_SUB_D, 22, LIST) == 10 END +BEGIN BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_ADD_D, 0, LIST) == 12 END +BEGIN BOOST_PP_LIST_FOLD_RIGHT(REVERSAL, 0, LIST) == 4 END + +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_REVERSE(LIST)) == 2514 END + +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_REST_N(2, LIST)) == 52 END +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FIRST_N(2, LIST)) == 41 END + +BEGIN BOOST_PP_LIST_AT(LIST, 2) == 5 END +BEGIN BOOST_PP_LIST_SIZE(LIST) == 4 END + +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D, 2, LIST)) == 6374 END +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_APPEND(BOOST_PP_LIST_REST(LIST), LIST)) == 1524152 END + +# define F1(r, state, x) + x + state +BEGIN BOOST_PP_LIST_FOR_EACH(F1, 1, LIST) == 16 END + +BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_LIST_TO_TUPLE(LIST)) == 2 END + +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FILTER(BOOST_PP_LESS_D, 3, LIST)) == 45 END + +# define F2(r, x) + BOOST_PP_TUPLE_ELEM(2, 0, x) + 2 - BOOST_PP_TUPLE_ELEM(2, 1, x) +BEGIN BOOST_PP_LIST_FOR_EACH_PRODUCT(F2, 2, ( (1, (0, BOOST_PP_NIL)), (2, (3, BOOST_PP_NIL)) )) == 0 END + +# define L1 (0, (x, BOOST_PP_NIL)) +# define L2 (a, (1, (b, (2, BOOST_PP_NIL)))) +# define L3 (c, (3, (d, BOOST_PP_NIL))) + +# define LL (L1, (L2, (L3, BOOST_PP_NIL))) + +BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_APPEND_D, BOOST_PP_NIL, LL)) == 0x0a1b2c3d END + +BEGIN BOOST_PP_ARRAY_ELEM(2, BOOST_PP_LIST_TO_ARRAY(LIST)) == 5 END +BEGIN BOOST_PP_SEQ_ELEM(3, BOOST_PP_LIST_TO_SEQ(LIST)) == 2 END diff --git a/test/logical.c b/test/logical.c index ec770a5..9f50287 100644 --- a/test/logical.c +++ b/test/logical.c @@ -9,28 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -BEGIN BOOST_PP_NOT(0) == 1 END -BEGIN BOOST_PP_NOT(2) == 0 END - -BEGIN BOOST_PP_AND(0, 0) == 0 END -BEGIN BOOST_PP_AND(0, 3) == 0 END -BEGIN BOOST_PP_AND(4, 0) == 0 END -BEGIN BOOST_PP_AND(5, 6) == 1 END - -BEGIN BOOST_PP_OR(0, 0) == 0 END -BEGIN BOOST_PP_OR(0, 7) == 1 END -BEGIN BOOST_PP_OR(8, 0) == 1 END -BEGIN BOOST_PP_OR(9, 1) == 1 END - -BEGIN BOOST_PP_XOR(0, 0) == 0 END -BEGIN BOOST_PP_XOR(0, 2) == 1 END -BEGIN BOOST_PP_XOR(3, 0) == 1 END -BEGIN BOOST_PP_XOR(4, 5) == 0 END - -BEGIN BOOST_PP_NOR(0, 0) == 1 END -BEGIN BOOST_PP_NOR(0, 6) == 0 END -BEGIN BOOST_PP_NOR(7, 0) == 0 END -BEGIN BOOST_PP_NOR(8, 9) == 0 END +# include diff --git a/test/logical.cpp b/test/logical.cpp index ec770a5..9f50287 100644 --- a/test/logical.cpp +++ b/test/logical.cpp @@ -9,28 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -BEGIN BOOST_PP_NOT(0) == 1 END -BEGIN BOOST_PP_NOT(2) == 0 END - -BEGIN BOOST_PP_AND(0, 0) == 0 END -BEGIN BOOST_PP_AND(0, 3) == 0 END -BEGIN BOOST_PP_AND(4, 0) == 0 END -BEGIN BOOST_PP_AND(5, 6) == 1 END - -BEGIN BOOST_PP_OR(0, 0) == 0 END -BEGIN BOOST_PP_OR(0, 7) == 1 END -BEGIN BOOST_PP_OR(8, 0) == 1 END -BEGIN BOOST_PP_OR(9, 1) == 1 END - -BEGIN BOOST_PP_XOR(0, 0) == 0 END -BEGIN BOOST_PP_XOR(0, 2) == 1 END -BEGIN BOOST_PP_XOR(3, 0) == 1 END -BEGIN BOOST_PP_XOR(4, 5) == 0 END - -BEGIN BOOST_PP_NOR(0, 0) == 1 END -BEGIN BOOST_PP_NOR(0, 6) == 0 END -BEGIN BOOST_PP_NOR(7, 0) == 0 END -BEGIN BOOST_PP_NOR(8, 9) == 0 END +# include diff --git a/test/logical.cxx b/test/logical.cxx new file mode 100644 index 0000000..ec770a5 --- /dev/null +++ b/test/logical.cxx @@ -0,0 +1,36 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include + +BEGIN BOOST_PP_NOT(0) == 1 END +BEGIN BOOST_PP_NOT(2) == 0 END + +BEGIN BOOST_PP_AND(0, 0) == 0 END +BEGIN BOOST_PP_AND(0, 3) == 0 END +BEGIN BOOST_PP_AND(4, 0) == 0 END +BEGIN BOOST_PP_AND(5, 6) == 1 END + +BEGIN BOOST_PP_OR(0, 0) == 0 END +BEGIN BOOST_PP_OR(0, 7) == 1 END +BEGIN BOOST_PP_OR(8, 0) == 1 END +BEGIN BOOST_PP_OR(9, 1) == 1 END + +BEGIN BOOST_PP_XOR(0, 0) == 0 END +BEGIN BOOST_PP_XOR(0, 2) == 1 END +BEGIN BOOST_PP_XOR(3, 0) == 1 END +BEGIN BOOST_PP_XOR(4, 5) == 0 END + +BEGIN BOOST_PP_NOR(0, 0) == 1 END +BEGIN BOOST_PP_NOR(0, 6) == 0 END +BEGIN BOOST_PP_NOR(7, 0) == 0 END +BEGIN BOOST_PP_NOR(8, 9) == 0 END diff --git a/test/selection.c b/test/selection.c index b528934..f8fdaba 100644 --- a/test/selection.c +++ b/test/selection.c @@ -9,13 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -BEGIN BOOST_PP_MAX(2, 2) == 2 END -BEGIN BOOST_PP_MAX(2, 1) == 2 END -BEGIN BOOST_PP_MAX(1, 2) == 2 END - -BEGIN BOOST_PP_MIN(2, 2) == 2 END -BEGIN BOOST_PP_MIN(2, 1) == 1 END -BEGIN BOOST_PP_MIN(1, 2) == 1 END +# include diff --git a/test/selection.cpp b/test/selection.cpp index b528934..f8fdaba 100644 --- a/test/selection.cpp +++ b/test/selection.cpp @@ -9,13 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -BEGIN BOOST_PP_MAX(2, 2) == 2 END -BEGIN BOOST_PP_MAX(2, 1) == 2 END -BEGIN BOOST_PP_MAX(1, 2) == 2 END - -BEGIN BOOST_PP_MIN(2, 2) == 2 END -BEGIN BOOST_PP_MIN(2, 1) == 1 END -BEGIN BOOST_PP_MIN(1, 2) == 1 END +# include diff --git a/test/selection.cxx b/test/selection.cxx new file mode 100644 index 0000000..b528934 --- /dev/null +++ b/test/selection.cxx @@ -0,0 +1,21 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include + +BEGIN BOOST_PP_MAX(2, 2) == 2 END +BEGIN BOOST_PP_MAX(2, 1) == 2 END +BEGIN BOOST_PP_MAX(1, 2) == 2 END + +BEGIN BOOST_PP_MIN(2, 2) == 2 END +BEGIN BOOST_PP_MIN(2, 1) == 1 END +BEGIN BOOST_PP_MIN(1, 2) == 1 END diff --git a/test/seq.c b/test/seq.c index 819ccb2..e36c5d1 100644 --- a/test/seq.c +++ b/test/seq.c @@ -11,80 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# include -# include - -# define SEQ (4)(1)(5)(2) - -# define REVERSAL(s, x, y) BOOST_PP_SUB(y, x) -# define SUB_S(s, x, y) BOOST_PP_SUB(x, y) -# define ADD_S(s, x, y) BOOST_PP_ADD(x, y) - -BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END -BEGIN BOOST_PP_SEQ_FOLD_RIGHT(ADD_S, 0, SEQ) == 12 END -BEGIN BOOST_PP_SEQ_FOLD_RIGHT(REVERSAL, 0, SEQ) == 4 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REVERSE(SEQ)) == 2514 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REST_N(2, SEQ)) == 52 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FIRST_N(2, SEQ)) == 41 END - -BEGIN BOOST_PP_SEQ_ELEM(2, SEQ) == 5 END -BEGIN BOOST_PP_SEQ_SIZE(SEQ) == 4 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TRANSFORM(ADD_S, 2, SEQ)) == 6374 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(SEQ) SEQ) == 1524152 END - -# define F1(r, state, x) + x + state -BEGIN BOOST_PP_SEQ_FOR_EACH(F1, 1, SEQ) == 16 END - -BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_SEQ_TO_TUPLE(SEQ)) == 2 END - -# define LESS_S(s, x, y) BOOST_PP_LESS(x, y) -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FILTER(LESS_S, 3, SEQ)) == 45 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 0, 3)) == 34152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 2, 3)) == 41352 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 4, 3)) == 41523 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_BACK(SEQ)) == 415 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_FRONT(SEQ)) == 152 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_FRONT(SEQ, 3)) == 34152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_BACK(SEQ, 3)) == 41523 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 0)) == 152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 2)) == 412 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 3)) == 415 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 0, 3)) == 3152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 1, 3)) == 4352 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 3, 3)) == 4153 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 4)) == 4152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 2)) == 41 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 1, 2)) == 15 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 2, 2)) == 52 END - -# define F2(r, x) + BOOST_PP_SEQ_ELEM(0, x) + 2 - BOOST_PP_SEQ_ELEM(1, x) - -#define ADD_NIL(x) x(nil) - -BEGIN BOOST_PP_SEQ_FOR_EACH_PRODUCT(F2, ((1)(0)) ((2)(3))) == 0 END - -# define L1 (0)(x) -# define L2 (a)(1)(b)(2) -# define L3 (c)(3)(d) - -# define LL (L1)(L2)(L3) - -#define SEQ_APPEND(s, state, elem) state elem -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 0x0a1b2c3d END -BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 9 END - -BEGIN BOOST_PP_LIST_AT(BOOST_PP_SEQ_TO_LIST(SEQ), 2) == 5 END +# include diff --git a/test/seq.cpp b/test/seq.cpp index 819ccb2..e36c5d1 100644 --- a/test/seq.cpp +++ b/test/seq.cpp @@ -11,80 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# include -# include - -# define SEQ (4)(1)(5)(2) - -# define REVERSAL(s, x, y) BOOST_PP_SUB(y, x) -# define SUB_S(s, x, y) BOOST_PP_SUB(x, y) -# define ADD_S(s, x, y) BOOST_PP_ADD(x, y) - -BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END -BEGIN BOOST_PP_SEQ_FOLD_RIGHT(ADD_S, 0, SEQ) == 12 END -BEGIN BOOST_PP_SEQ_FOLD_RIGHT(REVERSAL, 0, SEQ) == 4 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REVERSE(SEQ)) == 2514 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REST_N(2, SEQ)) == 52 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FIRST_N(2, SEQ)) == 41 END - -BEGIN BOOST_PP_SEQ_ELEM(2, SEQ) == 5 END -BEGIN BOOST_PP_SEQ_SIZE(SEQ) == 4 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TRANSFORM(ADD_S, 2, SEQ)) == 6374 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(SEQ) SEQ) == 1524152 END - -# define F1(r, state, x) + x + state -BEGIN BOOST_PP_SEQ_FOR_EACH(F1, 1, SEQ) == 16 END - -BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_SEQ_TO_TUPLE(SEQ)) == 2 END - -# define LESS_S(s, x, y) BOOST_PP_LESS(x, y) -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FILTER(LESS_S, 3, SEQ)) == 45 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 0, 3)) == 34152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 2, 3)) == 41352 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 4, 3)) == 41523 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_BACK(SEQ)) == 415 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_FRONT(SEQ)) == 152 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_FRONT(SEQ, 3)) == 34152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_BACK(SEQ, 3)) == 41523 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 0)) == 152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 2)) == 412 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 3)) == 415 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 0, 3)) == 3152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 1, 3)) == 4352 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 3, 3)) == 4153 END - -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 4)) == 4152 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 2)) == 41 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 1, 2)) == 15 END -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 2, 2)) == 52 END - -# define F2(r, x) + BOOST_PP_SEQ_ELEM(0, x) + 2 - BOOST_PP_SEQ_ELEM(1, x) - -#define ADD_NIL(x) x(nil) - -BEGIN BOOST_PP_SEQ_FOR_EACH_PRODUCT(F2, ((1)(0)) ((2)(3))) == 0 END - -# define L1 (0)(x) -# define L2 (a)(1)(b)(2) -# define L3 (c)(3)(d) - -# define LL (L1)(L2)(L3) - -#define SEQ_APPEND(s, state, elem) state elem -BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 0x0a1b2c3d END -BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 9 END - -BEGIN BOOST_PP_LIST_AT(BOOST_PP_SEQ_TO_LIST(SEQ), 2) == 5 END +# include diff --git a/test/seq.cxx b/test/seq.cxx new file mode 100644 index 0000000..819ccb2 --- /dev/null +++ b/test/seq.cxx @@ -0,0 +1,90 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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) +# * * +# ************************************************************************** */ +# +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# include +# include +# include +# include +# include +# include + +# define SEQ (4)(1)(5)(2) + +# define REVERSAL(s, x, y) BOOST_PP_SUB(y, x) +# define SUB_S(s, x, y) BOOST_PP_SUB(x, y) +# define ADD_S(s, x, y) BOOST_PP_ADD(x, y) + +BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END +BEGIN BOOST_PP_SEQ_FOLD_RIGHT(ADD_S, 0, SEQ) == 12 END +BEGIN BOOST_PP_SEQ_FOLD_RIGHT(REVERSAL, 0, SEQ) == 4 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REVERSE(SEQ)) == 2514 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REST_N(2, SEQ)) == 52 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FIRST_N(2, SEQ)) == 41 END + +BEGIN BOOST_PP_SEQ_ELEM(2, SEQ) == 5 END +BEGIN BOOST_PP_SEQ_SIZE(SEQ) == 4 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TRANSFORM(ADD_S, 2, SEQ)) == 6374 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(SEQ) SEQ) == 1524152 END + +# define F1(r, state, x) + x + state +BEGIN BOOST_PP_SEQ_FOR_EACH(F1, 1, SEQ) == 16 END + +BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_SEQ_TO_TUPLE(SEQ)) == 2 END + +# define LESS_S(s, x, y) BOOST_PP_LESS(x, y) +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FILTER(LESS_S, 3, SEQ)) == 45 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 0, 3)) == 34152 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 2, 3)) == 41352 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 4, 3)) == 41523 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_BACK(SEQ)) == 415 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_FRONT(SEQ)) == 152 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_FRONT(SEQ, 3)) == 34152 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_BACK(SEQ, 3)) == 41523 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 0)) == 152 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 2)) == 412 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 3)) == 415 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 0, 3)) == 3152 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 1, 3)) == 4352 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 3, 3)) == 4153 END + +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 4)) == 4152 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 2)) == 41 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 1, 2)) == 15 END +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 2, 2)) == 52 END + +# define F2(r, x) + BOOST_PP_SEQ_ELEM(0, x) + 2 - BOOST_PP_SEQ_ELEM(1, x) + +#define ADD_NIL(x) x(nil) + +BEGIN BOOST_PP_SEQ_FOR_EACH_PRODUCT(F2, ((1)(0)) ((2)(3))) == 0 END + +# define L1 (0)(x) +# define L2 (a)(1)(b)(2) +# define L3 (c)(3)(d) + +# define LL (L1)(L2)(L3) + +#define SEQ_APPEND(s, state, elem) state elem +BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 0x0a1b2c3d END +BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 9 END + +BEGIN BOOST_PP_LIST_AT(BOOST_PP_SEQ_TO_LIST(SEQ), 2) == 5 END diff --git a/test/slot.c b/test/slot.c index d4aee49..4b97bcd 100644 --- a/test/slot.c +++ b/test/slot.c @@ -9,19 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -# define X() 4 - -# define BOOST_PP_VALUE 1 + 2 + 3 + X() -# include BOOST_PP_ASSIGN_SLOT(1) - -# undef X - -BEGIN BOOST_PP_SLOT(1) == 10 END - -# define BOOST_PP_VALUE BOOST_PP_SLOT(1) * BOOST_PP_SLOT(1) -# include BOOST_PP_ASSIGN_SLOT(1) - -BEGIN BOOST_PP_SLOT(1) == 100 END +# include diff --git a/test/slot.cpp b/test/slot.cpp index d4aee49..4b97bcd 100644 --- a/test/slot.cpp +++ b/test/slot.cpp @@ -9,19 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include - -# define X() 4 - -# define BOOST_PP_VALUE 1 + 2 + 3 + X() -# include BOOST_PP_ASSIGN_SLOT(1) - -# undef X - -BEGIN BOOST_PP_SLOT(1) == 10 END - -# define BOOST_PP_VALUE BOOST_PP_SLOT(1) * BOOST_PP_SLOT(1) -# include BOOST_PP_ASSIGN_SLOT(1) - -BEGIN BOOST_PP_SLOT(1) == 100 END +# include diff --git a/test/slot.cxx b/test/slot.cxx new file mode 100644 index 0000000..d4aee49 --- /dev/null +++ b/test/slot.cxx @@ -0,0 +1,27 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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 for most recent version. */ +# +# include +# include + +# define X() 4 + +# define BOOST_PP_VALUE 1 + 2 + 3 + X() +# include BOOST_PP_ASSIGN_SLOT(1) + +# undef X + +BEGIN BOOST_PP_SLOT(1) == 10 END + +# define BOOST_PP_VALUE BOOST_PP_SLOT(1) * BOOST_PP_SLOT(1) +# include BOOST_PP_ASSIGN_SLOT(1) + +BEGIN BOOST_PP_SLOT(1) == 100 END diff --git a/test/tuple.c b/test/tuple.c index 598e09b..e9864a0 100644 --- a/test/tuple.c +++ b/test/tuple.c @@ -11,94 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# if BOOST_PP_VARIADICS -# include -# include -# endif -# include - -# define TUPLE (0, 1, 2, 3, 4, 5) -# define TUPLE_LARGE (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) -# define TUPLE_VERY_LARGE (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) -# define T2 (+3, /2, +6) - -#if BOOST_PP_VARIADICS - -# define CALC(x) BOOST_PP_TUPLE_ELEM(0, x) BOOST_PP_TUPLE_ELEM(1, x) BOOST_PP_TUPLE_ELEM(2, x) -# define TEST_EAT BOOST_PP_TUPLE_EAT()(1, 2) 4 -# define TEST_EAT_LARGE BOOST_PP_TUPLE_EAT()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) 6 -# define TEST_EAT_VERY_LARGE BOOST_PP_TUPLE_EAT()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 8 - -#else - -# define CALC(x) BOOST_PP_TUPLE_ELEM(3, 0, x) BOOST_PP_TUPLE_ELEM(3, 1, x) BOOST_PP_TUPLE_ELEM(3, 2, x) -# define TEST_EAT BOOST_PP_TUPLE_EAT(2)(1, 2) 4 -# define TEST_EAT_LARGE BOOST_PP_TUPLE_EAT(33)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) 6 -# define TEST_EAT_VERY_LARGE BOOST_PP_TUPLE_EAT(64)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 8 - -#endif - -BEGIN BOOST_PP_TUPLE_ELEM(6, 3, TUPLE) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(6, 5, TUPLE) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 15, TUPLE_LARGE) == 15 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 27, TUPLE_LARGE) == 27 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 32, TUPLE_LARGE) == 32 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 22, TUPLE_VERY_LARGE) == 22 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 47, TUPLE_VERY_LARGE) == 47 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 63, TUPLE_VERY_LARGE) == 63 END -BEGIN BOOST_PP_TUPLE_ELEM(6, 2, BOOST_PP_TUPLE_REVERSE(6,TUPLE)) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 27, BOOST_PP_TUPLE_REVERSE(33,TUPLE_LARGE)) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 43, BOOST_PP_TUPLE_REVERSE(64,TUPLE_VERY_LARGE)) == 20 END -BEGIN CALC(T2) == 7 END -BEGIN CALC(BOOST_PP_TUPLE_REVERSE(3, T2)) == 6 END -BEGIN TEST_EAT == 4 END -BEGIN TEST_EAT_LARGE == 6 END -BEGIN TEST_EAT_VERY_LARGE == 8 END -BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(6,TUPLE)) == 3 END -BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(33,TUPLE_LARGE)) == 29 END -BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(64,TUPLE_VERY_LARGE)) == 61 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(6,TUPLE), 2) == 2 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(33,TUPLE_LARGE), 19) == 19 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(64,TUPLE_VERY_LARGE), 62) == 62 END -BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(6,TUPLE)) == 4 END -BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(33,TUPLE_LARGE)) == 31 END -BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(64,TUPLE_VERY_LARGE)) == 55 END - -#if BOOST_PP_VARIADICS - -BEGIN BOOST_PP_TUPLE_ELEM(3, TUPLE) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(5, TUPLE) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(15, TUPLE_LARGE) == 15 END -BEGIN BOOST_PP_TUPLE_ELEM(27, TUPLE_LARGE) == 27 END -BEGIN BOOST_PP_TUPLE_ELEM(32, TUPLE_LARGE) == 32 END -BEGIN BOOST_PP_TUPLE_ELEM(22, TUPLE_VERY_LARGE) == 22 END -BEGIN BOOST_PP_TUPLE_ELEM(47, TUPLE_VERY_LARGE) == 47 END -BEGIN BOOST_PP_TUPLE_ELEM(63, TUPLE_VERY_LARGE) == 63 END -BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_TUPLE_REVERSE(TUPLE)) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(27, BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE)) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(43, BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE)) == 20 END -BEGIN CALC(BOOST_PP_TUPLE_REVERSE(T2)) == 6 END -BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE))) == 3 END -BEGIN BOOST_PP_VARIADIC_ELEM(27,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE))) == 5 END -BEGIN BOOST_PP_VARIADIC_ELEM(45,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE))) == 18 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE)) == 6 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_LARGE)) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_TUPLE_SIZE(TUPLE) == 6 END -BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_LARGE) == 33 END -BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_VERY_LARGE) == 64 END -BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(TUPLE)) == 3 END -BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_LARGE)) == 29 END -BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_VERY_LARGE)) == 61 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE), 2) == 2 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_LARGE), 19) == 19 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_VERY_LARGE), 62) == 62 END -BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(TUPLE)) == 4 END -BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(TUPLE_LARGE)) == 31 END -BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(TUPLE_VERY_LARGE)) == 55 END - -#endif +# include diff --git a/test/tuple.cpp b/test/tuple.cpp index 598e09b..e9864a0 100644 --- a/test/tuple.cpp +++ b/test/tuple.cpp @@ -11,94 +11,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# if BOOST_PP_VARIADICS -# include -# include -# endif -# include - -# define TUPLE (0, 1, 2, 3, 4, 5) -# define TUPLE_LARGE (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) -# define TUPLE_VERY_LARGE (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) -# define T2 (+3, /2, +6) - -#if BOOST_PP_VARIADICS - -# define CALC(x) BOOST_PP_TUPLE_ELEM(0, x) BOOST_PP_TUPLE_ELEM(1, x) BOOST_PP_TUPLE_ELEM(2, x) -# define TEST_EAT BOOST_PP_TUPLE_EAT()(1, 2) 4 -# define TEST_EAT_LARGE BOOST_PP_TUPLE_EAT()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) 6 -# define TEST_EAT_VERY_LARGE BOOST_PP_TUPLE_EAT()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 8 - -#else - -# define CALC(x) BOOST_PP_TUPLE_ELEM(3, 0, x) BOOST_PP_TUPLE_ELEM(3, 1, x) BOOST_PP_TUPLE_ELEM(3, 2, x) -# define TEST_EAT BOOST_PP_TUPLE_EAT(2)(1, 2) 4 -# define TEST_EAT_LARGE BOOST_PP_TUPLE_EAT(33)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) 6 -# define TEST_EAT_VERY_LARGE BOOST_PP_TUPLE_EAT(64)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 8 - -#endif - -BEGIN BOOST_PP_TUPLE_ELEM(6, 3, TUPLE) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(6, 5, TUPLE) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 15, TUPLE_LARGE) == 15 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 27, TUPLE_LARGE) == 27 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 32, TUPLE_LARGE) == 32 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 22, TUPLE_VERY_LARGE) == 22 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 47, TUPLE_VERY_LARGE) == 47 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 63, TUPLE_VERY_LARGE) == 63 END -BEGIN BOOST_PP_TUPLE_ELEM(6, 2, BOOST_PP_TUPLE_REVERSE(6,TUPLE)) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(33, 27, BOOST_PP_TUPLE_REVERSE(33,TUPLE_LARGE)) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(64, 43, BOOST_PP_TUPLE_REVERSE(64,TUPLE_VERY_LARGE)) == 20 END -BEGIN CALC(T2) == 7 END -BEGIN CALC(BOOST_PP_TUPLE_REVERSE(3, T2)) == 6 END -BEGIN TEST_EAT == 4 END -BEGIN TEST_EAT_LARGE == 6 END -BEGIN TEST_EAT_VERY_LARGE == 8 END -BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(6,TUPLE)) == 3 END -BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(33,TUPLE_LARGE)) == 29 END -BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(64,TUPLE_VERY_LARGE)) == 61 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(6,TUPLE), 2) == 2 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(33,TUPLE_LARGE), 19) == 19 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(64,TUPLE_VERY_LARGE), 62) == 62 END -BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(6,TUPLE)) == 4 END -BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(33,TUPLE_LARGE)) == 31 END -BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(64,TUPLE_VERY_LARGE)) == 55 END - -#if BOOST_PP_VARIADICS - -BEGIN BOOST_PP_TUPLE_ELEM(3, TUPLE) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(5, TUPLE) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(15, TUPLE_LARGE) == 15 END -BEGIN BOOST_PP_TUPLE_ELEM(27, TUPLE_LARGE) == 27 END -BEGIN BOOST_PP_TUPLE_ELEM(32, TUPLE_LARGE) == 32 END -BEGIN BOOST_PP_TUPLE_ELEM(22, TUPLE_VERY_LARGE) == 22 END -BEGIN BOOST_PP_TUPLE_ELEM(47, TUPLE_VERY_LARGE) == 47 END -BEGIN BOOST_PP_TUPLE_ELEM(63, TUPLE_VERY_LARGE) == 63 END -BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_TUPLE_REVERSE(TUPLE)) == 3 END -BEGIN BOOST_PP_TUPLE_ELEM(27, BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE)) == 5 END -BEGIN BOOST_PP_TUPLE_ELEM(43, BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE)) == 20 END -BEGIN CALC(BOOST_PP_TUPLE_REVERSE(T2)) == 6 END -BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE))) == 3 END -BEGIN BOOST_PP_VARIADIC_ELEM(27,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE))) == 5 END -BEGIN BOOST_PP_VARIADIC_ELEM(45,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE))) == 18 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE)) == 6 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_LARGE)) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_TUPLE_SIZE(TUPLE) == 6 END -BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_LARGE) == 33 END -BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_VERY_LARGE) == 64 END -BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(TUPLE)) == 3 END -BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_LARGE)) == 29 END -BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_VERY_LARGE)) == 61 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE), 2) == 2 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_LARGE), 19) == 19 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_VERY_LARGE), 62) == 62 END -BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(TUPLE)) == 4 END -BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(TUPLE_LARGE)) == 31 END -BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(TUPLE_VERY_LARGE)) == 55 END - -#endif +# include diff --git a/test/tuple.cxx b/test/tuple.cxx new file mode 100644 index 0000000..598e09b --- /dev/null +++ b/test/tuple.cxx @@ -0,0 +1,104 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Paul Mensonides 2002. +# * 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) +# * * +# ************************************************************************** */ +# +# /* Revised by Edward Diener (2011) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# include +# include +# include +# if BOOST_PP_VARIADICS +# include +# include +# endif +# include + +# define TUPLE (0, 1, 2, 3, 4, 5) +# define TUPLE_LARGE (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) +# define TUPLE_VERY_LARGE (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) +# define T2 (+3, /2, +6) + +#if BOOST_PP_VARIADICS + +# define CALC(x) BOOST_PP_TUPLE_ELEM(0, x) BOOST_PP_TUPLE_ELEM(1, x) BOOST_PP_TUPLE_ELEM(2, x) +# define TEST_EAT BOOST_PP_TUPLE_EAT()(1, 2) 4 +# define TEST_EAT_LARGE BOOST_PP_TUPLE_EAT()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) 6 +# define TEST_EAT_VERY_LARGE BOOST_PP_TUPLE_EAT()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 8 + +#else + +# define CALC(x) BOOST_PP_TUPLE_ELEM(3, 0, x) BOOST_PP_TUPLE_ELEM(3, 1, x) BOOST_PP_TUPLE_ELEM(3, 2, x) +# define TEST_EAT BOOST_PP_TUPLE_EAT(2)(1, 2) 4 +# define TEST_EAT_LARGE BOOST_PP_TUPLE_EAT(33)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) 6 +# define TEST_EAT_VERY_LARGE BOOST_PP_TUPLE_EAT(64)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) 8 + +#endif + +BEGIN BOOST_PP_TUPLE_ELEM(6, 3, TUPLE) == 3 END +BEGIN BOOST_PP_TUPLE_ELEM(6, 5, TUPLE) == 5 END +BEGIN BOOST_PP_TUPLE_ELEM(33, 15, TUPLE_LARGE) == 15 END +BEGIN BOOST_PP_TUPLE_ELEM(33, 27, TUPLE_LARGE) == 27 END +BEGIN BOOST_PP_TUPLE_ELEM(33, 32, TUPLE_LARGE) == 32 END +BEGIN BOOST_PP_TUPLE_ELEM(64, 22, TUPLE_VERY_LARGE) == 22 END +BEGIN BOOST_PP_TUPLE_ELEM(64, 47, TUPLE_VERY_LARGE) == 47 END +BEGIN BOOST_PP_TUPLE_ELEM(64, 63, TUPLE_VERY_LARGE) == 63 END +BEGIN BOOST_PP_TUPLE_ELEM(6, 2, BOOST_PP_TUPLE_REVERSE(6,TUPLE)) == 3 END +BEGIN BOOST_PP_TUPLE_ELEM(33, 27, BOOST_PP_TUPLE_REVERSE(33,TUPLE_LARGE)) == 5 END +BEGIN BOOST_PP_TUPLE_ELEM(64, 43, BOOST_PP_TUPLE_REVERSE(64,TUPLE_VERY_LARGE)) == 20 END +BEGIN CALC(T2) == 7 END +BEGIN CALC(BOOST_PP_TUPLE_REVERSE(3, T2)) == 6 END +BEGIN TEST_EAT == 4 END +BEGIN TEST_EAT_LARGE == 6 END +BEGIN TEST_EAT_VERY_LARGE == 8 END +BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(6,TUPLE)) == 3 END +BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(33,TUPLE_LARGE)) == 29 END +BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(64,TUPLE_VERY_LARGE)) == 61 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(6,TUPLE), 2) == 2 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(33,TUPLE_LARGE), 19) == 19 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(64,TUPLE_VERY_LARGE), 62) == 62 END +BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(6,TUPLE)) == 4 END +BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(33,TUPLE_LARGE)) == 31 END +BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(64,TUPLE_VERY_LARGE)) == 55 END + +#if BOOST_PP_VARIADICS + +BEGIN BOOST_PP_TUPLE_ELEM(3, TUPLE) == 3 END +BEGIN BOOST_PP_TUPLE_ELEM(5, TUPLE) == 5 END +BEGIN BOOST_PP_TUPLE_ELEM(15, TUPLE_LARGE) == 15 END +BEGIN BOOST_PP_TUPLE_ELEM(27, TUPLE_LARGE) == 27 END +BEGIN BOOST_PP_TUPLE_ELEM(32, TUPLE_LARGE) == 32 END +BEGIN BOOST_PP_TUPLE_ELEM(22, TUPLE_VERY_LARGE) == 22 END +BEGIN BOOST_PP_TUPLE_ELEM(47, TUPLE_VERY_LARGE) == 47 END +BEGIN BOOST_PP_TUPLE_ELEM(63, TUPLE_VERY_LARGE) == 63 END +BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_TUPLE_REVERSE(TUPLE)) == 3 END +BEGIN BOOST_PP_TUPLE_ELEM(27, BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE)) == 5 END +BEGIN BOOST_PP_TUPLE_ELEM(43, BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE)) == 20 END +BEGIN CALC(BOOST_PP_TUPLE_REVERSE(T2)) == 6 END +BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE))) == 3 END +BEGIN BOOST_PP_VARIADIC_ELEM(27,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE))) == 5 END +BEGIN BOOST_PP_VARIADIC_ELEM(45,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE))) == 18 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE)) == 6 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_LARGE)) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_VERY_LARGE)) == 64 END +BEGIN BOOST_PP_TUPLE_SIZE(TUPLE) == 6 END +BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_LARGE) == 33 END +BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_VERY_LARGE) == 64 END +BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(TUPLE)) == 3 END +BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_LARGE)) == 29 END +BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_VERY_LARGE)) == 61 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE), 2) == 2 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_LARGE), 19) == 19 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_VERY_LARGE), 62) == 62 END +BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(TUPLE)) == 4 END +BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(TUPLE_LARGE)) == 31 END +BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(TUPLE_VERY_LARGE)) == 55 END + +#endif diff --git a/test/variadic.c b/test/variadic.c index e1a3a15..a9d2532 100644 --- a/test/variadic.c +++ b/test/variadic.c @@ -9,48 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -#if BOOST_PP_VARIADICS - -#define VDATA 0,1,2,3,4,5,6 -#define VDATA_LARGE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 -#define VDATA_VERY_LARGE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 - -BEGIN BOOST_PP_VARIADIC_ELEM(4,VDATA) == 4 END -BEGIN BOOST_PP_VARIADIC_ELEM(6,7,11,3,8,14,85,56,92,165) == 56 END -BEGIN BOOST_PP_VARIADIC_ELEM(29,VDATA_LARGE) == 29 END -BEGIN BOOST_PP_VARIADIC_ELEM(57,VDATA_VERY_LARGE) == 57 END -BEGIN BOOST_PP_VARIADIC_ELEM(35, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) == 35 END -BEGIN BOOST_PP_VARIADIC_SIZE(VDATA) == 7 END -BEGIN BOOST_PP_VARIADIC_SIZE(7,11,3,8,14,85,56,92,165) == 9 END -BEGIN BOOST_PP_VARIADIC_SIZE(VDATA_LARGE) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(VDATA_VERY_LARGE) == 64 END -BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_VARIADIC_TO_ARRAY(VDATA)) == 7 END -BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_VARIADIC_TO_ARRAY(VDATA_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_ARRAY_ELEM(4,BOOST_PP_VARIADIC_TO_ARRAY(7,11,3,8,14,85,56,92,165)) == 14 END -BEGIN BOOST_PP_ARRAY_ELEM(30,BOOST_PP_VARIADIC_TO_ARRAY(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) == 30 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_VARIADIC_TO_LIST(VDATA),3) == 3 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_VARIADIC_TO_LIST(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63),49) == 49 END -BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_VARIADIC_TO_LIST(7,11,3,8,14,85,56,92,165)) == 9 END -BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_VARIADIC_TO_LIST(VDATA_LARGE)) == 33 END -BEGIN BOOST_PP_SEQ_ELEM(5,BOOST_PP_VARIADIC_TO_SEQ(VDATA)) == 5 END -BEGIN BOOST_PP_SEQ_ELEM(16,BOOST_PP_VARIADIC_TO_SEQ(VDATA_LARGE)) == 16 END -BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_VARIADIC_TO_SEQ(3,78,22,11,3)) == 5 END -BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_VARIADIC_TO_SEQ(VDATA_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_VARIADIC_TO_TUPLE(VDATA)) == 7 END -BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_VARIADIC_TO_TUPLE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) == 64 END -BEGIN BOOST_PP_TUPLE_ELEM(8,BOOST_PP_VARIADIC_TO_TUPLE(7,11,3,8,14,85,56,92,165)) == 165 END -BEGIN BOOST_PP_TUPLE_ELEM(27,BOOST_PP_VARIADIC_TO_TUPLE(VDATA_LARGE)) == 27 END - -#endif +# include diff --git a/test/variadic.cpp b/test/variadic.cpp index e1a3a15..a9d2532 100644 --- a/test/variadic.cpp +++ b/test/variadic.cpp @@ -9,48 +9,4 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -#if BOOST_PP_VARIADICS - -#define VDATA 0,1,2,3,4,5,6 -#define VDATA_LARGE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 -#define VDATA_VERY_LARGE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 - -BEGIN BOOST_PP_VARIADIC_ELEM(4,VDATA) == 4 END -BEGIN BOOST_PP_VARIADIC_ELEM(6,7,11,3,8,14,85,56,92,165) == 56 END -BEGIN BOOST_PP_VARIADIC_ELEM(29,VDATA_LARGE) == 29 END -BEGIN BOOST_PP_VARIADIC_ELEM(57,VDATA_VERY_LARGE) == 57 END -BEGIN BOOST_PP_VARIADIC_ELEM(35, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) == 35 END -BEGIN BOOST_PP_VARIADIC_SIZE(VDATA) == 7 END -BEGIN BOOST_PP_VARIADIC_SIZE(7,11,3,8,14,85,56,92,165) == 9 END -BEGIN BOOST_PP_VARIADIC_SIZE(VDATA_LARGE) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) == 33 END -BEGIN BOOST_PP_VARIADIC_SIZE(VDATA_VERY_LARGE) == 64 END -BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_VARIADIC_TO_ARRAY(VDATA)) == 7 END -BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_VARIADIC_TO_ARRAY(VDATA_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_ARRAY_ELEM(4,BOOST_PP_VARIADIC_TO_ARRAY(7,11,3,8,14,85,56,92,165)) == 14 END -BEGIN BOOST_PP_ARRAY_ELEM(30,BOOST_PP_VARIADIC_TO_ARRAY(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) == 30 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_VARIADIC_TO_LIST(VDATA),3) == 3 END -BEGIN BOOST_PP_LIST_AT(BOOST_PP_VARIADIC_TO_LIST(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63),49) == 49 END -BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_VARIADIC_TO_LIST(7,11,3,8,14,85,56,92,165)) == 9 END -BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_VARIADIC_TO_LIST(VDATA_LARGE)) == 33 END -BEGIN BOOST_PP_SEQ_ELEM(5,BOOST_PP_VARIADIC_TO_SEQ(VDATA)) == 5 END -BEGIN BOOST_PP_SEQ_ELEM(16,BOOST_PP_VARIADIC_TO_SEQ(VDATA_LARGE)) == 16 END -BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_VARIADIC_TO_SEQ(3,78,22,11,3)) == 5 END -BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_VARIADIC_TO_SEQ(VDATA_VERY_LARGE)) == 64 END -BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_VARIADIC_TO_TUPLE(VDATA)) == 7 END -BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_VARIADIC_TO_TUPLE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) == 64 END -BEGIN BOOST_PP_TUPLE_ELEM(8,BOOST_PP_VARIADIC_TO_TUPLE(7,11,3,8,14,85,56,92,165)) == 165 END -BEGIN BOOST_PP_TUPLE_ELEM(27,BOOST_PP_VARIADIC_TO_TUPLE(VDATA_LARGE)) == 27 END - -#endif +# include diff --git a/test/variadic.cxx b/test/variadic.cxx new file mode 100644 index 0000000..e1a3a15 --- /dev/null +++ b/test/variadic.cxx @@ -0,0 +1,56 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2011. +# * 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 for most recent version. */ +# +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +#if BOOST_PP_VARIADICS + +#define VDATA 0,1,2,3,4,5,6 +#define VDATA_LARGE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 +#define VDATA_VERY_LARGE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 + +BEGIN BOOST_PP_VARIADIC_ELEM(4,VDATA) == 4 END +BEGIN BOOST_PP_VARIADIC_ELEM(6,7,11,3,8,14,85,56,92,165) == 56 END +BEGIN BOOST_PP_VARIADIC_ELEM(29,VDATA_LARGE) == 29 END +BEGIN BOOST_PP_VARIADIC_ELEM(57,VDATA_VERY_LARGE) == 57 END +BEGIN BOOST_PP_VARIADIC_ELEM(35, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63) == 35 END +BEGIN BOOST_PP_VARIADIC_SIZE(VDATA) == 7 END +BEGIN BOOST_PP_VARIADIC_SIZE(7,11,3,8,14,85,56,92,165) == 9 END +BEGIN BOOST_PP_VARIADIC_SIZE(VDATA_LARGE) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(VDATA_VERY_LARGE) == 64 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_VARIADIC_TO_ARRAY(VDATA)) == 7 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_VARIADIC_TO_ARRAY(VDATA_VERY_LARGE)) == 64 END +BEGIN BOOST_PP_ARRAY_ELEM(4,BOOST_PP_VARIADIC_TO_ARRAY(7,11,3,8,14,85,56,92,165)) == 14 END +BEGIN BOOST_PP_ARRAY_ELEM(30,BOOST_PP_VARIADIC_TO_ARRAY(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) == 30 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_VARIADIC_TO_LIST(VDATA),3) == 3 END +BEGIN BOOST_PP_LIST_AT(BOOST_PP_VARIADIC_TO_LIST(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63),49) == 49 END +BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_VARIADIC_TO_LIST(7,11,3,8,14,85,56,92,165)) == 9 END +BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_VARIADIC_TO_LIST(VDATA_LARGE)) == 33 END +BEGIN BOOST_PP_SEQ_ELEM(5,BOOST_PP_VARIADIC_TO_SEQ(VDATA)) == 5 END +BEGIN BOOST_PP_SEQ_ELEM(16,BOOST_PP_VARIADIC_TO_SEQ(VDATA_LARGE)) == 16 END +BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_VARIADIC_TO_SEQ(3,78,22,11,3)) == 5 END +BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_VARIADIC_TO_SEQ(VDATA_VERY_LARGE)) == 64 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_VARIADIC_TO_TUPLE(VDATA)) == 7 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_VARIADIC_TO_TUPLE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) == 64 END +BEGIN BOOST_PP_TUPLE_ELEM(8,BOOST_PP_VARIADIC_TO_TUPLE(7,11,3,8,14,85,56,92,165)) == 165 END +BEGIN BOOST_PP_TUPLE_ELEM(27,BOOST_PP_VARIADIC_TO_TUPLE(VDATA_LARGE)) == 27 END + +#endif From b3a1643428dcda21cf20841225759d67fd91102f Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sun, 17 Nov 2013 22:05:23 +0000 Subject: [PATCH 02/14] Fix to BOOST_PP_TUPLE_REM for VC++8.0 and note in documentation about it. [SVN r86742] --- doc/ref/tuple_rem.html | 1 + include/boost/preprocessor/tuple/rem.hpp | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/ref/tuple_rem.html b/doc/ref/tuple_rem.html index dc17129..80ee441 100644 --- a/doc/ref/tuple_rem.html +++ b/doc/ref/tuple_rem.html @@ -33,6 +33,7 @@ completely so that the macro can be invoked as BOOST_PP_TUPLE_REM(); you may get functionality will still work. If you specify a size in the variadic version, it will be ignored, but the warning from some compilers will not occur.
+
Note: For Visual C++ 8.0 ( Visual Studio 2005 ) you must specify the size argument.

See Also

    diff --git a/include/boost/preprocessor/tuple/rem.hpp b/include/boost/preprocessor/tuple/rem.hpp index af668a0..270c31a 100644 --- a/include/boost/preprocessor/tuple/rem.hpp +++ b/include/boost/preprocessor/tuple/rem.hpp @@ -1,7 +1,7 @@ # /* ************************************************************************** # * * # * (C) Copyright Paul Mensonides 2002-2011. * -# * (C) Copyright Edward Diener 2011. * +# * (C) Copyright Edward Diener 2011,2013. * # * 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) * @@ -27,7 +27,10 @@ # # /* BOOST_PP_TUPLE_REM */ # -# if BOOST_PP_VARIADICS +/* + VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size) +*/ +# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER == 1400) # define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM # else # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() From e6072879862c0b3de7266a06c6907b3f05eba772 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sun, 17 Nov 2013 22:23:51 +0000 Subject: [PATCH 03/14] Updated array tests. [SVN r86743] --- test/array.cxx | 68 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/test/array.cxx b/test/array.cxx index 3fe3a91..ae3a275 100644 --- a/test/array.cxx +++ b/test/array.cxx @@ -7,7 +7,7 @@ # * * # ************************************************************************** */ # -# /* Revised by Edward Diener (2011) */ +# /* Revised by Edward Diener (2011,2013) */ # # /* See http://www.boost.org for most recent version. */ # @@ -91,3 +91,69 @@ BEGIN BOOST_PP_TUPLE_ELEM(33, 26, BOOST_PP_ARRAY_TO_TUPLE(ARRAY_LARGE)) == 26 EN BEGIN BOOST_PP_TUPLE_ELEM(64, 37, BOOST_PP_ARRAY_TO_TUPLE((64, (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)))) == 37 END # endif + +// insert + +BEGIN BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_INSERT(ARRAY,2,40)) == 0 END +BEGIN BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ARRAY_INSERT(ARRAY,1,40)) == 40 END +BEGIN BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ARRAY_INSERT(ARRAY,1,40)) == 1 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_INSERT(ARRAY,1,40)) == 4 END + +BEGIN BOOST_PP_ARRAY_ELEM(8, BOOST_PP_ARRAY_INSERT(ARRAY_LARGE,22,1000)) == 8 END +BEGIN BOOST_PP_ARRAY_ELEM(22, BOOST_PP_ARRAY_INSERT(ARRAY_LARGE,22,1000)) == 1000 END +BEGIN BOOST_PP_ARRAY_ELEM(26, BOOST_PP_ARRAY_INSERT(ARRAY_LARGE,22,1000)) == 25 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_INSERT(ARRAY_LARGE,22,1000)) == 34 END + +// pop_back + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_POP_BACK(ARRAY)) == 2 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_POP_BACK(ARRAY_LARGE)) == 32 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_POP_BACK(ARRAY_VERY_LARGE)) == 63 END + +// pop_front + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_POP_FRONT(ARRAY)) == 2 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_POP_FRONT(ARRAY_LARGE)) == 32 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_POP_FRONT(ARRAY_VERY_LARGE)) == 63 END + +BEGIN BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ARRAY_POP_FRONT(ARRAY)) == 2 END +BEGIN BOOST_PP_ARRAY_ELEM(31, BOOST_PP_ARRAY_POP_FRONT(ARRAY_LARGE)) == 32 END +BEGIN BOOST_PP_ARRAY_ELEM(55, BOOST_PP_ARRAY_POP_FRONT(ARRAY_VERY_LARGE)) == 56 END + +// push_back + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 3)) == 4 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_PUSH_BACK(ARRAY_LARGE, 33)) == 34 END +BEGIN BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 3)) == 0 END +BEGIN BOOST_PP_ARRAY_ELEM(33, BOOST_PP_ARRAY_PUSH_BACK(ARRAY_LARGE, 33)) == 33 END + +// push_front + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_PUSH_FRONT(ARRAY, 555)) == 4 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_PUSH_FRONT(ARRAY_LARGE, 666)) == 34 END +BEGIN BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_PUSH_FRONT(ARRAY, 555)) == 555 END +BEGIN BOOST_PP_ARRAY_ELEM(33, BOOST_PP_ARRAY_PUSH_FRONT(ARRAY_LARGE, 33)) == 32 END + +// remove + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_REMOVE(ARRAY, 1)) == 2 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_REMOVE(ARRAY_LARGE, 17)) == 32 END +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_REMOVE(ARRAY_VERY_LARGE, 27)) == 63 END +BEGIN BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_REMOVE(ARRAY, 2)) == 0 END +BEGIN BOOST_PP_ARRAY_ELEM(29, BOOST_PP_ARRAY_REMOVE(ARRAY_LARGE, 25)) == 30 END +BEGIN BOOST_PP_ARRAY_ELEM(62, BOOST_PP_ARRAY_REMOVE(ARRAY_VERY_LARGE, 48)) == 63 END + +// replace + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_REPLACE(ARRAY_VERY_LARGE, 27, 1000)) == 64 END +BEGIN BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_REPLACE(ARRAY, 1, 44)) == 0 END +BEGIN BOOST_PP_ARRAY_ELEM(29, BOOST_PP_ARRAY_REPLACE(ARRAY_LARGE, 29, 999)) == 999 END +BEGIN BOOST_PP_ARRAY_ELEM(38, BOOST_PP_ARRAY_REPLACE(ARRAY_VERY_LARGE, 37, 1)) == 38 END +BEGIN BOOST_PP_ARRAY_ELEM(28, BOOST_PP_ARRAY_REPLACE(ARRAY_VERY_LARGE, 28, 1)) == 1 END + +// reverse + +BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_REVERSE(ARRAY_VERY_LARGE)) == 64 END +BEGIN BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_REVERSE(ARRAY)) == 2 END +BEGIN BOOST_PP_ARRAY_ELEM(29, BOOST_PP_ARRAY_REVERSE(ARRAY_LARGE)) == 3 END +BEGIN BOOST_PP_ARRAY_ELEM(38, BOOST_PP_ARRAY_REVERSE(ARRAY_VERY_LARGE)) == 25 END From 9d3203eb71b7be07ae16c4921be13ab24b889b63 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Tue, 19 Nov 2013 02:47:23 +0000 Subject: [PATCH 04/14] Fixes for VC++ and variadic size usage. [SVN r86760] --- include/boost/preprocessor/tuple/reverse.hpp | 5 ++++- include/boost/preprocessor/tuple/to_array.hpp | 4 +++- include/boost/preprocessor/tuple/to_list.hpp | 4 +++- include/boost/preprocessor/tuple/to_seq.hpp | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/boost/preprocessor/tuple/reverse.hpp b/include/boost/preprocessor/tuple/reverse.hpp index c4f263a..489c442 100644 --- a/include/boost/preprocessor/tuple/reverse.hpp +++ b/include/boost/preprocessor/tuple/reverse.hpp @@ -18,6 +18,8 @@ # include # include # include +# include +# include # # /* BOOST_PP_TUPLE_REVERSE */ # @@ -26,10 +28,11 @@ # define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_TUPLE_REVERSE_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_REVERSE_I(m, args) BOOST_PP_TUPLE_REVERSE_II(m, args) # define BOOST_PP_TUPLE_REVERSE_II(m, args) BOOST_PP_CAT(m ## args,) +# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_TUPLE_SIZE(tuple)) tuple # else # define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__)(__VA_ARGS__) +# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple # endif -# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple # define BOOST_PP_TUPLE_REVERSE_O_2(size, tuple) BOOST_PP_TUPLE_REVERSE_O_1(tuple) # else # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() diff --git a/include/boost/preprocessor/tuple/to_array.hpp b/include/boost/preprocessor/tuple/to_array.hpp index 1b994f3..0a52811 100644 --- a/include/boost/preprocessor/tuple/to_array.hpp +++ b/include/boost/preprocessor/tuple/to_array.hpp @@ -16,6 +16,7 @@ # include # include # include +# include # include # # /* BOOST_PP_TUPLE_TO_ARRAY */ @@ -25,10 +26,11 @@ # define BOOST_PP_TUPLE_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_ARRAY_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_TO_ARRAY_I(m, args) BOOST_PP_TUPLE_TO_ARRAY_II(m, args) # define BOOST_PP_TUPLE_TO_ARRAY_II(m, args) BOOST_PP_CAT(m ## args,) +# define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_TUPLE_SIZE(tuple), tuple) # else # define BOOST_PP_TUPLE_TO_ARRAY(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_ARRAY_, __VA_ARGS__)(__VA_ARGS__) +# define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_VARIADIC_SIZE tuple, tuple) # endif -# define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_VARIADIC_SIZE tuple, tuple) # define BOOST_PP_TUPLE_TO_ARRAY_2(size, tuple) (size, tuple) # else # define BOOST_PP_TUPLE_TO_ARRAY(size, tuple) (size, tuple) diff --git a/include/boost/preprocessor/tuple/to_list.hpp b/include/boost/preprocessor/tuple/to_list.hpp index 2a9d6fe..da7828f 100644 --- a/include/boost/preprocessor/tuple/to_list.hpp +++ b/include/boost/preprocessor/tuple/to_list.hpp @@ -18,6 +18,7 @@ # include # include # include +# include # include # # /* BOOST_PP_TUPLE_TO_LIST */ @@ -27,10 +28,11 @@ # define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args) # define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,) +# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_TUPLE_SIZE(tuple)) tuple # else # define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__) +# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple # endif -# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple # define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple) # else # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() diff --git a/include/boost/preprocessor/tuple/to_seq.hpp b/include/boost/preprocessor/tuple/to_seq.hpp index 1fb7b81..8bd8485 100644 --- a/include/boost/preprocessor/tuple/to_seq.hpp +++ b/include/boost/preprocessor/tuple/to_seq.hpp @@ -16,6 +16,7 @@ # include # include # include +# include # include # # /* BOOST_PP_TUPLE_TO_SEQ */ @@ -25,10 +26,11 @@ # define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_TUPLE_TO_SEQ_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_TO_SEQ_I(m, args) BOOST_PP_TUPLE_TO_SEQ_II(m, args) # define BOOST_PP_TUPLE_TO_SEQ_II(m, args) BOOST_PP_CAT(m ## args,) +# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_TUPLE_SIZE(tuple)) tuple # else # define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__)(__VA_ARGS__) +# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple # endif -# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple # define BOOST_PP_TUPLE_TO_SEQ_O_2(size, tuple) BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) # else # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() From 864735454518d6797de2b64fd77148e346881d70 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Tue, 19 Nov 2013 04:31:38 +0000 Subject: [PATCH 05/14] Updated tuple rem documentation. [SVN r86761] --- doc/ref/tuple_rem.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ref/tuple_rem.html b/doc/ref/tuple_rem.html index 80ee441..5392e16 100644 --- a/doc/ref/tuple_rem.html +++ b/doc/ref/tuple_rem.html @@ -33,7 +33,7 @@ completely so that the macro can be invoked as BOOST_PP_TUPLE_REM(); you may get functionality will still work. If you specify a size in the variadic version, it will be ignored, but the warning from some compilers will not occur.
    -
    Note: For Visual C++ 8.0 ( Visual Studio 2005 ) you must specify the size argument.
    +
    Note: For Visual C++ 8.0 ( Visual Studio 2005 ) you must specify the correct size argument as in the non-variadic version.

    See Also

      From 25dbb38e1e3b153ef1af40dfa26759deb413700b Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Tue, 19 Nov 2013 14:53:24 +0000 Subject: [PATCH 06/14] Updated tuple tests. [SVN r86766] --- test/tuple.cxx | 118 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/test/tuple.cxx b/test/tuple.cxx index 598e09b..d5d941a 100644 --- a/test/tuple.cxx +++ b/test/tuple.cxx @@ -42,6 +42,8 @@ #endif +// elem + BEGIN BOOST_PP_TUPLE_ELEM(6, 3, TUPLE) == 3 END BEGIN BOOST_PP_TUPLE_ELEM(6, 5, TUPLE) == 5 END BEGIN BOOST_PP_TUPLE_ELEM(33, 15, TUPLE_LARGE) == 15 END @@ -50,26 +52,43 @@ BEGIN BOOST_PP_TUPLE_ELEM(33, 32, TUPLE_LARGE) == 32 END BEGIN BOOST_PP_TUPLE_ELEM(64, 22, TUPLE_VERY_LARGE) == 22 END BEGIN BOOST_PP_TUPLE_ELEM(64, 47, TUPLE_VERY_LARGE) == 47 END BEGIN BOOST_PP_TUPLE_ELEM(64, 63, TUPLE_VERY_LARGE) == 63 END + +// reverse + BEGIN BOOST_PP_TUPLE_ELEM(6, 2, BOOST_PP_TUPLE_REVERSE(6,TUPLE)) == 3 END BEGIN BOOST_PP_TUPLE_ELEM(33, 27, BOOST_PP_TUPLE_REVERSE(33,TUPLE_LARGE)) == 5 END BEGIN BOOST_PP_TUPLE_ELEM(64, 43, BOOST_PP_TUPLE_REVERSE(64,TUPLE_VERY_LARGE)) == 20 END BEGIN CALC(T2) == 7 END BEGIN CALC(BOOST_PP_TUPLE_REVERSE(3, T2)) == 6 END + +// eat + BEGIN TEST_EAT == 4 END BEGIN TEST_EAT_LARGE == 6 END BEGIN TEST_EAT_VERY_LARGE == 8 END + +// to_array + BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(6,TUPLE)) == 3 END BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(33,TUPLE_LARGE)) == 29 END BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(64,TUPLE_VERY_LARGE)) == 61 END + +// to_list + BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(6,TUPLE), 2) == 2 END BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(33,TUPLE_LARGE), 19) == 19 END BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(64,TUPLE_VERY_LARGE), 62) == 62 END + +// to_seq + BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(6,TUPLE)) == 4 END BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(33,TUPLE_LARGE)) == 31 END BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(64,TUPLE_VERY_LARGE)) == 55 END #if BOOST_PP_VARIADICS +// elem + BEGIN BOOST_PP_TUPLE_ELEM(3, TUPLE) == 3 END BEGIN BOOST_PP_TUPLE_ELEM(5, TUPLE) == 5 END BEGIN BOOST_PP_TUPLE_ELEM(15, TUPLE_LARGE) == 15 END @@ -78,6 +97,9 @@ BEGIN BOOST_PP_TUPLE_ELEM(32, TUPLE_LARGE) == 32 END BEGIN BOOST_PP_TUPLE_ELEM(22, TUPLE_VERY_LARGE) == 22 END BEGIN BOOST_PP_TUPLE_ELEM(47, TUPLE_VERY_LARGE) == 47 END BEGIN BOOST_PP_TUPLE_ELEM(63, TUPLE_VERY_LARGE) == 63 END + +// reverse + BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_TUPLE_REVERSE(TUPLE)) == 3 END BEGIN BOOST_PP_TUPLE_ELEM(27, BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE)) == 5 END BEGIN BOOST_PP_TUPLE_ELEM(43, BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE)) == 20 END @@ -85,18 +107,114 @@ BEGIN CALC(BOOST_PP_TUPLE_REVERSE(T2)) == 6 END BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE))) == 3 END BEGIN BOOST_PP_VARIADIC_ELEM(27,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_LARGE))) == 5 END BEGIN BOOST_PP_VARIADIC_ELEM(45,BOOST_PP_TUPLE_ENUM(BOOST_PP_TUPLE_REVERSE(TUPLE_VERY_LARGE))) == 18 END + +// enum + BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE)) == 6 END BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_LARGE)) == 33 END BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_ENUM(TUPLE_VERY_LARGE)) == 64 END + +// insert + +BEGIN BOOST_PP_TUPLE_ELEM(0, BOOST_PP_TUPLE_INSERT(TUPLE,2,40)) == 0 END +BEGIN BOOST_PP_TUPLE_ELEM(1, BOOST_PP_TUPLE_INSERT(TUPLE,1,40)) == 40 END +BEGIN BOOST_PP_TUPLE_ELEM(2, BOOST_PP_TUPLE_INSERT(TUPLE,1,40)) == 1 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_INSERT(TUPLE,1,40)) == 7 END + +BEGIN BOOST_PP_TUPLE_ELEM(8, BOOST_PP_TUPLE_INSERT(TUPLE_LARGE,22,1000)) == 8 END +BEGIN BOOST_PP_TUPLE_ELEM(22, BOOST_PP_TUPLE_INSERT(TUPLE_LARGE,22,1000)) == 1000 END +BEGIN BOOST_PP_TUPLE_ELEM(26, BOOST_PP_TUPLE_INSERT(TUPLE_LARGE,22,1000)) == 25 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_INSERT(TUPLE_LARGE,22,1000)) == 34 END + +// pop_back + +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_POP_BACK(TUPLE)) == 5 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_POP_BACK(TUPLE_LARGE)) == 32 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_POP_BACK(TUPLE_VERY_LARGE)) == 63 END + +// pop_front + +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_POP_FRONT(TUPLE)) == 5 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_POP_FRONT(TUPLE_LARGE)) == 32 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_POP_FRONT(TUPLE_VERY_LARGE)) == 63 END + +BEGIN BOOST_PP_TUPLE_ELEM(1, BOOST_PP_TUPLE_POP_FRONT(TUPLE)) == 2 END +BEGIN BOOST_PP_TUPLE_ELEM(31, BOOST_PP_TUPLE_POP_FRONT(TUPLE_LARGE)) == 32 END +BEGIN BOOST_PP_TUPLE_ELEM(55, BOOST_PP_TUPLE_POP_FRONT(TUPLE_VERY_LARGE)) == 56 END + +// push_back + +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_PUSH_BACK(TUPLE, 6)) == 7 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_PUSH_BACK(TUPLE_LARGE, 33)) == 34 END +BEGIN BOOST_PP_TUPLE_ELEM(0, BOOST_PP_TUPLE_PUSH_BACK(TUPLE, 6)) == 0 END +BEGIN BOOST_PP_TUPLE_ELEM(33, BOOST_PP_TUPLE_PUSH_BACK(TUPLE_LARGE, 33)) == 33 END + +// push_front + +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_PUSH_FRONT(TUPLE, 555)) == 7 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_PUSH_FRONT(TUPLE_LARGE, 666)) == 34 END +BEGIN BOOST_PP_TUPLE_ELEM(0, BOOST_PP_TUPLE_PUSH_FRONT(TUPLE, 555)) == 555 END +BEGIN BOOST_PP_TUPLE_ELEM(33, BOOST_PP_TUPLE_PUSH_FRONT(TUPLE_LARGE, 33)) == 32 END + +// rem + +#if BOOST_PP_VARIADICS_MSVC && _MSC_VER == 1400 + +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM(6)(0, 1, 2, 3, 4, 5)) == 6 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM(33)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM(64)(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) == 64 END + +#else + +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM()(0, 1, 2, 3, 4, 5)) == 6 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM()(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)) == 64 END + +#endif + +// rem_ctor + +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM_CTOR(TUPLE)) == 6 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM_CTOR(TUPLE_LARGE)) == 33 END +BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_TUPLE_REM_CTOR(TUPLE_VERY_LARGE)) == 64 END + +// remove + +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_REMOVE(TUPLE, 1)) == 5 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_REMOVE(TUPLE_LARGE, 17)) == 32 END +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_REMOVE(TUPLE_VERY_LARGE, 27)) == 63 END +BEGIN BOOST_PP_TUPLE_ELEM(0, BOOST_PP_TUPLE_REMOVE(TUPLE, 2)) == 0 END +BEGIN BOOST_PP_TUPLE_ELEM(29, BOOST_PP_TUPLE_REMOVE(TUPLE_LARGE, 25)) == 30 END +BEGIN BOOST_PP_TUPLE_ELEM(62, BOOST_PP_TUPLE_REMOVE(TUPLE_VERY_LARGE, 48)) == 63 END + +// replace + +BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_REPLACE(TUPLE_VERY_LARGE, 27, 1000)) == 64 END +BEGIN BOOST_PP_TUPLE_ELEM(0, BOOST_PP_TUPLE_REPLACE(TUPLE, 1, 44)) == 0 END +BEGIN BOOST_PP_TUPLE_ELEM(29, BOOST_PP_TUPLE_REPLACE(TUPLE_LARGE, 29, 999)) == 999 END +BEGIN BOOST_PP_TUPLE_ELEM(38, BOOST_PP_TUPLE_REPLACE(TUPLE_VERY_LARGE, 37, 1)) == 38 END +BEGIN BOOST_PP_TUPLE_ELEM(28, BOOST_PP_TUPLE_REPLACE(TUPLE_VERY_LARGE, 28, 1)) == 1 END + +// size + BEGIN BOOST_PP_TUPLE_SIZE(TUPLE) == 6 END BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_LARGE) == 33 END BEGIN BOOST_PP_TUPLE_SIZE(TUPLE_VERY_LARGE) == 64 END + +// to_array + BEGIN BOOST_PP_ARRAY_ELEM(3,BOOST_PP_TUPLE_TO_ARRAY(TUPLE)) == 3 END BEGIN BOOST_PP_ARRAY_ELEM(29,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_LARGE)) == 29 END BEGIN BOOST_PP_ARRAY_ELEM(61,BOOST_PP_TUPLE_TO_ARRAY(TUPLE_VERY_LARGE)) == 61 END + +// to_tuple + BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE), 2) == 2 END BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_LARGE), 19) == 19 END BEGIN BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(TUPLE_VERY_LARGE), 62) == 62 END + +// to_seq + BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_TUPLE_TO_SEQ(TUPLE)) == 4 END BEGIN BOOST_PP_SEQ_ELEM(31,BOOST_PP_TUPLE_TO_SEQ(TUPLE_LARGE)) == 31 END BEGIN BOOST_PP_SEQ_ELEM(55,BOOST_PP_TUPLE_TO_SEQ(TUPLE_VERY_LARGE)) == 55 END From 428b3c51039ea79c3273f00ff45d04145f19f11f Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 21 Nov 2013 18:57:41 +0000 Subject: [PATCH 07/14] The clang compiler now supports variadic macros by default. [SVN r86780] --- include/boost/preprocessor/config/config.hpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/include/boost/preprocessor/config/config.hpp b/include/boost/preprocessor/config/config.hpp index 6ea6f51..b6afbab 100644 --- a/include/boost/preprocessor/config/config.hpp +++ b/include/boost/preprocessor/config/config.hpp @@ -72,16 +72,15 @@ # # if !defined BOOST_PP_VARIADICS # /* variadic support explicitly disabled for all untested compilers */ -# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI +# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI # define BOOST_PP_VARIADICS 0 +# /* Clang, all versions */ +# elif defined __clang__ +# define BOOST_PP_VARIADICS 1 # /* VC++ (C/C++) */ # elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__ -# if _MSC_VER >= 1400 -# define BOOST_PP_VARIADICS 1 -# define BOOST_PP_VARIADICS_MSVC 1 -# else -# define BOOST_PP_VARIADICS 0 -# endif +# define BOOST_PP_VARIADICS 1 +# define BOOST_PP_VARIADICS_MSVC 1 # /* Wave (C/C++), GCC (C++) */ # elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && __GXX_EXPERIMENTAL_CXX0X__ # define BOOST_PP_VARIADICS 1 From b8eb1e01495855c54e5c9853565bd2516862164c Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 22 Nov 2013 03:38:17 +0000 Subject: [PATCH 08/14] Updated tuple docujmentation for new functionality. [SVN r86782] --- doc/headers/tuple/insert.html | 26 +++++++++++++++ doc/headers/tuple/pop_back.html | 26 +++++++++++++++ doc/headers/tuple/pop_front.html | 26 +++++++++++++++ doc/headers/tuple/push_back.html | 25 +++++++++++++++ doc/headers/tuple/push_front.html | 25 +++++++++++++++ doc/headers/tuple/remove.html | 26 +++++++++++++++ doc/headers/tuple/replace.html | 26 +++++++++++++++ doc/ref/tuple_insert.html | 53 +++++++++++++++++++++++++++++++ doc/ref/tuple_insert_d.html | 46 +++++++++++++++++++++++++++ doc/ref/tuple_pop_back.html | 48 ++++++++++++++++++++++++++++ doc/ref/tuple_pop_back_z.html | 40 +++++++++++++++++++++++ doc/ref/tuple_pop_front.html | 48 ++++++++++++++++++++++++++++ doc/ref/tuple_pop_front_z.html | 39 +++++++++++++++++++++++ doc/ref/tuple_push_back.html | 38 ++++++++++++++++++++++ doc/ref/tuple_push_front.html | 38 ++++++++++++++++++++++ doc/ref/tuple_remove.html | 49 ++++++++++++++++++++++++++++ doc/ref/tuple_remove_d.html | 41 ++++++++++++++++++++++++ doc/ref/tuple_replace.html | 50 +++++++++++++++++++++++++++++ doc/ref/tuple_replace_d.html | 42 ++++++++++++++++++++++++ 19 files changed, 712 insertions(+) create mode 100644 doc/headers/tuple/insert.html create mode 100644 doc/headers/tuple/pop_back.html create mode 100644 doc/headers/tuple/pop_front.html create mode 100644 doc/headers/tuple/push_back.html create mode 100644 doc/headers/tuple/push_front.html create mode 100644 doc/headers/tuple/remove.html create mode 100644 doc/headers/tuple/replace.html create mode 100644 doc/ref/tuple_insert.html create mode 100644 doc/ref/tuple_insert_d.html create mode 100644 doc/ref/tuple_pop_back.html create mode 100644 doc/ref/tuple_pop_back_z.html create mode 100644 doc/ref/tuple_pop_front.html create mode 100644 doc/ref/tuple_pop_front_z.html create mode 100644 doc/ref/tuple_push_back.html create mode 100644 doc/ref/tuple_push_front.html create mode 100644 doc/ref/tuple_remove.html create mode 100644 doc/ref/tuple_remove_d.html create mode 100644 doc/ref/tuple_replace.html create mode 100644 doc/ref/tuple_replace_d.html diff --git a/doc/headers/tuple/insert.html b/doc/headers/tuple/insert.html new file mode 100644 index 0000000..e6d1b8a --- /dev/null +++ b/doc/headers/tuple/insert.html @@ -0,0 +1,26 @@ + + + + tuple/insert.hpp + + + +
      The tuple/insert.hpp header defines + macros to insert an element into an tuple.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/insert.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/headers/tuple/pop_back.html b/doc/headers/tuple/pop_back.html new file mode 100644 index 0000000..23f3c24 --- /dev/null +++ b/doc/headers/tuple/pop_back.html @@ -0,0 +1,26 @@ + + + + tuple/pop_back.hpp + + + +
      The tuple/pop_back.hpp header + defines macros to pop an element from the end of an tuple.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/pop_back.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/headers/tuple/pop_front.html b/doc/headers/tuple/pop_front.html new file mode 100644 index 0000000..6a71a7a --- /dev/null +++ b/doc/headers/tuple/pop_front.html @@ -0,0 +1,26 @@ + + + + tuple/pop_front.hpp + + + +
      The tuple/pop_front.hpp header + defines macros to pop an element from the beginning of an tuple.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/pop_front.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/headers/tuple/push_back.html b/doc/headers/tuple/push_back.html new file mode 100644 index 0000000..cf3b4fc --- /dev/null +++ b/doc/headers/tuple/push_back.html @@ -0,0 +1,25 @@ + + + + tuple/push_back.hpp + + + +
      The tuple/push_back.hpp header + defines a macro to append an element to the end of an tuple.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/push_back.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/headers/tuple/push_front.html b/doc/headers/tuple/push_front.html new file mode 100644 index 0000000..567daea --- /dev/null +++ b/doc/headers/tuple/push_front.html @@ -0,0 +1,25 @@ + + + + tuple/push_front.hpp + + + +
      The tuple/push_front.hpp header + defines a macro to append an element to the beginning of an tuple.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/push_front.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/headers/tuple/remove.html b/doc/headers/tuple/remove.html new file mode 100644 index 0000000..7204a66 --- /dev/null +++ b/doc/headers/tuple/remove.html @@ -0,0 +1,26 @@ + + + + tuple/remove.hpp + + + +
      The tuple/remove.hpp header defines + macros to remove an element from an array.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/remove.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/headers/tuple/replace.html b/doc/headers/tuple/replace.html new file mode 100644 index 0000000..0cff9cf --- /dev/null +++ b/doc/headers/tuple/replace.html @@ -0,0 +1,26 @@ + + + + tuple/replace.hpp + + + +
      The tuple/replace.hpp header + defines macros to replace an element in an array.
      +

      Usage

      +
      #include <boost/preprocessor/tuple/replace.hpp> +
      +

      Contents

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_insert.html b/doc/ref/tuple_insert.html new file mode 100644 index 0000000..ba21cd5 --- /dev/null +++ b/doc/ref/tuple_insert.html @@ -0,0 +1,53 @@ + + + + BOOST_PP_TUPLE_INSERT + + + +
      The BOOST_PP_TUPLE_INSERT macro + inserts an element into an tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_INSERT(tuple, i, elem)
      +

      Arguments

      +
      +
      tuple
      +
      The tuple into which an element is to be inserted.
      +
      i
      +
      The zero-based position in tuple where an element is to be + inserted.  Valid values range from 0 to BOOST_PP_TUPLE_SIZE(tuple).
      +
      elem
      +
      The element to insert.
      +
      +

      Remarks

      +
      This macro inserts elem before the element at index i. +
      +
      If the operation attempts to create an tuple that is larger + than BOOST_PP_LIMIT_TUPLE, the result is undefined.
      +
      This macro uses BOOST_PP_WHILE interally.  Therefore, to + use the d parameter passed from other macros that use BOOST_PP_WHILE, + see BOOST_PP_TUPLE_INSERT_D.
      +

      See Also

      + +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/insert.hpp>
      +
      +#define TUPLE (a, b, d)
      +
      +BOOST_PP_TUPLE_INSERT(TUPLE, 2, c) // expands to (a, b, c, d)
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_insert_d.html b/doc/ref/tuple_insert_d.html new file mode 100644 index 0000000..ce28076 --- /dev/null +++ b/doc/ref/tuple_insert_d.html @@ -0,0 +1,46 @@ + + + + BOOST_PP_TUPLE_INSERT_D + + + +
      The BOOST_PP_TUPLE_INSERT_D macro + inserts an element into a tuple.  It reenters BOOST_PP_WHILE + with maximum efficiency.
      +

      Usage

      +
      BOOST_PP_TUPLE_INSERT_D(d, tuple, + i, elem)
      +

      Arguments

      +
      +
      d
      +
      The next available BOOST_PP_WHILE iteration.
      +
      tuple
      +
      The tuple into which an element is to be inserted.
      +
      i
      +
      The zero-based position in tuple where an element is to be + inserted.  Valid values range from 0 to BOOST_PP_TUPLE_SIZE(tuple).
      +
      elem
      +
      The element to insert.
      +
      +

      Remarks

      +
      This macro inserts elem before the element at index i. +
      +
      If the operation attempts to create an tuple that is larger + than BOOST_PP_LIMIT_TUPLE, the result is undefined.
      +

      See Also

      + +

      Requirements

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_pop_back.html b/doc/ref/tuple_pop_back.html new file mode 100644 index 0000000..470bc69 --- /dev/null +++ b/doc/ref/tuple_pop_back.html @@ -0,0 +1,48 @@ + + + + BOOST_PP_TUPLE_POP_BACK + + + +
      The BOOST_PP_TUPLE_POP_BACK macro + pops an element from the end of an tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_POP_BACK(tuple)
      +

      Arguments

      +
      +
      tuple
      +
      The tuple to pop an element from.
      +
      +

      Remarks

      +
      This macro returns tuple + after removing the last element.  If tuple has only a single + element, it remains unchanged since a tuple must have at + least one element.
      +
      This macro uses BOOST_PP_REPEAT internally.  Therefore, + to use the z parameter passed from other macros that use BOOST_PP_REPEAT, + see BOOST_PP_TUPLE_POP_BACK_Z
      +

      See Also

      + +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/pop_back.hpp>
      +
      +#define TUPLE (a, b, c)
      +
      +BOOST_PP_TUPLE_POP_BACK(TUPLE) // expands to (a, b)
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_pop_back_z.html b/doc/ref/tuple_pop_back_z.html new file mode 100644 index 0000000..b38c788 --- /dev/null +++ b/doc/ref/tuple_pop_back_z.html @@ -0,0 +1,40 @@ + + + + BOOST_PP_TUPLE_POP_BACK_Z + + + +
      The BOOST_PP_TUPLE_POP_BACK_Z macro + pops an element from the end of an tuple.  It reenters BOOST_PP_REPEAT + with maximum efficiency.
      +

      Usage

      +
      BOOST_PP_TUPLE_POP_BACK_Z(z, tuple)
      +

      Arguments

      +
      +
      z
      +
      The next available BOOST_PP_REPEAT dimension.
      +
      tuple
      +
      The tuple to pop an element from.
      +
      +

      Remarks

      +
      This macro returns tuple after removing the last + element.  + If tuple has only a single element, it remains unchanged since + a tuple must have at least one element.
      +

      See Also

      + +

      Requirements

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_pop_front.html b/doc/ref/tuple_pop_front.html new file mode 100644 index 0000000..45d46b4 --- /dev/null +++ b/doc/ref/tuple_pop_front.html @@ -0,0 +1,48 @@ + + + + BOOST_PP_TUPLE_POP_FRONT + + + +
      The BOOST_PP_TUPLE_POP_FRONT macro + pops an element from the beginning of a tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_POP_FRONT(tuple)
      +

      Arguments

      +
      +
      tuple
      +
      The tuple to pop an element from.
      +
      +

      Remarks

      +
      This macro returns tuple after removing the first + element.  + If tuple has only a single element, it remains unchanged since + a tuple must have at least one element.
      +
      This macro uses BOOST_PP_REPEAT internally.  Therefore, + to use the z parameter passed from other macros that use BOOST_PP_REPEAT, + see BOOST_PP_TUPLE_POP_FRONT_Z
      +

      See Also

      + +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/pop_front.hpp>
      +
      +#define TUPLE (a, b, c)
      +
      +BOOST_PP_TUPLE_POP_FRONT(TUPLE) // expands to (b, c)
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_pop_front_z.html b/doc/ref/tuple_pop_front_z.html new file mode 100644 index 0000000..5286233 --- /dev/null +++ b/doc/ref/tuple_pop_front_z.html @@ -0,0 +1,39 @@ + + + + BOOST_PP_TUPLE_POP_FRONT_Z + + + +
      The BOOST_PP_TUPLE_POP_FRONT_Z + macro pops an element from the beginning of a tuple.  It + reenters BOOST_PP_REPEAT with maximum efficiency.
      +

      Usage

      +
      BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple)
      +

      Arguments

      +
      +
      z
      +
      The next available BOOST_PP_REPEAT dimension.
      +
      tuple
      +
      The tuple to pop an element from.
      +
      +

      Remarks

      +
      This macro returns tuple after removing the first + element.  If tuple has only a single element, it remains + unchanged since a tuple must have at least one element.
      +

      See Also

      + +

      Requirements

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_push_back.html b/doc/ref/tuple_push_back.html new file mode 100644 index 0000000..4633457 --- /dev/null +++ b/doc/ref/tuple_push_back.html @@ -0,0 +1,38 @@ + + + + BOOST_PP_TUPLE_PUSH_BACK + + + +
      The BOOST_PP_TUPLE_PUSH_BACK macro + appends an element to the end of a tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_PUSH_BACK(tuple, elem)
      +

      Arguments

      +
      +
      tuple
      +
      The tuple to append an element to.
      +
      elem
      +
      The element to append.
      +
      +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/push_back.hpp>
      +
      +#define TUPLE (a, b, c)
      +
      +BOOST_PP_TUPLE_PUSH_BACK(TUPLE, d) // expands to (a, b, c, d)
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanyig file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_push_front.html b/doc/ref/tuple_push_front.html new file mode 100644 index 0000000..164791c --- /dev/null +++ b/doc/ref/tuple_push_front.html @@ -0,0 +1,38 @@ + + + + BOOST_PP_TUPLE_PUSH_FRONT + + + +
      The BOOST_PP_TUPLE_PUSH_FRONT macro + appends an element to the beginning of a tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem)
      +

      Arguments

      +
      +
      tuple
      +
      The tuple to append an element to.
      +
      elem
      +
      The element to append.
      +
      +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/push_front.hpp>
      +
      +#define TUPLE (b, c, d)
      +
      +BOOST_PP_TUPLE_PUSH_FRONT(TUPLE, a) // expands to (a, b, c, d)
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_remove.html b/doc/ref/tuple_remove.html new file mode 100644 index 0000000..5e3396f --- /dev/null +++ b/doc/ref/tuple_remove.html @@ -0,0 +1,49 @@ + + + + BOOST_PP_TUPLE_REMOVE + + + +
      The BOOST_PP_TUPLE_REMOVE macro + removes an element from a tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_REMOVE(tuple, i)
      +

      Arguments

      +
      +
      tuple
      +
      The tuple from which an element is to be removed.
      +
      i
      +
      The zero-based position in tuple of the element to be + removed.  Valid values range from 0 to BOOST_PP_TUPLE_SIZE(tuple) + - 1. If tuple has only a single element, it remains + unchanged since a tuple must have at least one element.
      +
      +

      Remarks

      +
      This macro uses BOOST_PP_WHILE interally.  Therefore, to + use the d parameter passed from other macros that use BOOST_PP_WHILE, + see BOOST_PP_TUPLE_REMOVE_D.
      +

      See Also

      + +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/remove.hpp>
      +
      +#define TUPLE (a, b, d)
      +
      +BOOST_PP_TUPLE_REMOVE(TUPLE, 2) // expands to (a, b)
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_remove_d.html b/doc/ref/tuple_remove_d.html new file mode 100644 index 0000000..3b6cab9 --- /dev/null +++ b/doc/ref/tuple_remove_d.html @@ -0,0 +1,41 @@ + + + + BOOST_PP_TUPLE_REMOVE_D + + + +
      The BOOST_PP_TUPLE_REMOVE_D macro + removes an element from a tuple.  It reenters BOOST_PP_WHILE + with maximum efficiency.
      +

      Usage

      +
      BOOST_PP_TUPLE_REMOVE_D(d, tuple, + i)
      +

      Arguments

      +
      +
      d
      +
      The next available BOOST_PP_WHILE iteration.
      +
      tuple
      +
      The tuple from which an element is to be removed.
      +
      i
      +
      The zero-based position in tuple of the element to be + removed.  Valid values range from 0 to BOOST_PP_TUPLE_SIZE(tuple) + - 1. If tuple has only a single element, it remains + unchanged since a tuple must have at least one element.
      +
      +

      See Also

      + +

      Requirements

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_replace.html b/doc/ref/tuple_replace.html new file mode 100644 index 0000000..7931038 --- /dev/null +++ b/doc/ref/tuple_replace.html @@ -0,0 +1,50 @@ + + + + BOOST_PP_TUPLE_REPLACE + + + +
      The BOOST_PP_TUPLE_REPLACE macro + replaces an element in a tuple.
      +

      Usage

      +
      BOOST_PP_TUPLE_REPLACE(tuple, i, elem)
      +

      Arguments

      +
      +
      tuple
      +
      A tuple to replace an element in.
      +
      i
      +
      The zero-based position in tuple of the element to be + replaced.  Valid values range from 0 to BOOST_PP_TUPLE_SIZE(tuple) + - 1.
      +
      elem
      +
      The replacement element.
      +
      +

      Remarks

      +
      This macro uses BOOST_PP_WHILE interally.  Therefore, to + use the d parameter passed from other macros that use BOOST_PP_WHILE, + see BOOST_PP_TUPLE_REPLACE_D.
      +

      See Also

      + +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/tuple/replace.hpp>
      +
      +#define TUPLE (a, x, c)
      +
      +BOOST_PP_TUPLE_REPLACE(TUPLE, 1, b) // expands to (a, b, c))
      +
      +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + diff --git a/doc/ref/tuple_replace_d.html b/doc/ref/tuple_replace_d.html new file mode 100644 index 0000000..63dd12d --- /dev/null +++ b/doc/ref/tuple_replace_d.html @@ -0,0 +1,42 @@ + + + + BOOST_PP_TUPLE_REPLACE_D + + + +
      The BOOST_PP_TUPLE_REPLACE_D macro + replaces an element in a tuple.  It reenters BOOST_PP_WHILE + with maximum efficiency.
      +

      Usage

      +
      BOOST_PP_TUPLE_REPLACE_D(d, tuple, + i, elem)
      +

      Arguments

      +
      +
      d
      +
      The next available BOOST_PP_WHILE iteration.
      +
      tuple
      +
      A tuple to replace an element in.
      +
      i
      +
      The zero-based position in tuple of the element to be + replaced.  Valid values range from 0 to BOOST_PP_TUPLE_SIZE(tuple) + - 1.
      +
      elem
      +
      The replacement element.
      +
      +

      See Also

      + +

      Requirements

      + +
      +
      © Copyright Edward Diener 2013
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + + From e9bdfe52766b26b322d51b905df0c3a951f2f638 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 22 Nov 2013 04:00:54 +0000 Subject: [PATCH 09/14] Corrected description. [SVN r86783] --- doc/ref/array_pop_front.html | 96 +++++++++++++++++------------------- 1 file changed, 44 insertions(+), 52 deletions(-) diff --git a/doc/ref/array_pop_front.html b/doc/ref/array_pop_front.html index bac211a..0c3718d 100644 --- a/doc/ref/array_pop_front.html +++ b/doc/ref/array_pop_front.html @@ -1,59 +1,51 @@ - - BOOST_PP_ARRAY_POP_FRONT - - - -
      - The BOOST_PP_ARRAY_POP_FRONT macro pops an element from the end of an array. -
      -

      Usage

      -
      - BOOST_PP_ARRAY_POP_FRONT(array) -
      -

      Arguments

      -
      -
      array
      -
      - The array to pop an element from. -
      -
      -

      Remarks

      -
      - This macro returns array after removing the first element.  - If array has no elements, the result of applying this macro is undefined. -
      -
      - This macro uses BOOST_PP_REPEAT internally.  - Therefore, to use the z parameter passed from other macros that use - BOOST_PP_REPEAT, see BOOST_PP_ARRAY_POP_FRONT_Z -
      -

      See Also

      - -

      Requirements

      - -

      Sample Code

      -
      -#include <boost/preprocessor/array/pop_front.hpp>
      +  
      +    
      +    BOOST_PP_ARRAY_POP_FRONT
      +    
      +  
      +  
      +    
      The BOOST_PP_ARRAY_POP_FRONT macro + pops an element from the beginning of an array.
      +

      Usage

      +
      BOOST_PP_ARRAY_POP_FRONT(array)
      +

      Arguments

      +
      +
      array
      +
      The array to pop an element from.
      +
      +

      Remarks

      +
      This macro returns array after removing the first + element.  If array has no elements, the result of applying + this macro is undefined.
      +
      This macro uses BOOST_PP_REPEAT internally.  Therefore, + to use the z parameter passed from other macros that use BOOST_PP_REPEAT, + see BOOST_PP_ARRAY_POP_FRONT_Z
      +

      See Also

      + +

      Requirements

      + +

      Sample Code

      +
      +
      #include <boost/preprocessor/array/pop_front.hpp>
       
       #define ARRAY (3, (a, b, c))
       
       BOOST_PP_ARRAY_POP_FRONT(ARRAY) // expands to (2, (b, c))
       
      -
      -
      - © Copyright Housemarque Oy 2002 -
      © Copyright Paul Mensonides 2002 -
      -
      -

      Distributed under the Boost Software License, Version 1.0. (See - accompanying file LICENSE_1_0.txt or - copy at www.boost.org/LICENSE_1_0.txt)

      -
      - +
      +
      © Copyright Housemarque Oy 2002
      + © Copyright Paul Mensonides 2002
      +
      © Copyright Edward Diener 2013
      +
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + From b03b732a196ab5beda598ed540698dd203628a15 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sat, 23 Nov 2013 03:59:40 +0000 Subject: [PATCH 10/14] Updated documentation for tuples. [SVN r86788] --- doc/headers.html | 472 ++++++++++++----------- doc/headers/tuple.html | 88 +++-- doc/headers/tuple/insert.html | 5 +- doc/headers/tuple/pop_back.html | 6 +- doc/headers/tuple/pop_front.html | 6 +- doc/headers/tuple/push_back.html | 3 +- doc/headers/tuple/push_front.html | 3 +- doc/headers/tuple/remove.html | 5 +- doc/headers/tuple/replace.html | 6 +- doc/ref.html | 609 +++++++++++++++--------------- doc/ref/tuple_insert.html | 3 +- doc/ref/tuple_insert_d.html | 2 +- doc/ref/tuple_pop_back.html | 2 +- doc/ref/tuple_pop_back_z.html | 8 +- doc/ref/tuple_pop_front.html | 7 +- doc/ref/tuple_pop_front_z.html | 3 +- doc/ref/tuple_push_back.html | 3 +- doc/ref/tuple_push_front.html | 3 +- doc/ref/tuple_remove.html | 3 +- doc/ref/tuple_remove_d.html | 2 +- doc/ref/tuple_replace.html | 3 +- doc/ref/tuple_replace_d.html | 2 +- 22 files changed, 653 insertions(+), 591 deletions(-) diff --git a/doc/headers.html b/doc/headers.html index 712b05e..90b59fd 100644 --- a/doc/headers.html +++ b/doc/headers.html @@ -1,233 +1,247 @@ - - headers.html - - - - - -

      Headers [back] -

      - - - + + +

      Headers [back] +

      + + + diff --git a/doc/headers/tuple.html b/doc/headers/tuple.html index 4117e89..96da3cb 100644 --- a/doc/headers/tuple.html +++ b/doc/headers/tuple.html @@ -1,37 +1,59 @@ - + + tuple.hpp - - - -
      - The tuple.hpp includes the headers in the tuple folder. -
      -

      Usage

      -
      - #include <boost/preprocessor/tuple.hpp> -
      -

      Includes

      + + + +
      The tuple.hpp includes the headers + in the tuple folder.
      +

      Usage

      +
      #include <boost/preprocessor/tuple.hpp>
      +

      Includes

      -
      -
      - © Copyright Housemarque Oy 2002 -
      © Copyright Paul Mensonides 2002 -
      -
      -

      Distributed under the Boost Software License, Version 1.0. (See - accompanying file LICENSE_1_0.txt or - copy at www.boost.org/LICENSE_1_0.txt)

      -
      - +
    • <boost/preprocessor/tuple/eat.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/elem.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/enum.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/insert.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/pop_back.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/pop_front.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/push_back.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/push_front.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/rem.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/remove.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/replace.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/reverse.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/size.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/to_array.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/to_list.hpp> + (v)
    • +
    • <boost/preprocessor/tuple/to_seq.hpp> + (v)
    • +
    +
    +
    © Copyright Housemarque Oy 2002
    + © Copyright Paul Mensonides 2002
    +
    © Copyright Edward Diener 2013
    +
    +
    +

    Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

    +
    + diff --git a/doc/headers/tuple/insert.html b/doc/headers/tuple/insert.html index e6d1b8a..2af84b4 100644 --- a/doc/headers/tuple/insert.html +++ b/doc/headers/tuple/insert.html @@ -12,8 +12,9 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/headers/tuple/pop_back.html b/doc/headers/tuple/pop_back.html index 23f3c24..e6edefc 100644 --- a/doc/headers/tuple/pop_back.html +++ b/doc/headers/tuple/pop_back.html @@ -12,8 +12,10 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/headers/tuple/pop_front.html b/doc/headers/tuple/pop_front.html index 6a71a7a..633acdb 100644 --- a/doc/headers/tuple/pop_front.html +++ b/doc/headers/tuple/pop_front.html @@ -12,8 +12,10 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/headers/tuple/push_back.html b/doc/headers/tuple/push_back.html index cf3b4fc..9cedd21 100644 --- a/doc/headers/tuple/push_back.html +++ b/doc/headers/tuple/push_back.html @@ -12,7 +12,8 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/headers/tuple/push_front.html b/doc/headers/tuple/push_front.html index 567daea..7d5510b 100644 --- a/doc/headers/tuple/push_front.html +++ b/doc/headers/tuple/push_front.html @@ -12,7 +12,8 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/headers/tuple/remove.html b/doc/headers/tuple/remove.html index 7204a66..651113c 100644 --- a/doc/headers/tuple/remove.html +++ b/doc/headers/tuple/remove.html @@ -12,8 +12,9 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/headers/tuple/replace.html b/doc/headers/tuple/replace.html index 0cff9cf..03ca25d 100644 --- a/doc/headers/tuple/replace.html +++ b/doc/headers/tuple/replace.html @@ -12,8 +12,10 @@

    Contents


    © Copyright Edward Diener 2013
    diff --git a/doc/ref.html b/doc/ref.html index 145753d..82c2905 100644 --- a/doc/ref.html +++ b/doc/ref.html @@ -1,305 +1,316 @@ + ref.html - - + + -

    Reference [back] -

    - - +

    Reference [back] +

    + + - \ No newline at end of file + diff --git a/doc/ref/tuple_insert.html b/doc/ref/tuple_insert.html index ba21cd5..0c58681 100644 --- a/doc/ref/tuple_insert.html +++ b/doc/ref/tuple_insert.html @@ -8,7 +8,8 @@
    The BOOST_PP_TUPLE_INSERT macro inserts an element into an tuple.

    Usage

    -
    BOOST_PP_TUPLE_INSERT(tuple, i, elem)
    +
    BOOST_PP_TUPLE_INSERT(tuple, i, elem) + (v)

    Arguments

    tuple
    diff --git a/doc/ref/tuple_insert_d.html b/doc/ref/tuple_insert_d.html index ce28076..53fbea1 100644 --- a/doc/ref/tuple_insert_d.html +++ b/doc/ref/tuple_insert_d.html @@ -10,7 +10,7 @@ with maximum efficiency.

    Usage

    BOOST_PP_TUPLE_INSERT_D(d, tuple, - i, elem)
    + i, elem) (v)

    Arguments

    d
    diff --git a/doc/ref/tuple_pop_back.html b/doc/ref/tuple_pop_back.html index 470bc69..63df90a 100644 --- a/doc/ref/tuple_pop_back.html +++ b/doc/ref/tuple_pop_back.html @@ -8,7 +8,7 @@
    The BOOST_PP_TUPLE_POP_BACK macro pops an element from the end of an tuple.

    Usage

    -
    BOOST_PP_TUPLE_POP_BACK(tuple)
    +
    BOOST_PP_TUPLE_POP_BACK(tuple) (v)

    Arguments

    tuple
    diff --git a/doc/ref/tuple_pop_back_z.html b/doc/ref/tuple_pop_back_z.html index b38c788..99b26c6 100644 --- a/doc/ref/tuple_pop_back_z.html +++ b/doc/ref/tuple_pop_back_z.html @@ -9,7 +9,8 @@ pops an element from the end of an tuple.  It reenters BOOST_PP_REPEAT with maximum efficiency.

    Usage

    -
    BOOST_PP_TUPLE_POP_BACK_Z(z, tuple)
    +
    BOOST_PP_TUPLE_POP_BACK_Z(z, tuple) + (v)

    Arguments

    z
    @@ -19,9 +20,8 @@

    Remarks

    This macro returns tuple after removing the last - element.  - If tuple has only a single element, it remains unchanged since - a tuple must have at least one element.
    + element.  If tuple has only a single element, it remains + unchanged since a tuple must have at least one element.

    See Also

    • BOOST_PP_TUPLE_POP_BACK
    • diff --git a/doc/ref/tuple_pop_front.html b/doc/ref/tuple_pop_front.html index 45d46b4..ca388ce 100644 --- a/doc/ref/tuple_pop_front.html +++ b/doc/ref/tuple_pop_front.html @@ -8,7 +8,7 @@
      The BOOST_PP_TUPLE_POP_FRONT macro pops an element from the beginning of a tuple.

      Usage

      -
      BOOST_PP_TUPLE_POP_FRONT(tuple)
      +
      BOOST_PP_TUPLE_POP_FRONT(tuple) (v)

      Arguments

      tuple
      @@ -16,9 +16,8 @@

      Remarks

      This macro returns tuple after removing the first - element.  - If tuple has only a single element, it remains unchanged since - a tuple must have at least one element.
      + element.  If tuple has only a single element, it remains + unchanged since a tuple must have at least one element.
      This macro uses BOOST_PP_REPEAT internally.  Therefore, to use the z parameter passed from other macros that use BOOST_PP_REPEAT, see BOOST_PP_TUPLE_POP_FRONT_Z
      diff --git a/doc/ref/tuple_pop_front_z.html b/doc/ref/tuple_pop_front_z.html index 5286233..d65e7f4 100644 --- a/doc/ref/tuple_pop_front_z.html +++ b/doc/ref/tuple_pop_front_z.html @@ -9,7 +9,8 @@ macro pops an element from the beginning of a tuple.  It reenters BOOST_PP_REPEAT with maximum efficiency.

      Usage

      -
      BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple)
      +
      BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple) + (v)

      Arguments

      z
      diff --git a/doc/ref/tuple_push_back.html b/doc/ref/tuple_push_back.html index 4633457..3ebc99c 100644 --- a/doc/ref/tuple_push_back.html +++ b/doc/ref/tuple_push_back.html @@ -8,7 +8,8 @@
      The BOOST_PP_TUPLE_PUSH_BACK macro appends an element to the end of a tuple.

      Usage

      -
      BOOST_PP_TUPLE_PUSH_BACK(tuple, elem)
      +
      BOOST_PP_TUPLE_PUSH_BACK(tuple, elem) + (v)

      Arguments

      tuple
      diff --git a/doc/ref/tuple_push_front.html b/doc/ref/tuple_push_front.html index 164791c..cfabc88 100644 --- a/doc/ref/tuple_push_front.html +++ b/doc/ref/tuple_push_front.html @@ -8,7 +8,8 @@
      The BOOST_PP_TUPLE_PUSH_FRONT macro appends an element to the beginning of a tuple.

      Usage

      -
      BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem)
      +
      BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem) + (v)

      Arguments

      tuple
      diff --git a/doc/ref/tuple_remove.html b/doc/ref/tuple_remove.html index 5e3396f..4aebc57 100644 --- a/doc/ref/tuple_remove.html +++ b/doc/ref/tuple_remove.html @@ -8,7 +8,8 @@
      The BOOST_PP_TUPLE_REMOVE macro removes an element from a tuple.

      Usage

      -
      BOOST_PP_TUPLE_REMOVE(tuple, i)
      +
      BOOST_PP_TUPLE_REMOVE(tuple, i) (v)

      Arguments

      tuple
      diff --git a/doc/ref/tuple_remove_d.html b/doc/ref/tuple_remove_d.html index 3b6cab9..1be3d1c 100644 --- a/doc/ref/tuple_remove_d.html +++ b/doc/ref/tuple_remove_d.html @@ -10,7 +10,7 @@ with maximum efficiency.

      Usage

      BOOST_PP_TUPLE_REMOVE_D(d, tuple, - i)
      + i) (v)

      Arguments

      d
      diff --git a/doc/ref/tuple_replace.html b/doc/ref/tuple_replace.html index 7931038..8654ebb 100644 --- a/doc/ref/tuple_replace.html +++ b/doc/ref/tuple_replace.html @@ -8,7 +8,8 @@
      The BOOST_PP_TUPLE_REPLACE macro replaces an element in a tuple.

      Usage

      -
      BOOST_PP_TUPLE_REPLACE(tuple, i, elem)
      +
      BOOST_PP_TUPLE_REPLACE(tuple, i, elem) + (v)

      Arguments

      tuple
      diff --git a/doc/ref/tuple_replace_d.html b/doc/ref/tuple_replace_d.html index 63dd12d..dc5fc4f 100644 --- a/doc/ref/tuple_replace_d.html +++ b/doc/ref/tuple_replace_d.html @@ -10,7 +10,7 @@ with maximum efficiency.

      Usage

      BOOST_PP_TUPLE_REPLACE_D(d, tuple, - i, elem)
      + i, elem) (v)

      Arguments

      d
      From b3cdac0ea260098855a60dca454529b11912d262 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sat, 23 Nov 2013 07:45:00 +0000 Subject: [PATCH 11/14] Updated tests. [SVN r86789] --- test/arithmetic.cxx | 20 ++++++++++++++++++++ test/facilities.cxx | 26 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/test/arithmetic.cxx b/test/arithmetic.cxx index 4512314..5d48928 100644 --- a/test/arithmetic.cxx +++ b/test/arithmetic.cxx @@ -60,3 +60,23 @@ BEGIN BOOST_PP_MOD(7, 4) == 3 END BEGIN BOOST_PP_MOD(BOOST_PP_MOD(5, 3), 3) == 2 END BEGIN BOOST_PP_MOD(5, BOOST_PP_MOD(4, 3)) == 0 END + +/* increment */ + +BEGIN BOOST_PP_INC(0) == 1 END +BEGIN BOOST_PP_INC(22) == 23 END +BEGIN BOOST_PP_INC(256) == 256 END + +BEGIN BOOST_PP_INC(BOOST_PP_INC(0)) == 2 END +BEGIN BOOST_PP_INC(BOOST_PP_INC(17)) == 19 END +BEGIN BOOST_PP_INC(BOOST_PP_INC(255)) == 256 END + +/* decrement */ + +BEGIN BOOST_PP_DEC(256) == 255 END +BEGIN BOOST_PP_DEC(47) == 46 END +BEGIN BOOST_PP_DEC(0) == 0 END + +BEGIN BOOST_PP_DEC(BOOST_PP_DEC(256)) == 254 END +BEGIN BOOST_PP_DEC(BOOST_PP_DEC(85)) == 83 END +BEGIN BOOST_PP_DEC(BOOST_PP_DEC(1)) == 0 END diff --git a/test/facilities.cxx b/test/facilities.cxx index 31f7c77..d824ce7 100644 --- a/test/facilities.cxx +++ b/test/facilities.cxx @@ -11,6 +11,8 @@ # # include # include +# include +# include # include BEGIN BOOST_PP_APPLY(BOOST_PP_NIL) 0 == 0 END @@ -26,3 +28,27 @@ BEGIN BOOST_PP_EXPAND(MACRO ARGS) == 1 END BEGIN BOOST_PP_IDENTITY(1)() == 1 END BEGIN BOOST_PP_CAT(BOOST_PP_INTERCEPT, 2) 1 == 1 END + +#if BOOST_PP_VARIADICS + +#define OVMAC_1(x) BOOST_PP_ADD(x,5) +#define OVMAC_2(x,y) BOOST_PP_ADD(x,y) +#define OVMAC_3(x,y,z) BOOST_PP_ADD(BOOST_PP_MUL(x,y),z) +#define OVMAC_4(x,y,z,a) BOOST_PP_ADD(BOOST_PP_MUL(x,y),BOOST_PP_MUL(a,z)) + +#if defined(BOOST_PP_VARIADICS_MSVC) + +#define OVTEST(...) BOOST_PP_CAT(BOOST_PP_OVERLOAD(OVMAC_,__VA_ARGS__)(__VA_ARGS__),BOOST_PP_EMPTY()) + +#else + +#define OVTEST(...) BOOST_PP_OVERLOAD(OVMAC_,__VA_ARGS__)(__VA_ARGS__) + +#endif + +BEGIN OVTEST(3,4,5) == 17 END +BEGIN OVTEST(9,3,2,7) == 41 END +BEGIN OVTEST(8) == 13 END +BEGIN OVTEST(24,61) == 85 END + +#endif From d11b03ad1ed0431046adce18ca0af89c2c86dbbd Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 5 Dec 2013 14:43:02 -0500 Subject: [PATCH 12/14] Updated tests to cover more areas of the implementation. --- test/list.cxx | 19 +++++++++++++++++++ test/logical.cxx | 23 +++++++++++++++++++++++ test/seq.cxx | 17 +++++++++++++++++ test/slot.cxx | 26 ++++++++++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/test/list.cxx b/test/list.cxx index 3e83a04..db6c432 100644 --- a/test/list.cxx +++ b/test/list.cxx @@ -13,17 +13,33 @@ # # include # include +# include # include +# include # include # include # include # include +# include # include +# define LISTNIL BOOST_PP_NIL # define LIST (4, (1, (5, (2, BOOST_PP_NIL)))) # define REVERSAL(d, x, y) BOOST_PP_SUB_D(d, y, x) +BEGIN BOOST_PP_LIST_FIRST(LIST) == 4 END +BEGIN BOOST_PP_LIST_IS_CONS(LIST) == 1 END +BEGIN BOOST_PP_LIST_IS_CONS(LISTNIL) == 0 END +BEGIN BOOST_PP_LIST_IS_NIL(LIST) == 0 END +BEGIN BOOST_PP_LIST_IS_NIL(LISTNIL) == 1 END + +#if BOOST_PP_VARIADICS + +BEGIN BOOST_PP_VARIADIC_ELEM(2,BOOST_PP_LIST_ENUM(LIST)) == 5 END + +#endif + BEGIN BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_SUB_D, 22, LIST) == 10 END BEGIN BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_ADD_D, 0, LIST) == 12 END BEGIN BOOST_PP_LIST_FOLD_RIGHT(REVERSAL, 0, LIST) == 4 END @@ -40,7 +56,10 @@ BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D, 2, LIST)) == 637 BEGIN BOOST_PP_LIST_CAT(BOOST_PP_LIST_APPEND(BOOST_PP_LIST_REST(LIST), LIST)) == 1524152 END # define F1(r, state, x) + x + state +# define FI2(r, state, i, x) BOOST_PP_IIF(BOOST_PP_EQUAL(i,1),+ x + x + state,+ x + state) + BEGIN BOOST_PP_LIST_FOR_EACH(F1, 1, LIST) == 16 END +BEGIN BOOST_PP_LIST_FOR_EACH_I(FI2, 1, LIST) == 17 END BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_LIST_TO_TUPLE(LIST)) == 2 END diff --git a/test/logical.cxx b/test/logical.cxx index ec770a5..30bde7b 100644 --- a/test/logical.cxx +++ b/test/logical.cxx @@ -34,3 +34,26 @@ BEGIN BOOST_PP_NOR(0, 0) == 1 END BEGIN BOOST_PP_NOR(0, 6) == 0 END BEGIN BOOST_PP_NOR(7, 0) == 0 END BEGIN BOOST_PP_NOR(8, 9) == 0 END + +BEGIN BOOST_PP_BOOL(22) == 1 END +BEGIN BOOST_PP_BOOL(0) == 0 END + +BEGIN BOOST_PP_BITAND(0, 0) == 0 END +BEGIN BOOST_PP_BITAND(0, 1) == 0 END +BEGIN BOOST_PP_BITAND(1, 0) == 0 END +BEGIN BOOST_PP_BITAND(1, 1) == 1 END + +BEGIN BOOST_PP_BITNOR(0, 0) == 1 END +BEGIN BOOST_PP_BITNOR(0, 1) == 0 END +BEGIN BOOST_PP_BITNOR(1, 0) == 0 END +BEGIN BOOST_PP_BITNOR(1, 1) == 0 END + +BEGIN BOOST_PP_BITOR(0, 0) == 0 END +BEGIN BOOST_PP_BITOR(0, 1) == 1 END +BEGIN BOOST_PP_BITOR(1, 0) == 1 END +BEGIN BOOST_PP_BITOR(1, 1) == 1 END + +BEGIN BOOST_PP_BITXOR(0, 0) == 0 END +BEGIN BOOST_PP_BITXOR(0, 1) == 1 END +BEGIN BOOST_PP_BITXOR(1, 0) == 1 END +BEGIN BOOST_PP_BITXOR(1, 1) == 0 END diff --git a/test/seq.cxx b/test/seq.cxx index 819ccb2..c64085d 100644 --- a/test/seq.cxx +++ b/test/seq.cxx @@ -13,18 +13,25 @@ # # include # include +# include # include +# include # include +# include # include # include +# include # include # define SEQ (4)(1)(5)(2) +# define SEQVAR (4,5,8,3,61)(1,0)(5,22,43)(2)(17,45,33) # define REVERSAL(s, x, y) BOOST_PP_SUB(y, x) # define SUB_S(s, x, y) BOOST_PP_SUB(x, y) # define ADD_S(s, x, y) BOOST_PP_ADD(x, y) +BEGIN BOOST_PP_SEQ_HEAD(SEQ) == 4 END + BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END BEGIN BOOST_PP_SEQ_FOLD_RIGHT(ADD_S, 0, SEQ) == 12 END BEGIN BOOST_PP_SEQ_FOLD_RIGHT(REVERSAL, 0, SEQ) == 4 END @@ -41,9 +48,12 @@ BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TRANSFORM(ADD_S, 2, SEQ)) == 6374 END BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(SEQ) SEQ) == 1524152 END # define F1(r, state, x) + x + state +# define FI2(r, state, i, x) BOOST_PP_IIF(BOOST_PP_EQUAL(i,2),+ x + x + state,+ x + state) BEGIN BOOST_PP_SEQ_FOR_EACH(F1, 1, SEQ) == 16 END +BEGIN BOOST_PP_SEQ_FOR_EACH_I(FI2, 1, SEQ) == 21 END BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_SEQ_TO_TUPLE(SEQ)) == 2 END +BEGIN BOOST_PP_ARRAY_ELEM(3, BOOST_PP_SEQ_TO_ARRAY(SEQ)) == 2 END # define LESS_S(s, x, y) BOOST_PP_LESS(x, y) BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FILTER(LESS_S, 3, SEQ)) == 45 END @@ -88,3 +98,10 @@ BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 9 END BEGIN BOOST_PP_LIST_AT(BOOST_PP_SEQ_TO_LIST(SEQ), 2) == 5 END + +#if BOOST_PP_VARIADICS + +BEGIN BOOST_PP_VARIADIC_ELEM(0,BOOST_PP_SEQ_ENUM(SEQ)) == 4 END +BEGIN BOOST_PP_TUPLE_ELEM(2,BOOST_PP_SEQ_ELEM(0,BOOST_PP_VARIADIC_SEQ_TO_SEQ(SEQVAR))) == 8 END + +#endif diff --git a/test/slot.cxx b/test/slot.cxx index d4aee49..2b5b3f8 100644 --- a/test/slot.cxx +++ b/test/slot.cxx @@ -11,6 +11,7 @@ # # include # include +# include # define X() 4 @@ -25,3 +26,28 @@ BEGIN BOOST_PP_SLOT(1) == 10 END # include BOOST_PP_ASSIGN_SLOT(1) BEGIN BOOST_PP_SLOT(1) == 100 END + +BEGIN BOOST_PP_COUNTER == 0 END + +#include BOOST_PP_UPDATE_COUNTER() + +BEGIN BOOST_PP_COUNTER == 1 END + +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() + +BEGIN BOOST_PP_COUNTER == 3 END + +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() + +BEGIN BOOST_PP_COUNTER == 6 END + +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() +#include BOOST_PP_UPDATE_COUNTER() + +BEGIN BOOST_PP_COUNTER == 11 END From 58cf4ccba9e1e9b609e7c792466ae22d7a77024a Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 5 Dec 2013 17:28:42 -0500 Subject: [PATCH 13/14] Updated title explanation about Boost PP usability. --- doc/title.html | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/doc/title.html b/doc/title.html index b3dce75..9d97712 100644 --- a/doc/title.html +++ b/doc/title.html @@ -1,22 +1,25 @@ - - title.html - - - -

      Introduction

      -
      - An excerpt from C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond by Dave Abrahams and Aleksey Gurtovoy has been made available online. - This excerpt contains a basic introduction to the Preprocessor library and preprocessor metaprogramming which may help users new to the library and users interested in seeing some of the facilities offered by the library. -
      - - - - + + title.html + + + +

      Introduction

      +
      The Boost Preprocessing library is a library of macros, with support + for preprocessor metaprogramming. The library supports both C++ and C + compilation. It does not depend on any other Boost libraries and therefore + may be used as a standalone library.
      +
      An excerpt from C++ Template Metaprogramming: Concepts, Tools, and + Techniques from Boost and Beyond by Dave Abrahams and Aleksey + Gurtovoy has been made available online. + This excerpt contains a basic introduction to the Preprocessor library and + preprocessor metaprogramming which may help users new to the library and + users interested in seeing some of the facilities offered by the library. +
      + + From 6978c83372b87ab163818f4e0e8b3d18fc8237be Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 5 Dec 2013 17:43:48 -0500 Subject: [PATCH 14/14] Explanations about using tuples rather than arrays with variadic macro support. --- doc/data/arrays.html | 96 +++---- doc/data/tuples.html | 73 +++-- doc/topics/variadic_macros.html | 477 ++++++++++++++++---------------- 3 files changed, 324 insertions(+), 322 deletions(-) diff --git a/doc/data/arrays.html b/doc/data/arrays.html index ddbf517..181014e 100644 --- a/doc/data/arrays.html +++ b/doc/data/arrays.html @@ -1,53 +1,47 @@ - - arrays.html - - - -

      Arrays

      -
      - An array is a data structure consisting of a two-element tuple.  - The first element is the number of elements in the array.  - The second element is another tuple of the elements in the array.  - For example, -
      -
      - (3, (a, b, c)) -
      -
      - ...is an array of 3 elements--a, b, and c. -
      -
      - The primary strength of arrays is that they store their own size.  - Because of this, access to elements does not require the size.  - It only requires that an element exists at a certain index. -
      -
      - This allows macro parameters to be variable in size and allows data states to change - size without the user explicitly keeping track of the size independently. -
      -
      - Elements of an array can be extracted with BOOST_PP_ARRAY_ELEM, - an array's size can be extracted with BOOST_PP_ARRAY_SIZE, and - an array can be converted to the more primitive tuple data structure - with BOOST_PP_ARRAY_DATA. -
      -

      Primitives

      - -
      -
      - © Copyright Housemarque Oy 2002 -
      © Copyright Paul Mensonides 2002 -
      -
      -

      Distributed under the Boost Software License, Version 1.0. (See - accompanying file LICENSE_1_0.txt or - copy at www.boost.org/LICENSE_1_0.txt)

      -
      - + + arrays.html + + + +

      Arrays

      +
      An array is a data structure consisting of a two-element tuple.  + The first element is the number of elements in the array.  + The second element is another tuple of the elements in the array.  + For example,
      +
      (3, (a, b, c))
      +
      ...is an array of 3 elements--a, b, and + c.
      +
      The primary strength of arrays is that they store their own + size.  Because of this, access to elements does not require the + size.  It only requires that an element exists at a certain index.
      +
      This allows macro parameters to be variable in size and allows data + states to change size without the user explicitly keeping track of the + size independently.
      +
      With variadic macro support a tuple has all of the + functionality as an array, knows its own size, and is easier + syntactically to use. Because of that an array should be used, as + opposed to a tuple, only if your compiler does not support + variadic macros.
      +
      + Elements of an array can be extracted with BOOST_PP_ARRAY_ELEM, + an array's size can be extracted with BOOST_PP_ARRAY_SIZE, + and an array can be converted to the more primitive tuple + data structure with BOOST_PP_ARRAY_DATA.
      +

      Primitives

      + +
      +
      © Copyright Housemarque Oy 2002
      + © Copyright Paul Mensonides 2002
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + diff --git a/doc/data/tuples.html b/doc/data/tuples.html index 38b6d5c..4b5bbea 100644 --- a/doc/data/tuples.html +++ b/doc/data/tuples.html @@ -1,42 +1,35 @@ - - tuples.html - - - -

      Tuples

      -
      - A tuple is a simple comma-separated list of elements inside parenthesis.  - For example, -
      -
      - (a, b, c) -
      -
      - ...is a tuple of 3 elements--a, b, and c. -
      -
      - Tuples are fast and easy to use.  - However, all access to tuples requires knowledge of its size. -
      -
      - Elements of a tuple can be extracted with - BOOST_PP_TUPLE_ELEM. -
      -

      Primitives

      - -
      -
      - © Copyright Housemarque Oy 2002 -
      © Copyright Paul Mensonides 2002 -
      -
      -

      Distributed under the Boost Software License, Version 1.0. (See - accompanying file LICENSE_1_0.txt or - copy at www.boost.org/LICENSE_1_0.txt)

      -
      - + + tuples.html + + + +

      Tuples

      +
      A tuple is a simple comma-separated list of elements inside + parenthesis.  For example,
      +
      (a, b, c)
      +
      ...is a tuple of 3 elements--a, b, and + c.
      +
      Tuples are fast and easy to use.  With variadic macro + support it is not necessary to know the size of a tuple; without + variadic macro support all access to tuples requires + knowledge of its size. Use a tuple instead of an array if + your compiler supports variadic macros, since a tuple has all of + the functionality as an array and is easier syntactically to use.
      +
      Elements of a tuple can be extracted with BOOST_PP_TUPLE_ELEM. +
      +

      Primitives

      + +
      +
      © Copyright Housemarque Oy 2002
      + © Copyright Paul Mensonides 2002
      +
      +

      Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      + diff --git a/doc/topics/variadic_macros.html b/doc/topics/variadic_macros.html index 3794db1..4427765 100644 --- a/doc/topics/variadic_macros.html +++ b/doc/topics/variadic_macros.html @@ -7,235 +7,250 @@ -

      Variadic Macros

      -
      Variadic macros are supported by a number of compilers. -They are -macros of the form: -
      -
      -
      #define SOME_MACRO(ZeroOrMoreParameters,...) macro expansion possible specifying __VA_ARGS__
      -
      -
      The '...' in the parameter list represents the variadic -data when the macro is invoked and the __VA_ARGS__ in the expansion -represents the variadic data in the expansion of the macro. Variadic -data is of the form of 1 or more preprocessor tokens separated by -commas.
      -
      -The '...' must be the last parameter in the macro definition and there -may be 0 or more non-variadic parameters preceding it.
      -
      -In the expansion of the macro __VA_ARGS__ may be specified 0 or more -times to represent the variadic data. The variadic data in the -expansion is a comma separated list of preprocessor tokens representing -the variadic data which the invoker of the macro enters as the last -arguments to the macro.
      -
      -

      Example - Creating and invoking a variadic macro.

      -
      -
      #define INITIALIZE_INT_ARRAY(array_name,...) \ 
      static int array_name[] = { __VA_ARGS__ }; \
      /**/

      INITIALIZE_INT_ARRAY(myname,45,789,33510,9346,2)
      -
      - Preprocessor -Library Support
      -
      -
      The library offers support for variadic macros for those -compilers -which support the feature. The library can automatically detect whether -a compiler supports variadic macros and sets the macro -BOOST_PP_VARIADICS accordingly to 1 if the compiler supports variadic -macros or 0 if the compiler does not support variadic macros.
      -
      -The end-user can #define BOOST_PP_VARIADICS to 1 or 0 himself in a -translation unit, before including any preprocessor header files, to -prevent the library from attempting to detect whether the compiler -supports variadic macros. This has the effect of manually turning on or -off variadic macro support in the library. Of course if one manually -turns on variadic macro support in the library, and one's compiler does -not support variadic macros, functionality in the library which uses -variadic macros will fail with error messages from the compiler.
      -
      -When BOOST_PP_VARIADICS is 1, the library offers some extended -functionality -by using variadic macros, and also offers extended support for working -with variadic data.
      -
      -Support for working with variadic -data is largely centered on being able to convert variadic data to -other library data types, since the -functionality for working with those Boost preprocessor library data -types is much greater than that for working with variadic data directly.
      -
      - -

      Notation For Variadic Macros
      -

      -
      In the documentation, headers which have variadic macros, -and -variadic macros themselves, have a notation of '(v)' appended to them. -For the variadic macros themselves this signifies that -BOOST_PP_VARIADICS must be 1 for those variadic macros to be usable. -For variadic macros which have a non-variadic equivalent, the -non-variadic equivalent will be used if BOOST_PP_VARIADICS is set to 0. -
      -

      Extended Functionality Using Variadic Macros
      -

      -
      Some macros in the library offer extended -functionality through the use of variadic macros.
      -
      -The variadic macro version offers the same functionality -as the non-variadic version, but because of the ability of the variadic -parameters to encompass a variable number of arguments, it also offers -an enhanced syntax using the same macro name.
      -
      -The macros in the library which offer this enhanced functionality are -all -centered on tuple manipulation. With variadic -macros it is -possible to -manipulate tuples without having to know the size of the tuple. So -while the invoker can still specify the size when using tuple macro -functionality, there are variadic versions of each of the tuple macros, -with the exact same name as the non-variadic macro, where the size need -not be specified.
      -
      -

      Extended Support For Variadic Data

      -
      The library offers extended support for working with -variadic data -which goes beyond the functionality offered by the C++ specification -for variadic macros. It does this through preprocessor programming and -by using some of the other functionality in the library itself. Header -and macro names -in the library which offer extended support for working with variadic -data, and need the compiler to support variadic macros, are marked with -a (v) to indicate a variadic macro.
      -
      -The form of the functionality which the library offers is centered on -two macros which work with variadic data itself, and a set of macros -which convert between variadic data and other library data -types.
      -
      -The two macros are BOOST_PP_VARIADIC_ELEM and BOOST_PP_VARIADIC_SIZE, -which respectively return a particular token of variadic data and the -number of tokens of variadic data.
      -
      -The macros for converting variadic data to the library's data types are -BOOST_PP_VARIADIC_TO_ARRAY, BOOST_PP_VARIADIC_TO_LIST, -BOOST_PP_VARIADIC_TO_SEQ, and BOOST_PP_VARIADIC_TO_TUPLE.
      -
      -All of these macros need compiler support for variadic data and only -exist if BOOST_PP_VARIADICS is 1.
      -
      -The remaining four macros, which convert from a library data type -to comma-separated preprocessor tokens, which is the form of -variadic data, do not need compiler support for variadic -macros. These functions are BOOST_PP_ARRAY_ENUM, BOOST_PP_LIST_ENUM, -BOOST_PP_SEQ_ENUM, and BOOST_PP_TUPLE_ENUM. However if one wishes to -use this variadic data reliably as arguments to other macros, one needs -variadic macro support.
      -
      - Using Variadic Data -
      Variadic data exists in the -form of comma-separated preprocessor tokens. This is the case whether -the variadic data comes from the __VA_ARGS__ of a variadic macro, from -the conversion of a library's data type to variadic data, or the -manual construction of comma-separated preprocessing tokens by the -programmer writing a macro.
      -
      -The easiest way to work with -variadic data internally is to convert it to a library data type. -Library data types, whether an array, list, -sequence, -or tuple, have a rich set of functionality for -manipulating -data whereas -variadic data functionality in the library only allows one to access -the variadic data as a whole or to access a single token of the -variadic data at a time.
      -
      -The user of the library still may -choose to pass variadic data back into internal macros rather than -convert it to other library data types. There is no problem passing -variadic data as a whole to variadic macros as the last parameter of -the macro. However:
      -
      -Attempting to pass -variadic data as a -whole directly into a non-variadic macro is not guaranteed to work and -may fail.
      -

      -This occurs because of a preprocessor weakness in a number -of compilers, currently most notably Visual C++. Even passing variadic -data as arguments to a non-variadic macro, when it is not represented -in -the form of  __VA_ARGS__, may fail with certain compilers.
      -
      -What follows are very simple examples, showing how variadic data can be -passed to a non-variadic macro.
      -
      -First an example of what NOT to do.
      -
      -

      Example - Passing variadic data as a whole to a -non-variadic -macro. DO NOT DO.

      -
      -
      #define MACRO_ARG_2(x,y) BOOST_PP_ADD(x,y)
      #define VAR_MACRO(...) __VA_ARGS__

      /* The following should not be done and is not guaranteed to work with compilers. */

      int xx = MACRO_ARG_2(VAR_MACRO(2,3));
      -
      -
      There are two ways to pass variadic data to a non-variadic -macro. -The -first of these is to pass the individual tokens of the variadic data -separately to the non-variadic macro using the BOOST_PP_VARIADIC_ELEM -macro in the library.
      -
      -

      Example - Passing individual variadic data tokens to -a -non-variadic macro.
      -

      -
      -
      #define MACRO_ARG_2(x,y) BOOST_PP_ADD(x,y)
      #define VAR_MACRO(...) __VA_ARGS__

      /* The following will work correctly */

      int xx = MACRO_ARG_2
      (
      BOOST_PP_VARIADIC_ELEM(0,VAR_MACRO(2,3)),
      BOOST_PP_VARIADIC_ELEM(1,VAR_MACRO(2,3))
      );
      -
      -
      The second way is to use a macro in the library called -BOOST_PP_OVERLOAD. -This macro allows one to "overload" a variadic macro to non-variadic -macros of different numbers of parameters, using a common prefix. -
      -

      Example - Passing variadic data as a whole to -BOOST_PP_OVERLOAD -and on to a non-variadic macro.
      -

      -
      -
      #define MACRO_ARG_2(x,y) BOOST_PP_ADD(x,y)
      #define VAR_MACRO(...) __VA_ARGS__

      /* The following will work correctly */

      int xx = BOOST_PP_OVERLOAD(MACRO_ARG_,VAR_MACRO(2,3))(VAR_MACRO(2,3));

      /* For Visual C++ it is necessary to do this */

      int xx =
      BOOST_PP_CAT(BOOST_PP_OVERLOAD(MACRO_ARG_,VAR_MACRO(2,3))(VAR_MACRO(2,3)),BOOST_PP_EMPTY());
      -

      -
      Although these techniques will work when passing variadic -data to -non-variadic macros, it is much better and less problematical to -work internally with the existing library data types and to only use -variadic -macros as an interface for end-users when there is a need to have a -macro which takes a -variable number of parameters.
      -
      -See Also
      - -
      -
      © Copyright -Edward Diener -2011,2013
      -
      -

      Distributed under the Boost Software License, -Version 1.0. -(See accompanying file LICENSE_1_0.txt -or copy at www.boost.org/LICENSE_1_0.txt)

      -
      +

      Variadic Macros

      +
      Variadic macros are supported by a number of compilers. + They are + macros of the form: +
      +
      +
      #define SOME_MACRO(ZeroOrMoreParameters,...) macro expansion possible specifying __VA_ARGS__
      +
      +
      The '...' in the parameter list represents the variadic + data when the macro is invoked and the __VA_ARGS__ in the expansion + represents the variadic data in the expansion of the macro. Variadic + data is of the form of 1 or more preprocessor tokens separated by + commas.
      +
      + The '...' must be the last parameter in the macro definition and there + may be 0 or more non-variadic parameters preceding it.
      +
      + In the expansion of the macro __VA_ARGS__ may be specified 0 or more + times to represent the variadic data. The variadic data in the + expansion is a comma separated list of preprocessor tokens representing + the variadic data which the invoker of the macro enters as the last + arguments to the macro.
      +
      +

      Example - Creating and invoking a variadic macro.

      +
      +
      #define INITIALIZE_INT_ARRAY(array_name,...) \ 
      static int array_name[] = { __VA_ARGS__ }; \
      /**/

      INITIALIZE_INT_ARRAY(myname,45,789,33510,9346,2)
      +
      + Preprocessor + Library Support
      +
      +
      The library offers support for variadic macros for those + compilers + which support the feature. The library can automatically detect whether + a compiler supports variadic macros and sets the macro + BOOST_PP_VARIADICS accordingly to 1 if the compiler supports variadic + macros or 0 if the compiler does not support variadic macros.
      +
      + The end-user can #define BOOST_PP_VARIADICS to 1 or 0 himself in a + translation unit, before including any preprocessor header files, to + prevent the library from attempting to detect whether the compiler + supports variadic macros. This has the effect of manually turning on or + off variadic macro support in the library. Of course if one manually + turns on variadic macro support in the library, and one's compiler does + not support variadic macros, functionality in the library which uses + variadic macros will fail with error messages from the compiler.
      +
      + When BOOST_PP_VARIADICS is 1, the library offers some extended + functionality + by using variadic macros, and also offers extended support for working + with variadic data.
      +
      + Support for working with variadic + data is largely centered on being able to convert variadic data to + other library data types, since the + functionality for working with those Boost preprocessor library data + types is much greater than that for working with variadic data directly.
      +
      + +

      Notation For Variadic Macros
      +

      +
      In the documentation, headers which have variadic macros, + and + variadic macros themselves, have a notation of '(v)' appended to them. + For the variadic macros themselves this signifies that + BOOST_PP_VARIADICS must be 1 for those variadic macros to be usable. + For variadic macros which have a non-variadic equivalent, the + non-variadic equivalent will be used if BOOST_PP_VARIADICS is set to 0. +
      +

      Extended Functionality Using Variadic Macros
      +

      +
      Some macros in the library offer extended + functionality through the use of variadic macros.
      +
      + The variadic macro version offers the same functionality + as the non-variadic version, but because of the ability of the variadic + parameters to encompass a variable number of arguments, it also offers + an enhanced syntax using the same macro name.
      +
      + The macros in the library which offer this enhanced functionality are + all + centered on tuple manipulation. With variadic + macros it is + possible to + manipulate tuples without having to know the size of the tuple. So + while the invoker can still specify the size when using tuple macro + functionality, there are variadic versions of each of the tuple macros, + with the exact same name as the non-variadic macro, where the size need + not be specified.
      +
      +

      Extended Support For Variadic Data

      +
      The library offers extended support for working with + variadic data + which goes beyond the functionality offered by the C++ specification + for variadic macros. It does this through preprocessor programming and + by using some of the other functionality in the library itself. Header + and macro names + in the library which offer extended support for working with variadic + data, and need the compiler to support variadic macros, are marked with + a (v) to indicate a variadic macro.
      +
      + The form of the functionality which the library offers is centered on + two macros which work with variadic data itself, and a set of macros + which convert between variadic data and other library data + types.
      +
      + The two macros are BOOST_PP_VARIADIC_ELEM and BOOST_PP_VARIADIC_SIZE, + which respectively return a particular token of variadic data and the + number of tokens of variadic data.
      +
      + The macros for converting variadic data to the library's data types are + BOOST_PP_VARIADIC_TO_ARRAY, BOOST_PP_VARIADIC_TO_LIST, + BOOST_PP_VARIADIC_TO_SEQ, and BOOST_PP_VARIADIC_TO_TUPLE.
      +
      + All of these macros need compiler support for variadic data and only + exist if BOOST_PP_VARIADICS is 1.
      +
      + The remaining four macros, which convert from a library data type + to comma-separated preprocessor tokens, which is the form of + variadic data, do not need compiler support for variadic + macros. These functions are BOOST_PP_ARRAY_ENUM, BOOST_PP_LIST_ENUM, + BOOST_PP_SEQ_ENUM, and BOOST_PP_TUPLE_ENUM. However if one wishes to + use this variadic data reliably as arguments to other macros, one needs + variadic macro support.
      +
      + Using a Tuple Instead of an Array
      +
      +
      An array as a preprocessor data type is a two-element tuple where the + first element is the array size and the second element is a tuple which + constitutes the array data. Because a tuple knows its own size when the + compiler supports variadic macros, there is no reason to use the array preprocessor + data type as opposed to the tuple preprocessor data type; the tuple data + type now has all of the functionality which the array data type has and is + syntactically easier to use. With variadic macro support, which is now + officially part of the latest C++ standard, the preprocessor array data + type is essentially obsolete for conforming C++ compilers. Only if your + compiler does not support variadic macros is the preprocessor array data + type still useful.
      + Using Variadic Data +
      Variadic data exists in the + form of comma-separated preprocessor tokens. This is the case whether + the variadic data comes from the __VA_ARGS__ of a variadic macro, from + the conversion of a library's data type to variadic data, or the + manual construction of comma-separated preprocessing tokens by the + programmer writing a macro.
      +
      + The easiest way to work with + variadic data internally is to convert it to a library data type. + Library data types, whether an array, list, + sequence, + or tuple, have a rich set of functionality for + manipulating + data whereas + variadic data functionality in the library only allows one to access + the variadic data as a whole or to access a single token of the + variadic data at a time.
      +
      + The user of the library still may + choose to pass variadic data back into internal macros rather than + convert it to other library data types. There is no problem passing + variadic data as a whole to variadic macros as the last parameter of + the macro. However:
      +
      + Attempting to pass + variadic data as a + whole directly into a non-variadic macro is not guaranteed to work and + may fail.
      +

      + This occurs because of a preprocessor weakness in a number + of compilers, currently most notably Visual C++. Even passing variadic + data as arguments to a non-variadic macro, when it is not represented + in + the form of  __VA_ARGS__, may fail with certain compilers.
      +
      + What follows are very simple examples, showing how variadic data can be + passed to a non-variadic macro.
      +
      + First an example of what NOT to do.
      +
      +

      Example - Passing variadic data as a whole to a + non-variadic + macro. DO NOT DO.

      +
      +
      #define MACRO_ARG_2(x,y) BOOST_PP_ADD(x,y)
      #define VAR_MACRO(...) __VA_ARGS__

      /* The following should not be done and is not guaranteed to work with compilers. */

      int xx = MACRO_ARG_2(VAR_MACRO(2,3));
      +
      +
      There are two ways to pass variadic data to a non-variadic + macro. + The + first of these is to pass the individual tokens of the variadic data + separately to the non-variadic macro using the BOOST_PP_VARIADIC_ELEM + macro in the library.
      +
      +

      Example - Passing individual variadic data tokens to + a + non-variadic macro.
      +

      +
      +
      #define MACRO_ARG_2(x,y) BOOST_PP_ADD(x,y)
      #define VAR_MACRO(...) __VA_ARGS__

      /* The following will work correctly */

      int xx = MACRO_ARG_2
      (
      BOOST_PP_VARIADIC_ELEM(0,VAR_MACRO(2,3)),
      BOOST_PP_VARIADIC_ELEM(1,VAR_MACRO(2,3))
      );
      +
      +
      The second way is to use a macro in the library called + BOOST_PP_OVERLOAD. + This macro allows one to "overload" a variadic macro to non-variadic + macros of different numbers of parameters, using a common prefix. +
      +

      Example - Passing variadic data as a whole to + BOOST_PP_OVERLOAD + and on to a non-variadic macro.
      +

      +
      +
      #define MACRO_ARG_2(x,y) BOOST_PP_ADD(x,y)
      #define VAR_MACRO(...) __VA_ARGS__

      /* The following will work correctly */

      int xx = BOOST_PP_OVERLOAD(MACRO_ARG_,VAR_MACRO(2,3))(VAR_MACRO(2,3));

      /* For Visual C++ it is necessary to do this */

      int xx =
      BOOST_PP_CAT(BOOST_PP_OVERLOAD(MACRO_ARG_,VAR_MACRO(2,3))(VAR_MACRO(2,3)),BOOST_PP_EMPTY());
      +
      +
      +
      Although these techniques will work when passing variadic + data to + non-variadic macros, it is much better and less problematical to + work internally with the existing library data types and to only use + variadic + macros as an interface for end-users when there is a need to have a + macro which takes a + variable number of parameters.
      +
      + See Also
      + +
      +
      © Copyright + Edward Diener + 2011,2013
      +
      +

      Distributed under the Boost Software License, + Version 1.0. + (See accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

      +
      - \ No newline at end of file +