From 2ef181c9d94f44797c58bca564e89fd45ec37d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 23 Aug 2016 01:34:55 +0200 Subject: [PATCH 1/2] Add new macro utilities useful for tuple and piecewise_construct emulation in Boost.Container. --- include/boost/move/detail/fwd_macros.hpp | 247 ++++++++++++++++++++--- 1 file changed, 216 insertions(+), 31 deletions(-) diff --git a/include/boost/move/detail/fwd_macros.hpp b/include/boost/move/detail/fwd_macros.hpp index e091890..37e7ea5 100644 --- a/include/boost/move/detail/fwd_macros.hpp +++ b/include/boost/move/detail/fwd_macros.hpp @@ -64,16 +64,22 @@ namespace move_detail { #endif //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES) //BOOST_MOVE_REPEATN(MACRO) +#define BOOST_MOVE_REPEAT(x, MACRO) BOOST_MOVE_REPEAT_I(x,MACRO) +#define BOOST_MOVE_REPEAT_I(x, MACRO) BOOST_MOVE_REPEAT##x(MACRO) #define BOOST_MOVE_REPEAT0(MACRO) -#define BOOST_MOVE_REPEAT1(MACRO) MACRO -#define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO -#define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO -#define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO -#define BOOST_MOVE_REPEAT5(MACRO) BOOST_MOVE_REPEAT4(MACRO), MACRO -#define BOOST_MOVE_REPEAT6(MACRO) BOOST_MOVE_REPEAT5(MACRO), MACRO -#define BOOST_MOVE_REPEAT7(MACRO) BOOST_MOVE_REPEAT6(MACRO), MACRO -#define BOOST_MOVE_REPEAT8(MACRO) BOOST_MOVE_REPEAT7(MACRO), MACRO -#define BOOST_MOVE_REPEAT9(MACRO) BOOST_MOVE_REPEAT8(MACRO), MACRO +#define BOOST_MOVE_REPEAT1(MACRO) MACRO +#define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO +#define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO +#define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO +#define BOOST_MOVE_REPEAT5(MACRO) BOOST_MOVE_REPEAT4(MACRO), MACRO +#define BOOST_MOVE_REPEAT6(MACRO) BOOST_MOVE_REPEAT5(MACRO), MACRO +#define BOOST_MOVE_REPEAT7(MACRO) BOOST_MOVE_REPEAT6(MACRO), MACRO +#define BOOST_MOVE_REPEAT8(MACRO) BOOST_MOVE_REPEAT7(MACRO), MACRO +#define BOOST_MOVE_REPEAT9(MACRO) BOOST_MOVE_REPEAT8(MACRO), MACRO +#define BOOST_MOVE_REPEAT10(MACRO) BOOST_MOVE_REPEAT9(MACRO), MACRO +#define BOOST_MOVE_REPEAT11(MACRO) BOOST_MOVE_REPEAT10(MACRO), MACRO +#define BOOST_MOVE_REPEAT12(MACRO) BOOST_MOVE_REPEAT11(MACRO), MACRO +#define BOOST_MOVE_REPEAT13(MACRO) BOOST_MOVE_REPEAT12(MACRO), MACRO //BOOST_MOVE_FWDN #define BOOST_MOVE_FWD0 @@ -99,6 +105,54 @@ namespace move_detail { #define BOOST_MOVE_FWDQ8 BOOST_MOVE_FWDQ7, ::boost::forward(q7) #define BOOST_MOVE_FWDQ9 BOOST_MOVE_FWDQ8, ::boost::forward(q8) +//BOOST_MOVE_TMPL_GETN +#define BOOST_MOVE_TMPL_GET0 +#define BOOST_MOVE_TMPL_GET1 p.template get<0>() +#define BOOST_MOVE_TMPL_GET2 BOOST_MOVE_TMPL_GET1, p.template get<1>() +#define BOOST_MOVE_TMPL_GET3 BOOST_MOVE_TMPL_GET2, p.template get<2>() +#define BOOST_MOVE_TMPL_GET4 BOOST_MOVE_TMPL_GET3, p.template get<3>() +#define BOOST_MOVE_TMPL_GET5 BOOST_MOVE_TMPL_GET4, p.template get<4>() +#define BOOST_MOVE_TMPL_GET6 BOOST_MOVE_TMPL_GET5, p.template get<5>() +#define BOOST_MOVE_TMPL_GET7 BOOST_MOVE_TMPL_GET6, p.template get<6>() +#define BOOST_MOVE_TMPL_GET8 BOOST_MOVE_TMPL_GET7, p.template get<7>() +#define BOOST_MOVE_TMPL_GET9 BOOST_MOVE_TMPL_GET8, p.template get<8>() + +//BOOST_MOVE_TMPL_GETQN +#define BOOST_MOVE_TMPL_GETQ0 +#define BOOST_MOVE_TMPL_GETQ1 q.template get<0>() +#define BOOST_MOVE_TMPL_GETQ2 BOOST_MOVE_TMPL_GETQ1, q.template get<1>() +#define BOOST_MOVE_TMPL_GETQ3 BOOST_MOVE_TMPL_GETQ2, q.template get<2>() +#define BOOST_MOVE_TMPL_GETQ4 BOOST_MOVE_TMPL_GETQ3, q.template get<3>() +#define BOOST_MOVE_TMPL_GETQ5 BOOST_MOVE_TMPL_GETQ4, q.template get<4>() +#define BOOST_MOVE_TMPL_GETQ6 BOOST_MOVE_TMPL_GETQ5, q.template get<5>() +#define BOOST_MOVE_TMPL_GETQ7 BOOST_MOVE_TMPL_GETQ6, q.template get<6>() +#define BOOST_MOVE_TMPL_GETQ8 BOOST_MOVE_TMPL_GETQ7, q.template get<7>() +#define BOOST_MOVE_TMPL_GETQ9 BOOST_MOVE_TMPL_GETQ8, q.template get<8>() + +//BOOST_MOVE_GET_IDXN +#define BOOST_MOVE_GET_IDX0 +#define BOOST_MOVE_GET_IDX1 get<0>(p) +#define BOOST_MOVE_GET_IDX2 BOOST_MOVE_GET_IDX1, get<1>(p) +#define BOOST_MOVE_GET_IDX3 BOOST_MOVE_GET_IDX2, get<2>(p) +#define BOOST_MOVE_GET_IDX4 BOOST_MOVE_GET_IDX3, get<3>(p) +#define BOOST_MOVE_GET_IDX5 BOOST_MOVE_GET_IDX4, get<4>(p) +#define BOOST_MOVE_GET_IDX6 BOOST_MOVE_GET_IDX5, get<5>(p) +#define BOOST_MOVE_GET_IDX7 BOOST_MOVE_GET_IDX6, get<6>(p) +#define BOOST_MOVE_GET_IDX8 BOOST_MOVE_GET_IDX7, get<7>(p) +#define BOOST_MOVE_GET_IDX9 BOOST_MOVE_GET_IDX8, get<8>(p) + +//BOOST_MOVE_GET_IDXQN +#define BOOST_MOVE_GET_IDXQ0 +#define BOOST_MOVE_GET_IDXQ1 get<0>(q) +#define BOOST_MOVE_GET_IDXQ2 BOOST_MOVE_GET_IDXQ1, get<1>(q) +#define BOOST_MOVE_GET_IDXQ3 BOOST_MOVE_GET_IDXQ2, get<2>(q) +#define BOOST_MOVE_GET_IDXQ4 BOOST_MOVE_GET_IDXQ3, get<3>(q) +#define BOOST_MOVE_GET_IDXQ5 BOOST_MOVE_GET_IDXQ4, get<4>(q) +#define BOOST_MOVE_GET_IDXQ6 BOOST_MOVE_GET_IDXQ5, get<5>(q) +#define BOOST_MOVE_GET_IDXQ7 BOOST_MOVE_GET_IDXQ6, get<6>(q) +#define BOOST_MOVE_GET_IDXQ8 BOOST_MOVE_GET_IDXQ7, get<7>(q) +#define BOOST_MOVE_GET_IDXQ9 BOOST_MOVE_GET_IDXQ8, get<8>(q) + //BOOST_MOVE_ARGN #define BOOST_MOVE_ARG0 #define BOOST_MOVE_ARG1 p0 @@ -572,6 +626,34 @@ namespace move_detail { #define BOOST_MOVE_I8 BOOST_MOVE_I1 #define BOOST_MOVE_I9 BOOST_MOVE_I1 +//BOOST_MOVE_BOOL +# define BOOST_MOVE_BOOL(x) BOOST_MOVE_BOOL_I(x) +# define BOOST_MOVE_BOOL_I(x) BOOST_MOVE_BOOL##x +# define BOOST_MOVE_BOOL0 0 +# define BOOST_MOVE_BOOL1 1 +# define BOOST_MOVE_BOOL2 1 +# define BOOST_MOVE_BOOL3 1 +# define BOOST_MOVE_BOOL4 1 +# define BOOST_MOVE_BOOL5 1 +# define BOOST_MOVE_BOOL6 1 +# define BOOST_MOVE_BOOL7 1 +# define BOOST_MOVE_BOOL8 1 +# define BOOST_MOVE_BOOL9 1 + +//BOOST_MOVE_I_IF +#define BOOST_MOVE_I_IF(x) BOOST_MOVE_I_IF_I (BOOST_MOVE_BOOL(x)) +#define BOOST_MOVE_I_IF_I(x) BOOST_MOVE_I_IF_I2(x) +#define BOOST_MOVE_I_IF_I2(x) BOOST_MOVE_IF_I_##x +#define BOOST_MOVE_IF_I_0 +#define BOOST_MOVE_IF_I_1 , + +/* +#define BOOST_MOVE_I_IF_I(x) BOOST_MOVE_I_IF_I2(BOOST_MOVE_BOOL(x)) +#define BOOST_MOVE_I_IF_I2(x) BOOST_MOVE_I_##x +#define BOOST_MOVE_I_0 +#define BOOST_MOVE_I_1 , +*/ + //BOOST_MOVE_COLON #define BOOST_MOVE_COLON0 #define BOOST_MOVE_COLON1 : @@ -584,6 +666,103 @@ namespace move_detail { #define BOOST_MOVE_COLON8 BOOST_MOVE_COLON1 #define BOOST_MOVE_COLON9 BOOST_MOVE_COLON1 +//BOOST_MOVE_BITOR +#define BOOST_MOVE_BITOR(x,y) BOOST_MOVE_BITOR_I(x,y) +#define BOOST_MOVE_BITOR_I(x,y) BOOST_MOVE_BITOR##x##y +#define BOOST_MOVE_BITOR00 0 +#define BOOST_MOVE_BITOR01 1 +#define BOOST_MOVE_BITOR10 1 +#define BOOST_MOVE_BITOR11 1 + +//BOOST_MOVE_OR +#define BOOST_MOVE_OR(x, y) BOOST_MOVE_OR_I(x, y) +#define BOOST_MOVE_OR_I(x, y) BOOST_MOVE_BITOR(BOOST_MOVE_BOOL(x), BOOST_MOVE_BOOL(y)) + +//BOOST_MOVE_BITAND +#define BOOST_MOVE_BITAND(x,y) BOOST_MOVE_BITAND_I(x,y) +#define BOOST_MOVE_BITAND_I(x,y) BOOST_MOVE_BITAND##x##y +#define BOOST_MOVE_BITAND00 0 +#define BOOST_MOVE_BITAND01 0 +#define BOOST_MOVE_BITAND10 0 +#define BOOST_MOVE_BITAND11 1 + +//BOOST_MOVE_AND +#define BOOST_MOVE_AND(x, y) BOOST_MOVE_AND_I(x, y) +#define BOOST_MOVE_AND_I(x, y) BOOST_MOVE_BITAND(BOOST_MOVE_BOOL(x), BOOST_MOVE_BOOL(y)) + +//BOOST_MOVE_DEC +#define BOOST_MOVE_DEC(x) BOOST_MOVE_DEC_I(x) +#define BOOST_MOVE_DEC_I(x) BOOST_MOVE_DEC##x +#define BOOST_MOVE_DEC1 0 +#define BOOST_MOVE_DEC2 1 +#define BOOST_MOVE_DEC3 2 +#define BOOST_MOVE_DEC4 3 +#define BOOST_MOVE_DEC5 4 +#define BOOST_MOVE_DEC6 5 +#define BOOST_MOVE_DEC7 6 +#define BOOST_MOVE_DEC8 7 +#define BOOST_MOVE_DEC9 8 +#define BOOST_MOVE_DEC10 9 +#define BOOST_MOVE_DEC11 10 +#define BOOST_MOVE_DEC12 11 +#define BOOST_MOVE_DEC13 12 +#define BOOST_MOVE_DEC14 13 + +//BOOST_MOVE_SUB +#define BOOST_MOVE_SUB(x, y) BOOST_MOVE_SUB_I(x,y) +#define BOOST_MOVE_SUB_I(x, y) BOOST_MOVE_SUB##y(x) +#define BOOST_MOVE_SUB0(x) x +#define BOOST_MOVE_SUB1(x) BOOST_MOVE_DEC(x) +#define BOOST_MOVE_SUB2(x) BOOST_MOVE_SUB1(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB3(x) BOOST_MOVE_SUB2(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB4(x) BOOST_MOVE_SUB3(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB5(x) BOOST_MOVE_SUB4(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB6(x) BOOST_MOVE_SUB5(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB7(x) BOOST_MOVE_SUB6(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB8(x) BOOST_MOVE_SUB7(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB9(x) BOOST_MOVE_SUB8(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB10(x) BOOST_MOVE_SUB9(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB11(x) BOOST_MOVE_SUB10(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB12(x) BOOST_MOVE_SUB11(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB13(x) BOOST_MOVE_SUB12(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB14(x) BOOST_MOVE_SUB13(BOOST_MOVE_DEC(x)) + +//BOOST_MOVE_INC +#define BOOST_MOVE_INC(x) BOOST_MOVE_INC_I(x) +#define BOOST_MOVE_INC_I(x) BOOST_MOVE_INC##x +#define BOOST_MOVE_INC0 1 +#define BOOST_MOVE_INC1 2 +#define BOOST_MOVE_INC2 3 +#define BOOST_MOVE_INC3 4 +#define BOOST_MOVE_INC4 5 +#define BOOST_MOVE_INC5 6 +#define BOOST_MOVE_INC6 7 +#define BOOST_MOVE_INC7 8 +#define BOOST_MOVE_INC8 9 +#define BOOST_MOVE_INC9 10 +#define BOOST_MOVE_INC10 11 +#define BOOST_MOVE_INC11 12 +#define BOOST_MOVE_INC12 13 +#define BOOST_MOVE_INC13 14 + +//BOOST_MOVE_ADD +#define BOOST_MOVE_ADD(x, y) BOOST_MOVE_ADD_I(x,y) +#define BOOST_MOVE_ADD_I(x, y) BOOST_MOVE_ADD##y(x) +#define BOOST_MOVE_ADD0(x) x +#define BOOST_MOVE_ADD1(x) BOOST_MOVE_INC(x) +#define BOOST_MOVE_ADD2(x) BOOST_MOVE_ADD1(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD3(x) BOOST_MOVE_ADD2(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD4(x) BOOST_MOVE_ADD3(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD5(x) BOOST_MOVE_ADD4(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD6(x) BOOST_MOVE_ADD5(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD7(x) BOOST_MOVE_ADD6(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD8(x) BOOST_MOVE_ADD7(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD9(x) BOOST_MOVE_ADD8(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD10(x) BOOST_MOVE_ADD9(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD11(x) BOOST_MOVE_ADD10(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD12(x) BOOST_MOVE_ADD11(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD13(x) BOOST_MOVE_ADD12(BOOST_MOVE_INC(x)) + //BOOST_MOVE_ITERATE_2TON #define BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(2) #define BOOST_MOVE_ITERATE_2TO3(MACROFUNC) BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(3) @@ -629,28 +808,34 @@ namespace move_detail { #define BOOST_MOVE_ITERATE_8TO8(MACROFUNC) MACROFUNC(8) #define BOOST_MOVE_ITERATE_9TO9(MACROFUNC) MACROFUNC(9) -//BOOST_MOVE_ITER2D_0TO9 -#define BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 0) -#define BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 1) -#define BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) MACROFUNC2D(M, 2) -#define BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) MACROFUNC2D(M, 3) -#define BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) MACROFUNC2D(M, 4) -#define BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) MACROFUNC2D(M, 5) -#define BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) MACROFUNC2D(M, 6) -#define BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) MACROFUNC2D(M, 7) -#define BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) MACROFUNC2D(M, 8) -#define BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) MACROFUNC2D(M, 9) -// -#define BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 0) -#define BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 1) -#define BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 2) -#define BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 3) -#define BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 4) -#define BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 5) -#define BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 6) -#define BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 7) -#define BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 8) -#define BOOST_MOVE_ITER2D_0TO9(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 9) +//BOOST_MOVE_ITER2D_0TOMAX +#define BOOST_MOVE_ITER2DLOW_0TOMAX0(MACROFUNC2D, M) MACROFUNC2D(M, 0) +#define BOOST_MOVE_ITER2DLOW_0TOMAX1(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX0(MACROFUNC2D, M) MACROFUNC2D(M, 1) +#define BOOST_MOVE_ITER2DLOW_0TOMAX2(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX1(MACROFUNC2D, M) MACROFUNC2D(M, 2) +#define BOOST_MOVE_ITER2DLOW_0TOMAX3(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX2(MACROFUNC2D, M) MACROFUNC2D(M, 3) +#define BOOST_MOVE_ITER2DLOW_0TOMAX4(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX3(MACROFUNC2D, M) MACROFUNC2D(M, 4) +#define BOOST_MOVE_ITER2DLOW_0TOMAX5(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX4(MACROFUNC2D, M) MACROFUNC2D(M, 5) +#define BOOST_MOVE_ITER2DLOW_0TOMAX6(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX5(MACROFUNC2D, M) MACROFUNC2D(M, 6) +#define BOOST_MOVE_ITER2DLOW_0TOMAX7(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX6(MACROFUNC2D, M) MACROFUNC2D(M, 7) +#define BOOST_MOVE_ITER2DLOW_0TOMAX8(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX7(MACROFUNC2D, M) MACROFUNC2D(M, 8) +#define BOOST_MOVE_ITER2DLOW_0TOMAX9(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX8(MACROFUNC2D, M) MACROFUNC2D(M, 9) + +#define BOOST_MOVE_ITER2D_0TOMAX0(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 0) +#define BOOST_MOVE_ITER2D_0TOMAX1(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX0(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 1) +#define BOOST_MOVE_ITER2D_0TOMAX2(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX1(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 2) +#define BOOST_MOVE_ITER2D_0TOMAX3(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX2(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 3) +#define BOOST_MOVE_ITER2D_0TOMAX4(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX3(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 4) +#define BOOST_MOVE_ITER2D_0TOMAX5(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX4(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 5) +#define BOOST_MOVE_ITER2D_0TOMAX6(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX5(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 6) +#define BOOST_MOVE_ITER2D_0TOMAX7(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX6(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 7) +#define BOOST_MOVE_ITER2D_0TOMAX8(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX7(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 8) +#define BOOST_MOVE_ITER2D_0TOMAX9(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX8(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 9) + +#define BOOST_MOVE_ITER2D_0TOMAX(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX_I (MAX, MACROFUNC2D) +#define BOOST_MOVE_ITER2D_0TOMAX_I(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX##MAX(MAX, MACROFUNC2D) + + + //BOOST_MOVE_CAT #define BOOST_MOVE_CAT(a, b) BOOST_MOVE_CAT_I(a, b) From 2a0db1e85e18f3695fdbedbd30567e237520a6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 23 Aug 2016 02:09:00 +0200 Subject: [PATCH 2/2] Add new macro utilities useful for tuple and piecewise_construct emulation in Boost.Container (part 2) --- include/boost/move/detail/fwd_macros.hpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/include/boost/move/detail/fwd_macros.hpp b/include/boost/move/detail/fwd_macros.hpp index 37e7ea5..e342363 100644 --- a/include/boost/move/detail/fwd_macros.hpp +++ b/include/boost/move/detail/fwd_macros.hpp @@ -647,11 +647,22 @@ namespace move_detail { #define BOOST_MOVE_IF_I_0 #define BOOST_MOVE_IF_I_1 , +//BOOST_MOVE_IF +#define BOOST_MOVE_IF(cond, t, f) BOOST_MOVE_IF_I(cond, t, f) +#define BOOST_MOVE_IF_I(cond, t, f) BOOST_MOVE_IIF(BOOST_MOVE_BOOL(cond), t, f) + +#define BOOST_MOVE_IIF(bit, t, f) BOOST_MOVE_IIF_I(bit, t, f) +#define BOOST_MOVE_IIF_I(bit, t, f) BOOST_MOVE_IIF_##bit(t, f) +#define BOOST_MOVE_IIF_0(t, f) f +#define BOOST_MOVE_IIF_1(t, f) t + /* -#define BOOST_MOVE_I_IF_I(x) BOOST_MOVE_I_IF_I2(BOOST_MOVE_BOOL(x)) -#define BOOST_MOVE_I_IF_I2(x) BOOST_MOVE_I_##x -#define BOOST_MOVE_I_0 -#define BOOST_MOVE_I_1 , +#define BOOST_MOVE_IIF(bit, t, f) BOOST_MOVE_IIF_OO((bit, t, f)) +#define BOOST_MOVE_IIF_OO(par) BOOST_MOVE_IIF_I ## par +#define BOOST_MOVE_IIF_I(bit, t, f) BOOST_MOVE_IIF_II(BOOST_MOVE_IIF_ ## bit(t, f)) +#define BOOST_MOVE_IIF_II(id) id +#define BOOST_MOVE_IIF_0(t, f) f +#define BOOST_MOVE_IIF_1(t, f) t */ //BOOST_MOVE_COLON