From 59048974ba41a6463bbab418cc31438395621779 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sat, 13 Jun 2020 13:19:21 -0400 Subject: [PATCH] When the tuple limit is not 256, use previous implementation --- include/boost/preprocessor/array/insert.hpp | 15 +++++++++++++++ include/boost/preprocessor/array/remove.hpp | 12 ++++++++++++ include/boost/preprocessor/array/replace.hpp | 13 +++++++++++++ 3 files changed, 40 insertions(+) diff --git a/include/boost/preprocessor/array/insert.hpp b/include/boost/preprocessor/array/insert.hpp index bfb11e0..85ee4d2 100644 --- a/include/boost/preprocessor/array/insert.hpp +++ b/include/boost/preprocessor/array/insert.hpp @@ -7,6 +7,8 @@ # * * # ************************************************************************** */ # +# /* Revised by Edward Diener (2020) */ +# # /* See http://www.boost.org for most recent version. */ # # ifndef BOOST_PREPROCESSOR_ARRAY_INSERT_HPP @@ -17,11 +19,14 @@ # include # include # include +# include # include # include # include +# if BOOST_PP_LIMIT_TUPLE == 256 # include # include +# endif # include # # /* BOOST_PP_ARRAY_INSERT */ @@ -32,17 +37,27 @@ # /* BOOST_PP_ARRAY_INSERT_D */ # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) \ BOOST_PP_IIF(BOOST_PP_NOT(BOOST_PP_ARRAY_SIZE(array)),BOOST_PP_IDENTITY_N((1,(elem)),5),BOOST_PP_ARRAY_INSERT_ZERO_D)(d, array, i, elem, BOOST_PP_NOT(i)) # else +# define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, (0, i, elem, (0, ()), array))) +# endif +# else # define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem) +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem) \ BOOST_PP_IIF(BOOST_PP_NOT(BOOST_PP_ARRAY_SIZE(array)),BOOST_PP_IDENTITY_N((1,(elem)),5),BOOST_PP_ARRAY_INSERT_ZERO_D)(d, array, i, elem, BOOST_PP_NOT(i)) +# else +# define BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, (0, i, elem, (0, ()), array))) +# endif # endif # +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_INSERT_ZERO_D(d, array, i, elem, zero) \ BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, \ (1, i, elem, BOOST_PP_IIF( zero, ( 2 , ( elem , BOOST_PP_ARRAY_ELEM(0,array) ) ) , ( 1 , ( BOOST_PP_ARRAY_ELEM(0,array) ) ) ), array))) +# endif # # if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() # define BOOST_PP_ARRAY_INSERT_P(d, state) BOOST_PP_ARRAY_INSERT_P_I state diff --git a/include/boost/preprocessor/array/remove.hpp b/include/boost/preprocessor/array/remove.hpp index abbab53..ecbf2b8 100644 --- a/include/boost/preprocessor/array/remove.hpp +++ b/include/boost/preprocessor/array/remove.hpp @@ -22,7 +22,9 @@ # include # include # include +# if BOOST_PP_LIMIT_TUPLE == 256 # include +# endif # include # include # @@ -34,15 +36,25 @@ # /* BOOST_PP_ARRAY_REMOVE_D */ # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_ARRAY_REMOVE_ZERO_D(d, array, i, BOOST_PP_NOT(i)) # else +# define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, (0, i, (0, ()), array))) +# endif +# else # define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_ARRAY_REMOVE_D_I(d, array, i) +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_REMOVE_D_I(d, array, i) BOOST_PP_ARRAY_REMOVE_ZERO_D(d, array, i, BOOST_PP_NOT(i)) +# else +# define BOOST_PP_ARRAY_REMOVE_D_I(d, array, i) BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, (0, i, (0, ()), array))) +# endif # endif # +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_REMOVE_ZERO_D(d, array, i, zero) \ BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, \ (1, i, BOOST_PP_IIF(zero,(0, ()),(1, (BOOST_PP_ARRAY_ELEM(0,array)))), array))) +# endif # # define BOOST_PP_ARRAY_REMOVE_P(d, st) BOOST_PP_NOT_EQUAL(BOOST_PP_TUPLE_ELEM(4, 0, st), BOOST_PP_ARRAY_SIZE(BOOST_PP_TUPLE_ELEM(4, 3, st))) # diff --git a/include/boost/preprocessor/array/replace.hpp b/include/boost/preprocessor/array/replace.hpp index 63b759b..05acae8 100644 --- a/include/boost/preprocessor/array/replace.hpp +++ b/include/boost/preprocessor/array/replace.hpp @@ -20,6 +20,9 @@ # include # include # include +# if BOOST_PP_LIMIT_TUPLE == 256 +# include +# endif # include # # /* BOOST_PP_ARRAY_REPLACE */ @@ -30,15 +33,25 @@ # /* BOOST_PP_ARRAY_REPLACE_D */ # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_ZERO_D(d, array, i, elem, BOOST_PP_NOT(i)) # else +# define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, (0, i, elem, (0, ()), array))) +# endif +# else # define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem) +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_ZERO_D(d, array, i, elem, BOOST_PP_NOT(i)) +# else +# define BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, (0, i, elem, (0, ()), array))) +# endif # endif # +# if BOOST_PP_LIMIT_TUPLE == 256 # define BOOST_PP_ARRAY_REPLACE_ZERO_D(d, array, i, elem, zero) \ BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, \ (1, i, elem, BOOST_PP_IIF(zero,(1, (elem)),(1, (BOOST_PP_ARRAY_ELEM(0,array)))), array))) +# endif # # define BOOST_PP_ARRAY_REPLACE_P(d, state) BOOST_PP_NOT_EQUAL(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_ARRAY_SIZE(BOOST_PP_TUPLE_ELEM(5, 4, state))) #