Add extra iteration for fold_left and fold_right to cover maximum operations.

This commit is contained in:
Edward Diener
2020-07-07 19:13:05 -04:00
parent db21240060
commit 0fd6b84304
12 changed files with 35 additions and 12 deletions
+2 -2
View File
@@ -31,9 +31,9 @@
# include <boost/preprocessor/config/limits.hpp>
#
# if BOOST_PP_LIMIT_SEQ == 256
# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))
# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256)))
# elif BOOST_PP_LIMIT_SEQ == 512
# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 512))
# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 512)))
# else
# error Incorrect value for the BOOST_PP_LIMIT_SEQ limit
# endif
@@ -14,6 +14,7 @@
# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_HPP
# define BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_HPP
#
# include <boost/preprocessor/arithmetic/dec.hpp>
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/detail/auto_rec.hpp>
# include <boost/preprocessor/seq/fold_left.hpp>
@@ -29,10 +30,10 @@
# include <boost/preprocessor/config/limits.hpp>
#
# if BOOST_PP_LIMIT_SEQ == 256
# define BOOST_PP_SEQ_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))
# define BOOST_PP_SEQ_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_RIGHT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256)))
# define BOOST_PP_SEQ_FOLD_RIGHT_257(op, st, ss) BOOST_PP_ERROR(0x0005)
# elif BOOST_PP_LIMIT_SEQ == 512
# define BOOST_PP_SEQ_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 512))
# define BOOST_PP_SEQ_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_RIGHT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 512)))
# define BOOST_PP_SEQ_FOLD_RIGHT_513(op, st, ss) BOOST_PP_ERROR(0x0005)
# else
# error Incorrect value for the BOOST_PP_LIMIT_SEQ limit
@@ -12,6 +12,7 @@
# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_256_HPP
# define BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_256_HPP
#
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_0(op, st, ss, sz) 0
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) 0
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) 0
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) 0
@@ -269,6 +270,7 @@
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) 0
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) 0
#
# define BOOST_PP_SEQ_FOLD_LEFT_0(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_0(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_LEFT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_LEFT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_LEFT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
@@ -526,6 +528,7 @@
# define BOOST_PP_SEQ_FOLD_LEFT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_LEFT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
#
# define BOOST_PP_SEQ_FOLD_LEFT_I_0(op, st, ss, sz) BOOST_PP_SEQ_FOLD_LEFT_I_0_DO(op, st, ss, BOOST_PP_DEC(sz))
# define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_SEQ_FOLD_LEFT_I_1_DO(op, st, ss, BOOST_PP_DEC(sz))
# define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_SEQ_FOLD_LEFT_I_2_DO(op, st, ss, BOOST_PP_DEC(sz))
# define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_SEQ_FOLD_LEFT_I_3_DO(op, st, ss, BOOST_PP_DEC(sz))
@@ -784,6 +787,7 @@
# define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_SEQ_FOLD_LEFT_I_256_DO(op, st, ss, BOOST_PP_DEC(sz))
#
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
# define BOOST_PP_SEQ_FOLD_LEFT_I_0_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_1, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(1, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_1_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_2_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_3_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
@@ -1041,6 +1045,7 @@
# define BOOST_PP_SEQ_FOLD_LEFT_I_255_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_256_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# else
# define BOOST_PP_SEQ_FOLD_LEFT_I_0_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_1, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(1, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_1_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_2_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
# define BOOST_PP_SEQ_FOLD_LEFT_I_3_DO(op, st, ss, sz) BOOST_PP_IF(sz, BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), sz)
@@ -12,6 +12,7 @@
# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_256_HPP
# define BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_256_HPP
#
# define BOOST_PP_SEQ_FOLD_RIGHT_0(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_0(op, st, BOOST_PP_SEQ_REVERSE_S(1, ss), BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_RIGHT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, BOOST_PP_SEQ_REVERSE_S(2, ss), BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_RIGHT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, BOOST_PP_SEQ_REVERSE_S(3, ss), BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_RIGHT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, BOOST_PP_SEQ_REVERSE_S(4, ss), BOOST_PP_SEQ_SIZE(ss))