stabilize build system: depends, installer, boost/bdb fixes, cross targets groundwork
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_HPP)
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
#include <boost/vmd/detail/is_array_common.hpp>
|
||||
#include <boost/vmd/detail/is_list.hpp>
|
||||
#include <boost/vmd/detail/type_registration.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_ARRAY(data,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX(data), \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_ARRAY_D(d,data,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D(d,data), \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_LIST(data,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_WLOOP(data), \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_LIST), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_ARRAY \
|
||||
) \
|
||||
(data,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_LIST_D(d,data,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_WLOOP_D(d,data), \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_LIST), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_ARRAY_D \
|
||||
) \
|
||||
(d,data,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Input is any VMD data and a VMD type for that data
|
||||
|
||||
If the type is a tuple, checks to see if it is a more specific
|
||||
type and, if it is, returns that type,
|
||||
otherwise returns the type passed as a parameter
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(data,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(BOOST_VMD_TYPE_TUPLE,type), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_LIST, \
|
||||
BOOST_VMD_IDENTITY(type) \
|
||||
) \
|
||||
(data,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,data,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,BOOST_VMD_TYPE_TUPLE,type), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_CHECK_LIST_D, \
|
||||
BOOST_VMD_IDENTITY(type) \
|
||||
) \
|
||||
(d,data,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_HPP */
|
||||
@@ -0,0 +1,189 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_ARRAY_HPP)
|
||||
#define BOOST_VMD_DETAIL_ARRAY_HPP
|
||||
|
||||
#include <boost/preprocessor/control/expr_iif.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/empty_result.hpp>
|
||||
#include <boost/vmd/detail/is_array_common.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/tuple.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(tuple), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(tuple), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_PROCESS(tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY \
|
||||
) \
|
||||
(tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_PROCESS_D(d,tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY_D \
|
||||
) \
|
||||
(d,tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_SPLIT(param) \
|
||||
BOOST_VMD_DETAIL_ARRAY_PROCESS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE(param,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_SPLIT_D(d,param) \
|
||||
BOOST_VMD_DETAIL_ARRAY_PROCESS_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_TUPLE_D(d,param,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY(tuple) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX(tuple), \
|
||||
tuple \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY_D(d,tuple) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D(d,tuple), \
|
||||
tuple \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE(tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(tuple), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY \
|
||||
) \
|
||||
(tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE_D(d,tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(tuple), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY_D \
|
||||
) \
|
||||
(d,tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_BEGIN(param) \
|
||||
BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE(param) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_BEGIN_D(d,param) \
|
||||
BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_TUPLE_D(d,param) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_ARRAY_SPLIT, \
|
||||
BOOST_VMD_DETAIL_ARRAY_BEGIN \
|
||||
) \
|
||||
(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ARRAY_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_ARRAY_SPLIT_D, \
|
||||
BOOST_VMD_DETAIL_ARRAY_BEGIN_D \
|
||||
) \
|
||||
(d,BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_ARRAY_HPP */
|
||||
@@ -0,0 +1,69 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_ASSERT_HPP)
|
||||
#define BOOST_VMD_DETAIL_ASSERT_HPP
|
||||
|
||||
#include <boost/preprocessor/debug/assert.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
|
||||
#if BOOST_VMD_MSVC
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_OUTPUT(errstr) \
|
||||
BOOST_PP_ASSERT(0) \
|
||||
typedef char errstr[-1]; \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_DEFAULT(...) \
|
||||
BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_OUTPUT(BOOST_VMD_ASSERT_ERROR) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_ERRSTR(...) \
|
||||
BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_OUTPUT(BOOST_PP_VARIADIC_ELEM(1,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT_TRUE(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL \
|
||||
( \
|
||||
BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), \
|
||||
1 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_DEFAULT, \
|
||||
BOOST_VMD_DETAIL_ASSERT_VC_GEN_ERROR_ERRSTR \
|
||||
) \
|
||||
(__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT(...) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_ASSERT_TRUE \
|
||||
) \
|
||||
(__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#else
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT_DO(cond) \
|
||||
BOOST_PP_ASSERT(cond) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ASSERT(...) \
|
||||
BOOST_VMD_DETAIL_ASSERT_DO(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_MSVC */
|
||||
#endif /* BOOST_VMD_DETAIL_ASSERT_HPP */
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_1.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_2.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_3.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_4.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_5.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_6.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_7.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_8.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_9.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_10.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_11.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_12.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_13.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_14.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_15.hpp>
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_16.hpp>
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_HPP */
|
||||
@@ -0,0 +1,409 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_COMMON_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_COMMON_HPP
|
||||
|
||||
#include <boost/preprocessor/arithmetic/inc.hpp>
|
||||
#include <boost/preprocessor/array/elem.hpp>
|
||||
#include <boost/preprocessor/array/size.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/list/at.hpp>
|
||||
#include <boost/preprocessor/list/size.hpp>
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/seq/elem.hpp>
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/pop_front.hpp>
|
||||
#include <boost/preprocessor/tuple/push_back.hpp>
|
||||
#include <boost/preprocessor/tuple/replace.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/get_type.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(vseq1,vseq2) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq1), \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_ARRAY(d,index,data) \
|
||||
BOOST_PP_ARRAY_ELEM(index,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_LIST(d,index,data) \
|
||||
BOOST_PP_LIST_AT_D(d,data,index) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_SEQ(d,index,data) \
|
||||
BOOST_PP_SEQ_ELEM(index,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_TUPLE(d,index,data) \
|
||||
BOOST_PP_TUPLE_ELEM(index,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_ARRAY(data) \
|
||||
BOOST_PP_ARRAY_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_LIST(data) \
|
||||
BOOST_PP_LIST_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_SEQ(data) \
|
||||
BOOST_PP_SEQ_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_TUPLE(data) \
|
||||
BOOST_PP_TUPLE_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_ARRAY_D(d,data) \
|
||||
BOOST_PP_ARRAY_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_LIST_D(d,data) \
|
||||
BOOST_PP_LIST_SIZE_D(d,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_SEQ_D(d,data) \
|
||||
BOOST_PP_SEQ_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_TUPLE_D(d,data) \
|
||||
BOOST_PP_TUPLE_SIZE(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM(d,index,data,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_ARRAY, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_LIST, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_SEQ, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM_TUPLE \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,index,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(data,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_ARRAY, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_LIST, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_SEQ, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_TUPLE \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,data,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_ARRAY_D, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_LIST_D, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_SEQ_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_TUPLE_D \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_RESULT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(0,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_FIRST(state) \
|
||||
BOOST_PP_TUPLE_ELEM(1,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_SECOND(state) \
|
||||
BOOST_PP_TUPLE_ELEM(2,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_SIZE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(3,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_TYPE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(4,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX(state) \
|
||||
BOOST_PP_TUPLE_ELEM(5,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP(state) \
|
||||
BOOST_PP_TUPLE_ELEM(6,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX(state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_SIZE(state) \
|
||||
), \
|
||||
BOOST_PP_COMPL(BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_EMPTY(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_EMPTY(state) \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_INDEX(state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_EMPTY(state), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
) \
|
||||
(0,BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_POP_NE_EMPTY(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
6, \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_POP_NE_REMOVE(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
6, \
|
||||
BOOST_PP_TUPLE_POP_FRONT(BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_POP(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_SIZE(BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP(state)),1), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_POP_NE_EMPTY, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_POP_NE_REMOVE \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PUSH_CREATE(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_SUCCESS \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
6, \
|
||||
(BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX(state)) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PUSH_ADD(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_SUCCESS \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
6, \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP(state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX(state) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PUSH(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_EMPTY(state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PUSH_CREATE, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PUSH_ADD \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_INDEX(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_INDEX, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX \
|
||||
) \
|
||||
(state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_INDEX(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_FIRST(state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_TYPE(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_ELEM \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_INDEX(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_SECOND(state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_TYPE(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_PRED(d,state) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_RESULT(state), \
|
||||
1 \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_NOT_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX(state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_SIZE(state) \
|
||||
), \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_EMPTY(state) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_SUCCESS_NCP(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
5, \
|
||||
BOOST_PP_INC(BOOST_VMD_DETAIL_DATA_EQUAL_STATE_INDEX(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_SUCCESS(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_POP, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_SUCCESS_NCP \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_FAILURE(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
0, \
|
||||
0 \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT(d,state,result) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,result,0), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_FAILURE, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,result,1), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_SUCCESS, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PUSH \
|
||||
) \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_TYPE(emf,ems,vtype) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_GET_TYPE(emf), \
|
||||
vtype \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_GET_TYPE(ems), \
|
||||
vtype \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_TYPE_D(d,emf,ems,vtype) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_GET_TYPE(emf), \
|
||||
vtype \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_GET_TYPE(ems), \
|
||||
vtype \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_COMMON_HPP */
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EMPTY_RESULT_HPP)
|
||||
#define BOOST_VMD_DETAIL_EMPTY_RESULT_HPP
|
||||
|
||||
#define BOOST_VMD_DETAIL_EMPTY_RESULT(...) (,)
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EMPTY_RESULT_HPP */
|
||||
@@ -0,0 +1,562 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/detail/auto_rec.hpp>
|
||||
#include <boost/preprocessor/facilities/empty.hpp>
|
||||
#include <boost/preprocessor/facilities/overload.hpp>
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
#include <boost/vmd/is_identifier.hpp>
|
||||
#include <boost/vmd/is_empty_list.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_1.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_2.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_3.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_4.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_5.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_6.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_7.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_8.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_9.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_10.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_11.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_12.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_13.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_14.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_15.hpp>
|
||||
#include <boost/vmd/detail/recurse/equal/equal_16.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_1(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_1_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_2(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_2_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_3(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_3_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_4(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_4_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_5(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_5_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_6(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_7(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_7_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_8(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_8_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_9(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_9_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_10(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_10_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_11(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_11_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_12(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_12_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_13(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_14(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_14_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_15(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_15_D(d,vseq1,vseq2)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_16(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_16_D(d,vseq1,vseq2)
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D(n) \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_1 \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_ ## n(1,,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_, \
|
||||
BOOST_PP_AUTO_REC(BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D,16) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE(vseq1,vtype1,type) \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
vtype1 \
|
||||
), \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_LIST, \
|
||||
vtype1 \
|
||||
), \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY_LIST(vseq1) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D(d,vseq1,vtype1,type) \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
vtype1 \
|
||||
), \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TYPE_LIST, \
|
||||
vtype1 \
|
||||
), \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY_LIST_D(d,vseq1) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER(vseq1,vtype1,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_IDENTIFIER, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_IS_IDENTIFIER, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D(d,vseq1,vtype1,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TYPE_IDENTIFIER, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_IS_IDENTIFIER_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK(vseq1,vtype1,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_TUPLE, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE, \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER \
|
||||
) \
|
||||
(vseq1,vtype1,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D(d,vseq1,vtype1,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TYPE_TUPLE, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D \
|
||||
) \
|
||||
(d,vseq1,vtype1,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE(vseq1,vtype1,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(1), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK \
|
||||
) \
|
||||
(vseq1,vtype1,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D(d,vseq1,vtype1,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(1), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D \
|
||||
) \
|
||||
(d,vseq1,vtype1,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_WT_CHECK(vseq1,vseq2,vtype1,vtype2,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(type), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE, \
|
||||
BOOST_VMD_IDENTITY(1) \
|
||||
) \
|
||||
(vseq1,vtype1,type) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(type), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D, \
|
||||
BOOST_VMD_IDENTITY(1) \
|
||||
) \
|
||||
(d,vseq1,vtype1,type) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT(vseq1,vseq2,vtype1,vtype2,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_WT(vseq1,vseq2,vtype1,vtype2,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_WT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_GTYPE(vseq1,vseq2,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_GTYPE_D(d,vseq1,vseq2,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_EBP(vseq1,vseq2,be1,be2,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_EBP_D(d,vseq1,vseq2,be1,be2,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,type) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_EMPTY(vseq1,vseq2,be1,be2,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_EMPTY_D(d,vseq1,vseq2,be1,be2,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_OV1(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2), \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_OV2(vseq1,vseq2,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_D_OV1(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2), \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_D_OV2(d,vseq1,vseq2,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#if BOOST_VMD_MSVC
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
|
||||
BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
|
||||
BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
|
||||
/**/
|
||||
|
||||
#else
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
|
||||
BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
|
||||
BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_HPP */
|
||||
@@ -0,0 +1,153 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_COMMON_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_COMMON_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/comparison/not_equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/logical/bitxor.hpp>
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/get_type.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/match_single_identifier.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CONCAT_1 (1)
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_IS_1(res) \
|
||||
BOOST_PP_IS_BEGIN_PARENS \
|
||||
( \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CONCAT_, \
|
||||
res \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_MATCH_SINGLE_IDENTIFIER(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(vseq1,vseq2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CNI_SMP(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_NUMBER), \
|
||||
BOOST_PP_EQUAL, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TYPE), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE, \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER \
|
||||
) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_NUMBER), \
|
||||
BOOST_PP_EQUAL_D, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TYPE), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_MATCH_SINGLE_IDENTIFIER \
|
||||
) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_SIZE(vseq1,vseq2) \
|
||||
BOOST_PP_NOT_EQUAL \
|
||||
( \
|
||||
BOOST_PP_TUPLE_SIZE(vseq1), \
|
||||
BOOST_PP_TUPLE_SIZE(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_SIZE_D(d,vseq1,vseq2) \
|
||||
BOOST_PP_NOT_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_SIZE(vseq1), \
|
||||
BOOST_PP_TUPLE_SIZE(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype1,BOOST_VMD_TYPE_TUPLE), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype2,BOOST_VMD_TYPE_TUPLE) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_SIZE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype1,BOOST_VMD_TYPE_TUPLE), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype2,BOOST_VMD_TYPE_TUPLE) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_SIZE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY(...) 1
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(bp1,bp2) \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_PP_BITXOR \
|
||||
( \
|
||||
bp1, \
|
||||
bp2 \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq1), \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_CHK_EMPTY_MATCH(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_COMMON_HPP */
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_TYPE_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TYPE_HPP
|
||||
|
||||
#include <boost/vmd/detail/match_single_identifier.hpp>
|
||||
#include <boost/vmd/detail/type_registration.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TYPE(type1,type2) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(type1,type2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,type1,type2) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(type1,type2) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_TYPE_HPP */
|
||||
@@ -0,0 +1,429 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IDENTIFIER_HPP)
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_HPP
|
||||
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/expr_iif.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/identifier_concat.hpp>
|
||||
#include <boost/vmd/detail/is_entire.hpp>
|
||||
#include <boost/vmd/detail/match_identifier.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/parens.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_SUCCESS(id,rest,keymatch,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SUCCESS_MODS(id,rest,BOOST_PP_DEC(keymatch),mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_FAILURE(id,rest,keymatch,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_MODS(mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE_RESULT(id,rest,keymatch,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(keymatch,0), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_FAILURE, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_SUCCESS \
|
||||
) \
|
||||
(id,rest,keymatch,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE_RESULT_D(d,id,rest,keymatch,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,keymatch,0), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_FAILURE, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_SUCCESS \
|
||||
) \
|
||||
(id,rest,keymatch,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE(id,rest,keytuple,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE_RESULT \
|
||||
( \
|
||||
id, \
|
||||
rest, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER(id,keytuple), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE_D(d,id,rest,keytuple,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE_RESULT_D \
|
||||
( \
|
||||
d, \
|
||||
id, \
|
||||
rest, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D(d,id,keytuple), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_MAKE_SPLIT(tuple) \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple) \
|
||||
), \
|
||||
BOOST_PP_TUPLE_ELEM(1,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE_CONCAT_DATA(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(tuple), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_MAKE_SPLIT \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE_CONCAT(vcseq) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE_CONCAT_DATA \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS(vcseq,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_GETID_TID(tid) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(tid), \
|
||||
BOOST_VMD_IDENTITY(tid), \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
) \
|
||||
(0,tid) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_GETID_SEQUENCE(vseq) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_GETID_TID \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS(BOOST_VMD_DETAIL_IDENTIFIER_CONCATENATE(vseq)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE(vseq) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE_CONCAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_CONCATENATE(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS(id,rest,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE \
|
||||
( \
|
||||
id, \
|
||||
rest, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(mods), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_D(d,id,rest,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
id, \
|
||||
rest, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(mods), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_JUST(id,rest,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SUCCESS_MODS(id,rest,0,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_JUST_D(d,id,rest,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SUCCESS_MODS(id,rest,0,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_CHECK_KEYS(id,rest,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(mods) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_JUST, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS \
|
||||
) \
|
||||
(id,rest,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_CHECK_KEYS_D(d,id,rest,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(mods) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_JUST_D, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_KEYS_D \
|
||||
) \
|
||||
(d,id,rest,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_MKEYS(mods) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(mods), \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(mods) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SUCCESS_MODS(id,rest,keymatch,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_MKEYS(mods), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(mods), \
|
||||
(id,rest,keymatch), \
|
||||
(id,keymatch) \
|
||||
), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(mods), \
|
||||
(id,rest), \
|
||||
id \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_MODS(mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_MKEYS(mods), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(mods), \
|
||||
(,,), \
|
||||
(,) \
|
||||
), \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(mods), \
|
||||
(,) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_REST(id,rest,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_MODS(mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_REST_D(d,id,rest,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_MODS(mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_ID_REST(id,rest,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(id), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_REST, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_CHECK_KEYS \
|
||||
) \
|
||||
(id,rest,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_ID_REST_D(d,id,rest,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(id), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_REST_D, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_CHECK_KEYS_D \
|
||||
) \
|
||||
(d,id,rest,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_DATA(tuple,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_ID_REST \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple), \
|
||||
BOOST_PP_TUPLE_ELEM(1,tuple), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_ID(id,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(id), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_REST, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_CHECK_KEYS \
|
||||
) \
|
||||
(id,,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_ID_D(d,id,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(id), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_REST_D, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_CHECK_KEYS_D \
|
||||
) \
|
||||
(d,id,,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_DATA_D(d,tuple,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_ID_REST_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple), \
|
||||
BOOST_PP_TUPLE_ELEM(1,tuple), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_AFTER(vseq,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_DATA \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE(vseq), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_AFTER_D(d,vseq,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_DATA_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SPLIT_SEQUENCE(vseq), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_ID(vseq,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_ID \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_GETID_SEQUENCE(vseq), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_ID_D(d,vseq,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_PROCESS_ID_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_GETID_SEQUENCE(vseq), \
|
||||
mods \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE(vseq,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(mods), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_AFTER, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_ID \
|
||||
) \
|
||||
(vseq,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_D(d,vseq,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(mods), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_AFTER_D, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_ID_D \
|
||||
) \
|
||||
(d,vseq,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_EX_FAILURE(vseq,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_MODS(mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_EX_FAILURE_D(d,vseq,mods) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_FAILURE_MODS(mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_EX(vseq,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(vseq), \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_EX_FAILURE, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE \
|
||||
) \
|
||||
(vseq,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_EX_D(d,vseq,mods) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(vseq), \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_EX_FAILURE_D, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SEQUENCE_D \
|
||||
) \
|
||||
(d,vseq,mods) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER(...) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_EX \
|
||||
( \
|
||||
BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__), \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_INDEX,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_D(d,...) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_EX_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__), \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_INDEX,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_MULTIPLE(...) \
|
||||
BOOST_VMD_DETAIL_IS_ENTIRE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER(__VA_ARGS__,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_MULTIPLE_D(d,...) \
|
||||
BOOST_VMD_DETAIL_IS_ENTIRE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_D(d,__VA_ARGS__,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IDENTIFIER_HPP */
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IDENTIFIER_CONCAT_HPP)
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_CONCAT_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/vmd/detail/idprefix.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_CONCATENATE(vseq) \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_REGISTRATION_PREFIX, \
|
||||
vseq \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IDENTIFIER_CONCAT_HPP */
|
||||
@@ -0,0 +1,118 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IDENTIFIER_TYPE_HPP)
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_tuple.hpp>
|
||||
#include <boost/vmd/detail/idprefix.hpp>
|
||||
#include <boost/vmd/detail/number_registration.hpp>
|
||||
#include <boost/vmd/detail/type_registration.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCATENATE(id) \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_SUBTYPE_REGISTRATION_PREFIX, \
|
||||
id \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE(cres) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL \
|
||||
( \
|
||||
BOOST_PP_TUPLE_SIZE(cres), \
|
||||
2 \
|
||||
), \
|
||||
BOOST_PP_TUPLE_ELEM, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
|
||||
) \
|
||||
(0,cres) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE_D(d,cres) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_SIZE(cres), \
|
||||
2 \
|
||||
), \
|
||||
BOOST_PP_TUPLE_ELEM, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
|
||||
) \
|
||||
(0,cres) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT(cres) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(cres), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
|
||||
) \
|
||||
(cres) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT_D(d,cres) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(cres), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE_D, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
|
||||
) \
|
||||
(d,cres) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Determines the type of an identifier.
|
||||
|
||||
The type may be that of an identifier or else
|
||||
it may be a subtype.
|
||||
|
||||
Assumes the 'id' is a valid identifier id
|
||||
|
||||
Expands to the appropriate type
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE(id) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCATENATE(id) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_D(d,id) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCATENATE(id) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IDENTIFIER_TYPE_HPP */
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IDPREFIX_HPP)
|
||||
#define BOOST_VMD_DETAIL_IDPREFIX_HPP
|
||||
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_DETECTION_PREFIX BOOST_VMD_DETECT_
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_REGISTRATION_PREFIX BOOST_VMD_REGISTER_
|
||||
#define BOOST_VMD_DETAIL_IDENTIFIER_SUBTYPE_REGISTRATION_PREFIX BOOST_VMD_SUBTYPE_REGISTER_
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IDPREFIX_HPP */
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_ARRAY_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_tuple.hpp>
|
||||
#include <boost/vmd/detail/is_array_common.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(vseq), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_D(d,vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(vseq), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_ARRAY_HPP */
|
||||
@@ -0,0 +1,248 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_ARRAY_COMMON_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_COMMON_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/facilities/empty.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_number.hpp>
|
||||
#include <boost/vmd/is_tuple.hpp>
|
||||
#include <boost/vmd/detail/is_empty_tuple.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(2,BOOST_PP_TUPLE_SIZE(tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,2,BOOST_PP_TUPLE_SIZE(tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Check if the first element of the tuple is equal to the number of tuple elements of the second element
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE(x) \
|
||||
BOOST_PP_EQUAL(BOOST_PP_TUPLE_ELEM(0,x),BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,x))) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE_D(d,x) \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_ELEM(0,x),BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,x))) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY(tuple) \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,tuple)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY_D(d,tuple) \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,tuple)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH(tuple) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE, \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY \
|
||||
) \
|
||||
(tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_D(d,tuple) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE_D, \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY_D \
|
||||
) \
|
||||
(d,tuple) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Check if the first element is numeric
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_NUM(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_NUM(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_NUMBER(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_NUMBER(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Check if the second element is a tuple
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(BOOST_PP_TUPLE_ELEM(1,tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(BOOST_PP_TUPLE_ELEM(1,tuple)), \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM(x) BOOST_VMD_IS_EMPTY(BOOST_PP_CAT(BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_, x) BOOST_PP_EMPTY())
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_0
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_1
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_2
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_3
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_4
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_5
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_6
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_7
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_8
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_9
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_10
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_11
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_12
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_13
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_14
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_15
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_16
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_17
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_18
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_19
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_20
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_21
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_22
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_23
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_24
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_25
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_26
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_27
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_28
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_29
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_30
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_31
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_32
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_33
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_34
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_35
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_36
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_37
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_38
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_39
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_40
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_41
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_42
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_43
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_44
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_45
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_46
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_47
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_48
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_49
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_50
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_51
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_52
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_53
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_54
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_55
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_56
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_57
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_58
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_59
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_60
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_61
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_62
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_63
|
||||
#define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_64
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_ARRAY_COMMON_HPP */
|
||||
@@ -0,0 +1,61 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_EMPTY_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_HPP
|
||||
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
|
||||
#if BOOST_VMD_MSVC
|
||||
|
||||
# pragma warning(once:4002)
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_IIF_0(t, b) b
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_IIF_1(t, b) t
|
||||
|
||||
#if BOOST_VMD_MSVC_V8
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_PROCESS(param) \
|
||||
BOOST_PP_IS_BEGIN_PARENS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C param () \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#else
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_PROCESS(...) \
|
||||
BOOST_PP_IS_BEGIN_PARENS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_IIF_0(t, ...) __VA_ARGS__
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_IIF_1(t, ...) t
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_PROCESS(...) \
|
||||
BOOST_PP_IS_BEGIN_PARENS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_MSVC */
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_PRIMITIVE_CAT(a, b) a ## b
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_IIF(bit) \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_PRIMITIVE_CAT(BOOST_VMD_DETAIL_IS_EMPTY_IIF_,bit) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C(...) ()
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_GEN_ZERO(...) 0
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_EMPTY_HPP */
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_EMPTY_ARRAY_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_ARRAY_HPP
|
||||
|
||||
#include <boost/preprocessor/array/size.hpp>
|
||||
#include <boost/preprocessor/logical/not.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_ARRAY_SIZE(array) \
|
||||
BOOST_PP_NOT \
|
||||
( \
|
||||
BOOST_PP_ARRAY_SIZE(array) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_EMPTY_ARRAY_HPP */
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_HPP
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_tuple.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_CEM(tuple) \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(BOOST_PP_TUPLE_SIZE(tuple),1), \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_CEM, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_SIZE(tuple),1), \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_CEM, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE(tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(tuple), \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_D(d,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(tuple), \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_HPP */
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_ENTIRE_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_ENTIRE_HPP
|
||||
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ENTIRE(tuple) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(1,tuple)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_ENTIRE_HPP */
|
||||
@@ -0,0 +1,96 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_IDENTIFIER_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_HPP
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_tuple.hpp>
|
||||
#include <boost/vmd/detail/identifier.hpp>
|
||||
#include <boost/vmd/detail/identifier_concat.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ_MATCH(tup) \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tup) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ_TUPLE(ptup) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(ptup), \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ_MATCH, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(ptup) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ_ID(vseq) \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_CONCATENATE(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(vseq), \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ_ID \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE(...) \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE_D(d,...) \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_VSEQ(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),1), \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE, \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_MULTIPLE \
|
||||
) \
|
||||
(__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_IDENTIFIER_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),1), \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE_D, \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_MULTIPLE_D \
|
||||
) \
|
||||
(d,__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_IDENTIFIER_HPP */
|
||||
@@ -0,0 +1,207 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_LIST_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/while.hpp>
|
||||
#include <boost/preprocessor/debug/assert.hpp>
|
||||
#include <boost/preprocessor/facilities/empty.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_identifier.hpp>
|
||||
#include <boost/vmd/is_tuple.hpp>
|
||||
#include <boost/vmd/detail/nil_registration.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_PROCESS_TUPLE(d,x) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_TUPLE(x), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PROCESS_TUPLE_SIZE, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_ASSERT \
|
||||
) \
|
||||
(d,x) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_PROCESS_TUPLE_SIZE(d,x) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,2,BOOST_PP_TUPLE_SIZE(x)), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_RETURN_SECOND, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_ASSERT \
|
||||
) \
|
||||
(x) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_PRED(d,state) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(state), \
|
||||
BOOST_VMD_IDENTITY(1), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_NOT_BOOST_PP_NIL \
|
||||
) \
|
||||
(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_OP(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(state), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PROCESS_TUPLE, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PROCESS_IF_BOOST_PP_NIL \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_PROCESS_IF_BOOST_PP_NIL(d,x) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_BOOST_PP_NIL(x), \
|
||||
BOOST_PP_NIL, \
|
||||
BOOST_VMD_IS_LIST_FAILURE \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_ASSERT(...) \
|
||||
BOOST_VMD_IS_LIST_FAILURE \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_NOT_BOOST_PP_NIL(x) \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_BOOST_PP_NIL(x), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_IS_FAILURE(x) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_BOOST_PP_NIL(x) \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_NIL_HELPER_, \
|
||||
x \
|
||||
) BOOST_PP_EMPTY() \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_NIL_HELPER_BOOST_PP_NIL
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_IS_FAILURE(x) \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_CAT(BOOST_VMD_DETAIL_IS_LIST_FHELPER_,x) BOOST_PP_EMPTY() \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_FHELPER_BOOST_VMD_IS_LIST_FAILURE
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_RETURN_SECOND(x) \
|
||||
BOOST_PP_TUPLE_ELEM(1,x) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_RESULT(x) \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_IS_FAILURE(x) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_WLOOP(list) \
|
||||
BOOST_VMD_DETAIL_IS_LIST_RESULT \
|
||||
( \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PRED, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_OP, \
|
||||
list \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_WLOOP_D(d,list) \
|
||||
BOOST_VMD_DETAIL_IS_LIST_RESULT \
|
||||
( \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PRED, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_OP, \
|
||||
list \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_IS_EMPTY_LIST_PROCESS(list) \
|
||||
BOOST_VMD_IS_IDENTIFIER(list,BOOST_PP_NIL) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_IS_EMPTY_LIST_PROCESS_D(d,list) \
|
||||
BOOST_VMD_IS_IDENTIFIER_D(d,list,BOOST_PP_NIL) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_PROCESS(param) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(param), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_WLOOP, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_IS_EMPTY_LIST_PROCESS \
|
||||
) \
|
||||
(param) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST(param) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(param), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PROCESS \
|
||||
) \
|
||||
(param) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_PROCESS_D(d,param) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(param), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_WLOOP_D, \
|
||||
BOOST_VMD_DETAIL_IS_LIST_IS_EMPTY_LIST_PROCESS_D \
|
||||
) \
|
||||
(d,param) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_LIST_D(d,param) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(param), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_IS_LIST_PROCESS_D \
|
||||
) \
|
||||
(d,param) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_LIST_HPP */
|
||||
@@ -0,0 +1,38 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_NUMBER_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_NUMBER_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
#include <boost/vmd/detail/identifier_type.hpp>
|
||||
#include <boost/vmd/detail/is_identifier.hpp>
|
||||
#include <boost/vmd/detail/number_registration.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_NUMBER_TYPE(vseq) \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_NUMBER, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_NUMBER(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE(vseq), \
|
||||
BOOST_VMD_DETAIL_IS_NUMBER_TYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_NUMBER_HPP */
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_SEQ_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_SEQ_HPP
|
||||
|
||||
#include <boost/vmd/detail/is_entire.hpp>
|
||||
#include <boost/vmd/detail/seq.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_SEQ(seq) \
|
||||
BOOST_VMD_DETAIL_IS_ENTIRE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQ_SPLIT(seq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_SEQ_D(d,seq) \
|
||||
BOOST_VMD_DETAIL_IS_ENTIRE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQ_SPLIT_D(d,seq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_SEQ_HPP */
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_TUPLE_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_TUPLE_HPP
|
||||
|
||||
#include <boost/vmd/detail/is_entire.hpp>
|
||||
#include <boost/vmd/detail/parens_split.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_TUPLE(vseq) \
|
||||
BOOST_VMD_DETAIL_IS_ENTIRE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS_SPLIT(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_TUPLE_HPP */
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_TYPE_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/detail/identifier_type.hpp>
|
||||
#include <boost/vmd/detail/is_type_type.hpp>
|
||||
#include <boost/vmd/detail/is_identifier.hpp>
|
||||
#include <boost/vmd/detail/type_registration.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_IMP_TYPE(vseq) \
|
||||
BOOST_VMD_DETAIL_IS_TYPE_TYPE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_IMP_TYPE_D(d,vseq) \
|
||||
BOOST_VMD_DETAIL_IS_TYPE_TYPE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_D(d,vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE(vseq), \
|
||||
BOOST_VMD_DETAIL_IS_TYPE_IMP_TYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_D(d,vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_IDENTIFIER_SINGLE_D(d,vseq), \
|
||||
BOOST_VMD_DETAIL_IS_TYPE_IMP_TYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_TYPE_HPP */
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_TYPE_TYPE_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_TYPE_HPP
|
||||
|
||||
#include <boost/vmd/detail/type_registration.hpp>
|
||||
#include <boost/vmd/detail/match_single_identifier.hpp>
|
||||
|
||||
/*
|
||||
|
||||
Check to see if the 'id' is BOOST_VMD_TYPE_TYPE
|
||||
|
||||
Returns 1 if it is, else 0
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_TYPE(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_TYPE_TYPE) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_TYPE_TYPE_HPP */
|
||||
@@ -0,0 +1,212 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_LIST_HPP)
|
||||
#define BOOST_VMD_DETAIL_LIST_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/pop_back.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/empty_result.hpp>
|
||||
#include <boost/vmd/detail/identifier.hpp>
|
||||
#include <boost/vmd/detail/is_list.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/parens.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_CHECK_FOR_LIST(tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
tuple, \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_CHECK_FOR_LIST_D(d,tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
tuple, \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_CHECK_RETURN(tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_LIST_CHECK_FOR_LIST \
|
||||
) \
|
||||
(tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_CHECK_RETURN_D(d,tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
tuple \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_LIST_CHECK_FOR_LIST_D \
|
||||
) \
|
||||
(d,tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_EMPTY_LIST(list) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER(list,BOOST_PP_NIL,BOOST_VMD_RETURN_AFTER,BOOST_VMD_RETURN_INDEX) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_EMPTY_LIST_D(d,list) \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_D(d,list,BOOST_PP_NIL,BOOST_VMD_RETURN_AFTER,BOOST_VMD_RETURN_INDEX) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_TUPLE(param) \
|
||||
BOOST_VMD_DETAIL_LIST_CHECK_RETURN \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS(param,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_TUPLE_D(d,param) \
|
||||
BOOST_VMD_DETAIL_LIST_CHECK_RETURN_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_PARENS_D(d,param,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_EMPTY_PROCESS(tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple) \
|
||||
), \
|
||||
(,), \
|
||||
tuple \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_EMPTY(list) \
|
||||
BOOST_VMD_DETAIL_LIST_EMPTY_PROCESS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_LIST_EMPTY_LIST(list) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_EMPTY_D(d,list) \
|
||||
BOOST_VMD_DETAIL_LIST_EMPTY_PROCESS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_LIST_EMPTY_LIST_D(d,list) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_PROCESS(list) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(list), \
|
||||
BOOST_VMD_DETAIL_LIST_TUPLE, \
|
||||
BOOST_VMD_DETAIL_LIST_EMPTY \
|
||||
) \
|
||||
(list) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_SPLIT(list) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(list), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_LIST_PROCESS \
|
||||
) \
|
||||
(list) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_BEGIN(list) \
|
||||
BOOST_PP_TUPLE_ELEM(0,BOOST_VMD_DETAIL_LIST_SPLIT(list)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_PROCESS_D(d,list) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(list), \
|
||||
BOOST_VMD_DETAIL_LIST_TUPLE_D, \
|
||||
BOOST_VMD_DETAIL_LIST_EMPTY_D \
|
||||
) \
|
||||
(d,list) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_SPLIT_D(d,list) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(list), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_LIST_PROCESS_D \
|
||||
) \
|
||||
(d,list) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_BEGIN_D(d,list) \
|
||||
BOOST_PP_TUPLE_ELEM(0,BOOST_VMD_DETAIL_LIST_SPLIT_D(d,list)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_LIST_SPLIT_D, \
|
||||
BOOST_VMD_DETAIL_LIST_BEGIN_D \
|
||||
) \
|
||||
(d,BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_LIST(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_LIST_SPLIT, \
|
||||
BOOST_VMD_DETAIL_LIST_BEGIN \
|
||||
) \
|
||||
(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_LIST_HPP */
|
||||
@@ -0,0 +1,160 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_MATCH_IDENTIFIER_HPP)
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_HPP
|
||||
|
||||
#include <boost/preprocessor/arithmetic/inc.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/comparison/not_equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/while.hpp>
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/replace.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/idprefix.hpp>
|
||||
#include <boost/vmd/detail/match_identifier_common.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_ID(state) \
|
||||
BOOST_PP_TUPLE_ELEM(0,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(1,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE_SIZE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(2,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_CURRENT(state) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state), \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state) \
|
||||
BOOST_PP_TUPLE_ELEM(3,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_RESULT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(4,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_PRED(d,state) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_RESULT(state), \
|
||||
0 \
|
||||
), \
|
||||
BOOST_PP_NOT_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state), \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE_SIZE(state) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_FOUND(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
4, \
|
||||
BOOST_PP_INC \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CONTINUE(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
3, \
|
||||
BOOST_PP_INC \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CMP_IDS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_ID(state), \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_CURRENT(state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_FOUND, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CONTINUE \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Return index starting with 1 of the tuple id the identifier matches, or 0 if there are no matches.
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER(id,keytuple) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
4, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_PRED, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP, \
|
||||
( \
|
||||
id, \
|
||||
keytuple, \
|
||||
BOOST_PP_TUPLE_SIZE(keytuple), \
|
||||
0, \
|
||||
0 \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Return index starting with 1 of the tuple id the identifier matches, or 0 if there are no matches.
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D(d,id,keytuple) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
4, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_PRED, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP, \
|
||||
( \
|
||||
id, \
|
||||
keytuple, \
|
||||
BOOST_PP_TUPLE_SIZE(keytuple), \
|
||||
0, \
|
||||
0 \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_MATCH_IDENTIFIER_HPP */
|
||||
@@ -0,0 +1,37 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_MATCH_IDENTIFIER_COMMON_HPP)
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_COMMON_HPP
|
||||
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/idprefix.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CREATE_ID_RESULT(id,keyid) \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_DETECTION_PREFIX, \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
keyid, \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
_, \
|
||||
id \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CMP_IDS(id,keyid) \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CREATE_ID_RESULT(id,keyid) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_MATCH_IDENTIFIER_COMMON_HPP */
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER_HPP)
|
||||
#define BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER_HPP
|
||||
|
||||
#include <boost/vmd/detail/match_identifier_common.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,key) \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CMP_IDS(id,key) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER_HPP */
|
||||
@@ -0,0 +1,104 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_MODIFIERS_HPP)
|
||||
#define BOOST_VMD_DETAIL_MODIFIERS_HPP
|
||||
|
||||
#include <boost/vmd/detail/match_single_identifier.hpp>
|
||||
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_NO_TYPE (BOOST_VMD_RETURN_NO_TYPE)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_TYPE (BOOST_VMD_RETURN_TYPE)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_TYPE_TUPLE (BOOST_VMD_RETURN_TYPE_TUPLE)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_TYPE_ARRAY (BOOST_VMD_RETURN_TYPE_ARRAY)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_TYPE_LIST (BOOST_VMD_RETURN_TYPE_LIST)
|
||||
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_AFTER (BOOST_VMD_RETURN_AFTER)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_NO_AFTER (BOOST_VMD_RETURN_NO_AFTER)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_ONLY_AFTER (BOOST_VMD_RETURN_ONLY_AFTER)
|
||||
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_INDEX (BOOST_VMD_RETURN_INDEX)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_RETURN_NO_INDEX (BOOST_VMD_RETURN_NO_INDEX)
|
||||
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_NO_TYPE_BOOST_VMD_RETURN_NO_TYPE
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_TYPE_BOOST_VMD_RETURN_TYPE
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_TYPE_TUPLE_BOOST_VMD_RETURN_TYPE_TUPLE
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_TYPE_ARRAY_BOOST_VMD_RETURN_TYPE_ARRAY
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_TYPE_LIST_BOOST_VMD_RETURN_TYPE_LIST
|
||||
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_AFTER_BOOST_VMD_RETURN_AFTER
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_NO_AFTER_BOOST_VMD_RETURN_NO_AFTER
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_ONLY_AFTER_BOOST_VMD_RETURN_ONLY_AFTER
|
||||
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_INDEX_BOOST_VMD_RETURN_INDEX
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_RETURN_NO_INDEX_BOOST_VMD_RETURN_NO_INDEX
|
||||
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_ALLOW_ALL (BOOST_VMD_ALLOW_ALL)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_ALLOW_RETURN (BOOST_VMD_ALLOW_RETURN)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_ALLOW_AFTER (BOOST_VMD_ALLOW_AFTER)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_ALLOW_INDEX (BOOST_VMD_ALLOW_INDEX)
|
||||
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_ALLOW_ALL_BOOST_VMD_ALLOW_ALL
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_ALLOW_RETURN_BOOST_VMD_ALLOW_RETURN
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_ALLOW_AFTER_BOOST_VMD_ALLOW_AFTER
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_ALLOW_INDEX_BOOST_VMD_ALLOW_INDEX
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_TYPE_TUPLE(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_TYPE_ARRAY(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_TYPE_ARRAY) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_TYPE_LIST(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_TYPE_LIST) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_TYPE(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_TYPE) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_NO_TYPE(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_NO_TYPE) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_AFTER(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_AFTER) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_ONLY_AFTER(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_ONLY_AFTER) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_NO_AFTER(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_NO_AFTER) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_INDEX(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_INDEX) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_RETURN_NO_INDEX(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_RETURN_NO_INDEX) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ALLOW_ALL(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_ALLOW_ALL) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ALLOW_RETURN(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_ALLOW_RETURN) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ALLOW_AFTER(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_ALLOW_AFTER) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_ALLOW_INDEX(id) \
|
||||
BOOST_VMD_DETAIL_MATCH_SINGLE_IDENTIFIER(id,BOOST_VMD_ALLOW_INDEX) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_MODIFIERS_HPP */
|
||||
@@ -0,0 +1,707 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_MODS_HPP)
|
||||
#define BOOST_VMD_DETAIL_MODS_HPP
|
||||
|
||||
#include <boost/preprocessor/arithmetic/inc.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/comparison/greater.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/while.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/pop_front.hpp>
|
||||
#include <boost/preprocessor/tuple/push_back.hpp>
|
||||
#include <boost/preprocessor/tuple/replace.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/preprocessor/variadic/to_tuple.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_type.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_NO_RETURN 0
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN 1
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN_TUPLE 2
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN_ARRAY 3
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN_LIST 4
|
||||
#define BOOST_VMD_DETAIL_MODS_NO_AFTER 0
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN_AFTER 1
|
||||
#define BOOST_VMD_DETAIL_MODS_NO_INDEX 0
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN_INDEX 1
|
||||
#define BOOST_VMD_DETAIL_MODS_NO_ONLY_AFTER 0
|
||||
#define BOOST_VMD_DETAIL_MODS_RETURN_ONLY_AFTER 1
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_TUPLE_RETURN 0
|
||||
#define BOOST_VMD_DETAIL_MODS_TUPLE_AFTER 1
|
||||
#define BOOST_VMD_DETAIL_MODS_TUPLE_INDEX 2
|
||||
#define BOOST_VMD_DETAIL_MODS_TUPLE_OTHER 3
|
||||
#define BOOST_VMD_DETAIL_MODS_TUPLE_ONLY_AFTER 4
|
||||
#define BOOST_VMD_DETAIL_MODS_TUPLE_TYPE 5
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_DATA_INPUT 0
|
||||
#define BOOST_VMD_DETAIL_MODS_DATA_INDEX 1
|
||||
#define BOOST_VMD_DETAIL_MODS_DATA_SIZE 2
|
||||
#define BOOST_VMD_DETAIL_MODS_DATA_RESULT 3
|
||||
#define BOOST_VMD_DETAIL_MODS_DATA_ALLOW 4
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_INPUT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_DATA_INPUT,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_INDEX(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_DATA_INDEX,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_SIZE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_DATA_SIZE,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_RESULT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_DATA_RESULT,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_ALLOW(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_DATA_ALLOW,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_ALL(state) \
|
||||
BOOST_VMD_DETAIL_IS_ALLOW_ALL(BOOST_VMD_DETAIL_MODS_STATE_ALLOW(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_RETURN(state) \
|
||||
BOOST_VMD_DETAIL_IS_ALLOW_RETURN(BOOST_VMD_DETAIL_MODS_STATE_ALLOW(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_AFTER(state) \
|
||||
BOOST_VMD_DETAIL_IS_ALLOW_AFTER(BOOST_VMD_DETAIL_MODS_STATE_ALLOW(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_INDEX(state) \
|
||||
BOOST_VMD_DETAIL_IS_ALLOW_INDEX(BOOST_VMD_DETAIL_MODS_STATE_ALLOW(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_CURRENT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_STATE_INDEX(state),BOOST_VMD_DETAIL_MODS_STATE_INPUT(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_TYPE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_RETURN,BOOST_VMD_DETAIL_MODS_STATE_RESULT(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_AFTER(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_AFTER,BOOST_VMD_DETAIL_MODS_STATE_RESULT(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_ONLY_AFTER(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_ONLY_AFTER,BOOST_VMD_DETAIL_MODS_STATE_RESULT(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_STATE_TINDEX(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_INDEX,BOOST_VMD_DETAIL_MODS_STATE_RESULT(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_RESULT_RETURN_TYPE(result) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_RETURN,result) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(result) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_AFTER,result) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(result) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_ONLY_AFTER,result) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(result) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_INDEX,result) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_RESULT_OTHER(result) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_OTHER,result) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_RESULT_TYPE(result) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_MODS_TUPLE_TYPE,result) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_PRED(d,state) \
|
||||
BOOST_PP_GREATER_D(d,BOOST_VMD_DETAIL_MODS_STATE_SIZE(state),BOOST_VMD_DETAIL_MODS_STATE_INDEX(state))
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_RETURN_TYPE(d,state,number) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_RETURN, \
|
||||
number \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ONLY_AFTER(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_ONLY_AFTER, \
|
||||
1 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_AFTER, \
|
||||
1 \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_INDEX(d,state,number) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_INDEX, \
|
||||
number \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_GTT(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_RETURN_TYPE(d,state,BOOST_VMD_DETAIL_MODS_RETURN_TUPLE) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ET(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_RETURN_TYPE(d,state,BOOST_VMD_DETAIL_MODS_RETURN) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_SA(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_RETURN_TYPE(d,state,BOOST_VMD_DETAIL_MODS_RETURN_ARRAY) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_SL(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_RETURN_TYPE(d,state,BOOST_VMD_DETAIL_MODS_RETURN_LIST) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_NT(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_RETURN_TYPE(d,state,BOOST_VMD_DETAIL_MODS_NO_RETURN) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_AFT(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_AFTER, \
|
||||
BOOST_VMD_DETAIL_MODS_RETURN_AFTER \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_NOAFT(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_ONLY_AFTER, \
|
||||
0 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_AFTER, \
|
||||
BOOST_VMD_DETAIL_MODS_NO_AFTER \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_IND(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_INDEX(d,state,BOOST_VMD_DETAIL_MODS_RETURN_INDEX) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_NO_IND(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_INDEX(d,state,BOOST_VMD_DETAIL_MODS_NO_INDEX) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_CTUPLE_REPLACE(d,state,id) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_OTHER, \
|
||||
BOOST_PP_VARIADIC_TO_TUPLE(id) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_CTUPLE_ADD(d,state,id) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_OTHER, \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(BOOST_VMD_DETAIL_MODS_STATE_RESULT(state)), \
|
||||
id \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_CTUPLE(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(BOOST_VMD_DETAIL_MODS_STATE_RESULT(state)) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_CTUPLE_REPLACE, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_CTUPLE_ADD \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_TYPE_RETURN(d,state,id) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_RETURN, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,id,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_MODS_RETURN_ARRAY, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,id,BOOST_VMD_TYPE_LIST), \
|
||||
BOOST_VMD_DETAIL_MODS_RETURN_LIST, \
|
||||
BOOST_VMD_DETAIL_MODS_RETURN_TUPLE \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_TYPE(d,state,id) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_TYPE_RETURN(d,state,id), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_TYPE, \
|
||||
id \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_ALL(state), \
|
||||
BOOST_VMD_IS_TYPE_D(d,id) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_TYPE, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN_CTUPLE \
|
||||
) \
|
||||
(d,state,id) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE(d,state) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_INDEX, \
|
||||
BOOST_PP_INC(BOOST_VMD_DETAIL_MODS_STATE_INDEX(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_ALL(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE_TUPLE(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_GTT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ET, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE_ARRAY(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_SA, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE_LIST(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_SL, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_TYPE(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_AFT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NOAFT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_ONLY_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ONLY_AFTER, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_INDEX(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_IND, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_INDEX(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NO_IND, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_RETURN(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE_TUPLE(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_GTT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ET, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE_ARRAY(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_SA, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_TYPE_LIST(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_SL, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_TYPE(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NT, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_AFTER(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_AFT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NOAFT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_ONLY_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ONLY_AFTER, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_INDEX(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_AFT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NOAFT, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_ONLY_AFTER(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ONLY_AFTER, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_INDEX(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_IND, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_RETURN_NO_INDEX(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_NO_IND, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UNKNOWN \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_UPDATE(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_ID(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_ALL(state), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_ALL, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_RETURN(state), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_RETURN, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_AFTER(state), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_AFTER, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_IS_ALLOW_INDEX(state), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_INDEX, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ALLOW_UPDATE \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT_TUPLE(d,state,id) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_UPDATE \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_MODS_DATA_RESULT, \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_MODS_TUPLE_OTHER, \
|
||||
id \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP_CURRENT(d,state,id) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(id), \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_TUPLE, \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT_ID \
|
||||
) \
|
||||
(d,state,id) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_MODS_OP_CURRENT(d,state,BOOST_VMD_DETAIL_MODS_STATE_CURRENT(state)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_LOOP(allow,tuple) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
3, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_PRED, \
|
||||
BOOST_VMD_DETAIL_MODS_OP, \
|
||||
( \
|
||||
tuple, \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_SIZE(tuple), \
|
||||
(0,0,0,,0,), \
|
||||
allow \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_MODS_LOOP_D(d,allow,tuple) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
3, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_PRED, \
|
||||
BOOST_VMD_DETAIL_MODS_OP, \
|
||||
( \
|
||||
tuple, \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_SIZE(tuple), \
|
||||
(0,0,0,,0,), \
|
||||
allow \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_NEW_MODS_VAR(allow,tuple) \
|
||||
BOOST_VMD_DETAIL_MODS_LOOP \
|
||||
( \
|
||||
allow, \
|
||||
BOOST_PP_TUPLE_POP_FRONT(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_NEW_MODS_VAR_D(d,allow,tuple) \
|
||||
BOOST_VMD_DETAIL_MODS_LOOP_D \
|
||||
( \
|
||||
d, \
|
||||
allow, \
|
||||
BOOST_PP_TUPLE_POP_FRONT(tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_NEW_MODS_IR(allow,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(BOOST_PP_TUPLE_SIZE(tuple),1), \
|
||||
BOOST_VMD_IDENTITY((0,0,0,,0,)), \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_VAR \
|
||||
) \
|
||||
(allow,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_NEW_MODS_IR_D(d,allow,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_SIZE(tuple),1), \
|
||||
BOOST_VMD_IDENTITY((0,0,0,,0,)), \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_VAR_D \
|
||||
) \
|
||||
(d,allow,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Returns a six-element tuple:
|
||||
|
||||
First tuple element = 0 No type return
|
||||
1 Exact type return
|
||||
2 General tuple type return
|
||||
3 Array return
|
||||
4 List return
|
||||
|
||||
Second tuple element = 0 No after return
|
||||
1 After return
|
||||
|
||||
Third tuple element = 0 No identifier index
|
||||
1 Identifier Index
|
||||
|
||||
Fourth tuple element = Tuple of other identifiers
|
||||
|
||||
Fifth tuple element = 0 No after only return
|
||||
1 After only return
|
||||
|
||||
Sixth tuple element = Type identifier
|
||||
|
||||
Input = allow, either
|
||||
BOOST_VMD_ALLOW_ALL
|
||||
BOOST_VMD_ALLOW_RETURN
|
||||
BOOST_VMD_ALLOW_AFTER
|
||||
BOOST_VMD_ALLOW_INDEX
|
||||
|
||||
..., modifiers, first variadic is discarded
|
||||
Possible modifiers are:
|
||||
|
||||
BOOST_VMD_RETURN_NO_TYPE = (0,0)
|
||||
BOOST_VMD_RETURN_TYPE = (1,0)
|
||||
BOOST_VMD_RETURN_TYPE_TUPLE = (2,0)
|
||||
BOOST_VMD_RETURN_TYPE_ARRAY = (3,0)
|
||||
BOOST_VMD_RETURN_TYPE_LIST = (4,0)
|
||||
|
||||
BOOST_VMD_RETURN_NO_AFTER = (0,0)
|
||||
BOOST_VMD_RETURN_AFTER = (0,1)
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_NEW_MODS(allow,...) \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_IR(allow,BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_NEW_MODS_D(d,allow,...) \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_IR_D(d,allow,BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_MODS_HPP */
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_NIL_REGISTRATION_HPP)
|
||||
#define BOOST_VMD_DETAIL_NIL_REGISTRATION_HPP
|
||||
|
||||
#define BOOST_VMD_REGISTER_BOOST_PP_NIL (BOOST_PP_NIL)
|
||||
#define BOOST_VMD_DETECT_BOOST_PP_NIL_BOOST_PP_NIL
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_NIL_REGISTRATION_HPP */
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_NOT_EMPTY_HPP)
|
||||
#define BOOST_VMD_DETAIL_NOT_EMPTY_HPP
|
||||
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_NOT_EMPTY(par) \
|
||||
BOOST_PP_COMPL \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(par) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_NOT_EMPTY_HPP */
|
||||
@@ -0,0 +1,784 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_NUMBER_REGISTRATION_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_NUMBER_REGISTRATION_HPP
|
||||
|
||||
#define BOOST_VMD_REGISTER_0 (0)
|
||||
#define BOOST_VMD_REGISTER_1 (1)
|
||||
#define BOOST_VMD_REGISTER_2 (2)
|
||||
#define BOOST_VMD_REGISTER_3 (3)
|
||||
#define BOOST_VMD_REGISTER_4 (4)
|
||||
#define BOOST_VMD_REGISTER_5 (5)
|
||||
#define BOOST_VMD_REGISTER_6 (6)
|
||||
#define BOOST_VMD_REGISTER_7 (7)
|
||||
#define BOOST_VMD_REGISTER_8 (8)
|
||||
#define BOOST_VMD_REGISTER_9 (9)
|
||||
#define BOOST_VMD_REGISTER_10 (10)
|
||||
#define BOOST_VMD_REGISTER_11 (11)
|
||||
#define BOOST_VMD_REGISTER_12 (12)
|
||||
#define BOOST_VMD_REGISTER_13 (13)
|
||||
#define BOOST_VMD_REGISTER_14 (14)
|
||||
#define BOOST_VMD_REGISTER_15 (15)
|
||||
#define BOOST_VMD_REGISTER_16 (16)
|
||||
#define BOOST_VMD_REGISTER_17 (17)
|
||||
#define BOOST_VMD_REGISTER_18 (18)
|
||||
#define BOOST_VMD_REGISTER_19 (19)
|
||||
#define BOOST_VMD_REGISTER_20 (20)
|
||||
#define BOOST_VMD_REGISTER_21 (21)
|
||||
#define BOOST_VMD_REGISTER_22 (22)
|
||||
#define BOOST_VMD_REGISTER_23 (23)
|
||||
#define BOOST_VMD_REGISTER_24 (24)
|
||||
#define BOOST_VMD_REGISTER_25 (25)
|
||||
#define BOOST_VMD_REGISTER_26 (26)
|
||||
#define BOOST_VMD_REGISTER_27 (27)
|
||||
#define BOOST_VMD_REGISTER_28 (28)
|
||||
#define BOOST_VMD_REGISTER_29 (29)
|
||||
#define BOOST_VMD_REGISTER_30 (30)
|
||||
#define BOOST_VMD_REGISTER_31 (31)
|
||||
#define BOOST_VMD_REGISTER_32 (32)
|
||||
#define BOOST_VMD_REGISTER_33 (33)
|
||||
#define BOOST_VMD_REGISTER_34 (34)
|
||||
#define BOOST_VMD_REGISTER_35 (35)
|
||||
#define BOOST_VMD_REGISTER_36 (36)
|
||||
#define BOOST_VMD_REGISTER_37 (37)
|
||||
#define BOOST_VMD_REGISTER_38 (38)
|
||||
#define BOOST_VMD_REGISTER_39 (39)
|
||||
#define BOOST_VMD_REGISTER_40 (40)
|
||||
#define BOOST_VMD_REGISTER_41 (41)
|
||||
#define BOOST_VMD_REGISTER_42 (42)
|
||||
#define BOOST_VMD_REGISTER_43 (43)
|
||||
#define BOOST_VMD_REGISTER_44 (44)
|
||||
#define BOOST_VMD_REGISTER_45 (45)
|
||||
#define BOOST_VMD_REGISTER_46 (46)
|
||||
#define BOOST_VMD_REGISTER_47 (47)
|
||||
#define BOOST_VMD_REGISTER_48 (48)
|
||||
#define BOOST_VMD_REGISTER_49 (49)
|
||||
#define BOOST_VMD_REGISTER_50 (50)
|
||||
#define BOOST_VMD_REGISTER_51 (51)
|
||||
#define BOOST_VMD_REGISTER_52 (52)
|
||||
#define BOOST_VMD_REGISTER_53 (53)
|
||||
#define BOOST_VMD_REGISTER_54 (54)
|
||||
#define BOOST_VMD_REGISTER_55 (55)
|
||||
#define BOOST_VMD_REGISTER_56 (56)
|
||||
#define BOOST_VMD_REGISTER_57 (57)
|
||||
#define BOOST_VMD_REGISTER_58 (58)
|
||||
#define BOOST_VMD_REGISTER_59 (59)
|
||||
#define BOOST_VMD_REGISTER_60 (60)
|
||||
#define BOOST_VMD_REGISTER_61 (61)
|
||||
#define BOOST_VMD_REGISTER_62 (62)
|
||||
#define BOOST_VMD_REGISTER_63 (63)
|
||||
#define BOOST_VMD_REGISTER_64 (64)
|
||||
#define BOOST_VMD_REGISTER_65 (65)
|
||||
#define BOOST_VMD_REGISTER_66 (66)
|
||||
#define BOOST_VMD_REGISTER_67 (67)
|
||||
#define BOOST_VMD_REGISTER_68 (68)
|
||||
#define BOOST_VMD_REGISTER_69 (69)
|
||||
#define BOOST_VMD_REGISTER_70 (70)
|
||||
#define BOOST_VMD_REGISTER_71 (71)
|
||||
#define BOOST_VMD_REGISTER_72 (72)
|
||||
#define BOOST_VMD_REGISTER_73 (73)
|
||||
#define BOOST_VMD_REGISTER_74 (74)
|
||||
#define BOOST_VMD_REGISTER_75 (75)
|
||||
#define BOOST_VMD_REGISTER_76 (76)
|
||||
#define BOOST_VMD_REGISTER_77 (77)
|
||||
#define BOOST_VMD_REGISTER_78 (78)
|
||||
#define BOOST_VMD_REGISTER_79 (79)
|
||||
#define BOOST_VMD_REGISTER_80 (80)
|
||||
#define BOOST_VMD_REGISTER_81 (81)
|
||||
#define BOOST_VMD_REGISTER_82 (82)
|
||||
#define BOOST_VMD_REGISTER_83 (83)
|
||||
#define BOOST_VMD_REGISTER_84 (84)
|
||||
#define BOOST_VMD_REGISTER_85 (85)
|
||||
#define BOOST_VMD_REGISTER_86 (86)
|
||||
#define BOOST_VMD_REGISTER_87 (87)
|
||||
#define BOOST_VMD_REGISTER_88 (88)
|
||||
#define BOOST_VMD_REGISTER_89 (89)
|
||||
#define BOOST_VMD_REGISTER_90 (90)
|
||||
#define BOOST_VMD_REGISTER_91 (91)
|
||||
#define BOOST_VMD_REGISTER_92 (92)
|
||||
#define BOOST_VMD_REGISTER_93 (93)
|
||||
#define BOOST_VMD_REGISTER_94 (94)
|
||||
#define BOOST_VMD_REGISTER_95 (95)
|
||||
#define BOOST_VMD_REGISTER_96 (96)
|
||||
#define BOOST_VMD_REGISTER_97 (97)
|
||||
#define BOOST_VMD_REGISTER_98 (98)
|
||||
#define BOOST_VMD_REGISTER_99 (99)
|
||||
#define BOOST_VMD_REGISTER_100 (100)
|
||||
#define BOOST_VMD_REGISTER_101 (101)
|
||||
#define BOOST_VMD_REGISTER_102 (102)
|
||||
#define BOOST_VMD_REGISTER_103 (103)
|
||||
#define BOOST_VMD_REGISTER_104 (104)
|
||||
#define BOOST_VMD_REGISTER_105 (105)
|
||||
#define BOOST_VMD_REGISTER_106 (106)
|
||||
#define BOOST_VMD_REGISTER_107 (107)
|
||||
#define BOOST_VMD_REGISTER_108 (108)
|
||||
#define BOOST_VMD_REGISTER_109 (109)
|
||||
#define BOOST_VMD_REGISTER_110 (110)
|
||||
#define BOOST_VMD_REGISTER_111 (111)
|
||||
#define BOOST_VMD_REGISTER_112 (112)
|
||||
#define BOOST_VMD_REGISTER_113 (113)
|
||||
#define BOOST_VMD_REGISTER_114 (114)
|
||||
#define BOOST_VMD_REGISTER_115 (115)
|
||||
#define BOOST_VMD_REGISTER_116 (116)
|
||||
#define BOOST_VMD_REGISTER_117 (117)
|
||||
#define BOOST_VMD_REGISTER_118 (118)
|
||||
#define BOOST_VMD_REGISTER_119 (119)
|
||||
#define BOOST_VMD_REGISTER_120 (120)
|
||||
#define BOOST_VMD_REGISTER_121 (121)
|
||||
#define BOOST_VMD_REGISTER_122 (122)
|
||||
#define BOOST_VMD_REGISTER_123 (123)
|
||||
#define BOOST_VMD_REGISTER_124 (124)
|
||||
#define BOOST_VMD_REGISTER_125 (125)
|
||||
#define BOOST_VMD_REGISTER_126 (126)
|
||||
#define BOOST_VMD_REGISTER_127 (127)
|
||||
#define BOOST_VMD_REGISTER_128 (128)
|
||||
#define BOOST_VMD_REGISTER_129 (129)
|
||||
#define BOOST_VMD_REGISTER_130 (130)
|
||||
#define BOOST_VMD_REGISTER_131 (131)
|
||||
#define BOOST_VMD_REGISTER_132 (132)
|
||||
#define BOOST_VMD_REGISTER_133 (133)
|
||||
#define BOOST_VMD_REGISTER_134 (134)
|
||||
#define BOOST_VMD_REGISTER_135 (135)
|
||||
#define BOOST_VMD_REGISTER_136 (136)
|
||||
#define BOOST_VMD_REGISTER_137 (137)
|
||||
#define BOOST_VMD_REGISTER_138 (138)
|
||||
#define BOOST_VMD_REGISTER_139 (139)
|
||||
#define BOOST_VMD_REGISTER_140 (140)
|
||||
#define BOOST_VMD_REGISTER_141 (141)
|
||||
#define BOOST_VMD_REGISTER_142 (142)
|
||||
#define BOOST_VMD_REGISTER_143 (143)
|
||||
#define BOOST_VMD_REGISTER_144 (144)
|
||||
#define BOOST_VMD_REGISTER_145 (145)
|
||||
#define BOOST_VMD_REGISTER_146 (146)
|
||||
#define BOOST_VMD_REGISTER_147 (147)
|
||||
#define BOOST_VMD_REGISTER_148 (148)
|
||||
#define BOOST_VMD_REGISTER_149 (149)
|
||||
#define BOOST_VMD_REGISTER_150 (150)
|
||||
#define BOOST_VMD_REGISTER_151 (151)
|
||||
#define BOOST_VMD_REGISTER_152 (152)
|
||||
#define BOOST_VMD_REGISTER_153 (153)
|
||||
#define BOOST_VMD_REGISTER_154 (154)
|
||||
#define BOOST_VMD_REGISTER_155 (155)
|
||||
#define BOOST_VMD_REGISTER_156 (156)
|
||||
#define BOOST_VMD_REGISTER_157 (157)
|
||||
#define BOOST_VMD_REGISTER_158 (158)
|
||||
#define BOOST_VMD_REGISTER_159 (159)
|
||||
#define BOOST_VMD_REGISTER_160 (160)
|
||||
#define BOOST_VMD_REGISTER_161 (161)
|
||||
#define BOOST_VMD_REGISTER_162 (162)
|
||||
#define BOOST_VMD_REGISTER_163 (163)
|
||||
#define BOOST_VMD_REGISTER_164 (164)
|
||||
#define BOOST_VMD_REGISTER_165 (165)
|
||||
#define BOOST_VMD_REGISTER_166 (166)
|
||||
#define BOOST_VMD_REGISTER_167 (167)
|
||||
#define BOOST_VMD_REGISTER_168 (168)
|
||||
#define BOOST_VMD_REGISTER_169 (169)
|
||||
#define BOOST_VMD_REGISTER_170 (170)
|
||||
#define BOOST_VMD_REGISTER_171 (171)
|
||||
#define BOOST_VMD_REGISTER_172 (172)
|
||||
#define BOOST_VMD_REGISTER_173 (173)
|
||||
#define BOOST_VMD_REGISTER_174 (174)
|
||||
#define BOOST_VMD_REGISTER_175 (175)
|
||||
#define BOOST_VMD_REGISTER_176 (176)
|
||||
#define BOOST_VMD_REGISTER_177 (177)
|
||||
#define BOOST_VMD_REGISTER_178 (178)
|
||||
#define BOOST_VMD_REGISTER_179 (179)
|
||||
#define BOOST_VMD_REGISTER_180 (180)
|
||||
#define BOOST_VMD_REGISTER_181 (181)
|
||||
#define BOOST_VMD_REGISTER_182 (182)
|
||||
#define BOOST_VMD_REGISTER_183 (183)
|
||||
#define BOOST_VMD_REGISTER_184 (184)
|
||||
#define BOOST_VMD_REGISTER_185 (185)
|
||||
#define BOOST_VMD_REGISTER_186 (186)
|
||||
#define BOOST_VMD_REGISTER_187 (187)
|
||||
#define BOOST_VMD_REGISTER_188 (188)
|
||||
#define BOOST_VMD_REGISTER_189 (189)
|
||||
#define BOOST_VMD_REGISTER_190 (190)
|
||||
#define BOOST_VMD_REGISTER_191 (191)
|
||||
#define BOOST_VMD_REGISTER_192 (192)
|
||||
#define BOOST_VMD_REGISTER_193 (193)
|
||||
#define BOOST_VMD_REGISTER_194 (194)
|
||||
#define BOOST_VMD_REGISTER_195 (195)
|
||||
#define BOOST_VMD_REGISTER_196 (196)
|
||||
#define BOOST_VMD_REGISTER_197 (197)
|
||||
#define BOOST_VMD_REGISTER_198 (198)
|
||||
#define BOOST_VMD_REGISTER_199 (199)
|
||||
#define BOOST_VMD_REGISTER_200 (200)
|
||||
#define BOOST_VMD_REGISTER_201 (201)
|
||||
#define BOOST_VMD_REGISTER_202 (202)
|
||||
#define BOOST_VMD_REGISTER_203 (203)
|
||||
#define BOOST_VMD_REGISTER_204 (204)
|
||||
#define BOOST_VMD_REGISTER_205 (205)
|
||||
#define BOOST_VMD_REGISTER_206 (206)
|
||||
#define BOOST_VMD_REGISTER_207 (207)
|
||||
#define BOOST_VMD_REGISTER_208 (208)
|
||||
#define BOOST_VMD_REGISTER_209 (209)
|
||||
#define BOOST_VMD_REGISTER_210 (210)
|
||||
#define BOOST_VMD_REGISTER_211 (211)
|
||||
#define BOOST_VMD_REGISTER_212 (212)
|
||||
#define BOOST_VMD_REGISTER_213 (213)
|
||||
#define BOOST_VMD_REGISTER_214 (214)
|
||||
#define BOOST_VMD_REGISTER_215 (215)
|
||||
#define BOOST_VMD_REGISTER_216 (216)
|
||||
#define BOOST_VMD_REGISTER_217 (217)
|
||||
#define BOOST_VMD_REGISTER_218 (218)
|
||||
#define BOOST_VMD_REGISTER_219 (219)
|
||||
#define BOOST_VMD_REGISTER_220 (220)
|
||||
#define BOOST_VMD_REGISTER_221 (221)
|
||||
#define BOOST_VMD_REGISTER_222 (222)
|
||||
#define BOOST_VMD_REGISTER_223 (223)
|
||||
#define BOOST_VMD_REGISTER_224 (224)
|
||||
#define BOOST_VMD_REGISTER_225 (225)
|
||||
#define BOOST_VMD_REGISTER_226 (226)
|
||||
#define BOOST_VMD_REGISTER_227 (227)
|
||||
#define BOOST_VMD_REGISTER_228 (228)
|
||||
#define BOOST_VMD_REGISTER_229 (229)
|
||||
#define BOOST_VMD_REGISTER_230 (230)
|
||||
#define BOOST_VMD_REGISTER_231 (231)
|
||||
#define BOOST_VMD_REGISTER_232 (232)
|
||||
#define BOOST_VMD_REGISTER_233 (233)
|
||||
#define BOOST_VMD_REGISTER_234 (234)
|
||||
#define BOOST_VMD_REGISTER_235 (235)
|
||||
#define BOOST_VMD_REGISTER_236 (236)
|
||||
#define BOOST_VMD_REGISTER_237 (237)
|
||||
#define BOOST_VMD_REGISTER_238 (238)
|
||||
#define BOOST_VMD_REGISTER_239 (239)
|
||||
#define BOOST_VMD_REGISTER_240 (240)
|
||||
#define BOOST_VMD_REGISTER_241 (241)
|
||||
#define BOOST_VMD_REGISTER_242 (242)
|
||||
#define BOOST_VMD_REGISTER_243 (243)
|
||||
#define BOOST_VMD_REGISTER_244 (244)
|
||||
#define BOOST_VMD_REGISTER_245 (245)
|
||||
#define BOOST_VMD_REGISTER_246 (246)
|
||||
#define BOOST_VMD_REGISTER_247 (247)
|
||||
#define BOOST_VMD_REGISTER_248 (248)
|
||||
#define BOOST_VMD_REGISTER_249 (249)
|
||||
#define BOOST_VMD_REGISTER_250 (250)
|
||||
#define BOOST_VMD_REGISTER_251 (251)
|
||||
#define BOOST_VMD_REGISTER_252 (252)
|
||||
#define BOOST_VMD_REGISTER_253 (253)
|
||||
#define BOOST_VMD_REGISTER_254 (254)
|
||||
#define BOOST_VMD_REGISTER_255 (255)
|
||||
#define BOOST_VMD_REGISTER_256 (256)
|
||||
|
||||
#define BOOST_VMD_DETECT_0_0
|
||||
#define BOOST_VMD_DETECT_1_1
|
||||
#define BOOST_VMD_DETECT_2_2
|
||||
#define BOOST_VMD_DETECT_3_3
|
||||
#define BOOST_VMD_DETECT_4_4
|
||||
#define BOOST_VMD_DETECT_5_5
|
||||
#define BOOST_VMD_DETECT_6_6
|
||||
#define BOOST_VMD_DETECT_7_7
|
||||
#define BOOST_VMD_DETECT_8_8
|
||||
#define BOOST_VMD_DETECT_9_9
|
||||
#define BOOST_VMD_DETECT_10_10
|
||||
#define BOOST_VMD_DETECT_11_11
|
||||
#define BOOST_VMD_DETECT_12_12
|
||||
#define BOOST_VMD_DETECT_13_13
|
||||
#define BOOST_VMD_DETECT_14_14
|
||||
#define BOOST_VMD_DETECT_15_15
|
||||
#define BOOST_VMD_DETECT_16_16
|
||||
#define BOOST_VMD_DETECT_17_17
|
||||
#define BOOST_VMD_DETECT_18_18
|
||||
#define BOOST_VMD_DETECT_19_19
|
||||
#define BOOST_VMD_DETECT_20_20
|
||||
#define BOOST_VMD_DETECT_21_21
|
||||
#define BOOST_VMD_DETECT_22_22
|
||||
#define BOOST_VMD_DETECT_23_23
|
||||
#define BOOST_VMD_DETECT_24_24
|
||||
#define BOOST_VMD_DETECT_25_25
|
||||
#define BOOST_VMD_DETECT_26_26
|
||||
#define BOOST_VMD_DETECT_27_27
|
||||
#define BOOST_VMD_DETECT_28_28
|
||||
#define BOOST_VMD_DETECT_29_29
|
||||
#define BOOST_VMD_DETECT_30_30
|
||||
#define BOOST_VMD_DETECT_31_31
|
||||
#define BOOST_VMD_DETECT_32_32
|
||||
#define BOOST_VMD_DETECT_33_33
|
||||
#define BOOST_VMD_DETECT_34_34
|
||||
#define BOOST_VMD_DETECT_35_35
|
||||
#define BOOST_VMD_DETECT_36_36
|
||||
#define BOOST_VMD_DETECT_37_37
|
||||
#define BOOST_VMD_DETECT_38_38
|
||||
#define BOOST_VMD_DETECT_39_39
|
||||
#define BOOST_VMD_DETECT_40_40
|
||||
#define BOOST_VMD_DETECT_41_41
|
||||
#define BOOST_VMD_DETECT_42_42
|
||||
#define BOOST_VMD_DETECT_43_43
|
||||
#define BOOST_VMD_DETECT_44_44
|
||||
#define BOOST_VMD_DETECT_45_45
|
||||
#define BOOST_VMD_DETECT_46_46
|
||||
#define BOOST_VMD_DETECT_47_47
|
||||
#define BOOST_VMD_DETECT_48_48
|
||||
#define BOOST_VMD_DETECT_49_49
|
||||
#define BOOST_VMD_DETECT_50_50
|
||||
#define BOOST_VMD_DETECT_51_51
|
||||
#define BOOST_VMD_DETECT_52_52
|
||||
#define BOOST_VMD_DETECT_53_53
|
||||
#define BOOST_VMD_DETECT_54_54
|
||||
#define BOOST_VMD_DETECT_55_55
|
||||
#define BOOST_VMD_DETECT_56_56
|
||||
#define BOOST_VMD_DETECT_57_57
|
||||
#define BOOST_VMD_DETECT_58_58
|
||||
#define BOOST_VMD_DETECT_59_59
|
||||
#define BOOST_VMD_DETECT_60_60
|
||||
#define BOOST_VMD_DETECT_61_61
|
||||
#define BOOST_VMD_DETECT_62_62
|
||||
#define BOOST_VMD_DETECT_63_63
|
||||
#define BOOST_VMD_DETECT_64_64
|
||||
#define BOOST_VMD_DETECT_65_65
|
||||
#define BOOST_VMD_DETECT_66_66
|
||||
#define BOOST_VMD_DETECT_67_67
|
||||
#define BOOST_VMD_DETECT_68_68
|
||||
#define BOOST_VMD_DETECT_69_69
|
||||
#define BOOST_VMD_DETECT_70_70
|
||||
#define BOOST_VMD_DETECT_71_71
|
||||
#define BOOST_VMD_DETECT_72_72
|
||||
#define BOOST_VMD_DETECT_73_73
|
||||
#define BOOST_VMD_DETECT_74_74
|
||||
#define BOOST_VMD_DETECT_75_75
|
||||
#define BOOST_VMD_DETECT_76_76
|
||||
#define BOOST_VMD_DETECT_77_77
|
||||
#define BOOST_VMD_DETECT_78_78
|
||||
#define BOOST_VMD_DETECT_79_79
|
||||
#define BOOST_VMD_DETECT_80_80
|
||||
#define BOOST_VMD_DETECT_81_81
|
||||
#define BOOST_VMD_DETECT_82_82
|
||||
#define BOOST_VMD_DETECT_83_83
|
||||
#define BOOST_VMD_DETECT_84_84
|
||||
#define BOOST_VMD_DETECT_85_85
|
||||
#define BOOST_VMD_DETECT_86_86
|
||||
#define BOOST_VMD_DETECT_87_87
|
||||
#define BOOST_VMD_DETECT_88_88
|
||||
#define BOOST_VMD_DETECT_89_89
|
||||
#define BOOST_VMD_DETECT_90_90
|
||||
#define BOOST_VMD_DETECT_91_91
|
||||
#define BOOST_VMD_DETECT_92_92
|
||||
#define BOOST_VMD_DETECT_93_93
|
||||
#define BOOST_VMD_DETECT_94_94
|
||||
#define BOOST_VMD_DETECT_95_95
|
||||
#define BOOST_VMD_DETECT_96_96
|
||||
#define BOOST_VMD_DETECT_97_97
|
||||
#define BOOST_VMD_DETECT_98_98
|
||||
#define BOOST_VMD_DETECT_99_99
|
||||
#define BOOST_VMD_DETECT_100_100
|
||||
#define BOOST_VMD_DETECT_101_101
|
||||
#define BOOST_VMD_DETECT_102_102
|
||||
#define BOOST_VMD_DETECT_103_103
|
||||
#define BOOST_VMD_DETECT_104_104
|
||||
#define BOOST_VMD_DETECT_105_105
|
||||
#define BOOST_VMD_DETECT_106_106
|
||||
#define BOOST_VMD_DETECT_107_107
|
||||
#define BOOST_VMD_DETECT_108_108
|
||||
#define BOOST_VMD_DETECT_109_109
|
||||
#define BOOST_VMD_DETECT_110_110
|
||||
#define BOOST_VMD_DETECT_111_111
|
||||
#define BOOST_VMD_DETECT_112_112
|
||||
#define BOOST_VMD_DETECT_113_113
|
||||
#define BOOST_VMD_DETECT_114_114
|
||||
#define BOOST_VMD_DETECT_115_115
|
||||
#define BOOST_VMD_DETECT_116_116
|
||||
#define BOOST_VMD_DETECT_117_117
|
||||
#define BOOST_VMD_DETECT_118_118
|
||||
#define BOOST_VMD_DETECT_119_119
|
||||
#define BOOST_VMD_DETECT_120_120
|
||||
#define BOOST_VMD_DETECT_121_121
|
||||
#define BOOST_VMD_DETECT_122_122
|
||||
#define BOOST_VMD_DETECT_123_123
|
||||
#define BOOST_VMD_DETECT_124_124
|
||||
#define BOOST_VMD_DETECT_125_125
|
||||
#define BOOST_VMD_DETECT_126_126
|
||||
#define BOOST_VMD_DETECT_127_127
|
||||
#define BOOST_VMD_DETECT_128_128
|
||||
#define BOOST_VMD_DETECT_129_129
|
||||
#define BOOST_VMD_DETECT_130_130
|
||||
#define BOOST_VMD_DETECT_131_131
|
||||
#define BOOST_VMD_DETECT_132_132
|
||||
#define BOOST_VMD_DETECT_133_133
|
||||
#define BOOST_VMD_DETECT_134_134
|
||||
#define BOOST_VMD_DETECT_135_135
|
||||
#define BOOST_VMD_DETECT_136_136
|
||||
#define BOOST_VMD_DETECT_137_137
|
||||
#define BOOST_VMD_DETECT_138_138
|
||||
#define BOOST_VMD_DETECT_139_139
|
||||
#define BOOST_VMD_DETECT_140_140
|
||||
#define BOOST_VMD_DETECT_141_141
|
||||
#define BOOST_VMD_DETECT_142_142
|
||||
#define BOOST_VMD_DETECT_143_143
|
||||
#define BOOST_VMD_DETECT_144_144
|
||||
#define BOOST_VMD_DETECT_145_145
|
||||
#define BOOST_VMD_DETECT_146_146
|
||||
#define BOOST_VMD_DETECT_147_147
|
||||
#define BOOST_VMD_DETECT_148_148
|
||||
#define BOOST_VMD_DETECT_149_149
|
||||
#define BOOST_VMD_DETECT_150_150
|
||||
#define BOOST_VMD_DETECT_151_151
|
||||
#define BOOST_VMD_DETECT_152_152
|
||||
#define BOOST_VMD_DETECT_153_153
|
||||
#define BOOST_VMD_DETECT_154_154
|
||||
#define BOOST_VMD_DETECT_155_155
|
||||
#define BOOST_VMD_DETECT_156_156
|
||||
#define BOOST_VMD_DETECT_157_157
|
||||
#define BOOST_VMD_DETECT_158_158
|
||||
#define BOOST_VMD_DETECT_159_159
|
||||
#define BOOST_VMD_DETECT_160_160
|
||||
#define BOOST_VMD_DETECT_161_161
|
||||
#define BOOST_VMD_DETECT_162_162
|
||||
#define BOOST_VMD_DETECT_163_163
|
||||
#define BOOST_VMD_DETECT_164_164
|
||||
#define BOOST_VMD_DETECT_165_165
|
||||
#define BOOST_VMD_DETECT_166_166
|
||||
#define BOOST_VMD_DETECT_167_167
|
||||
#define BOOST_VMD_DETECT_168_168
|
||||
#define BOOST_VMD_DETECT_169_169
|
||||
#define BOOST_VMD_DETECT_170_170
|
||||
#define BOOST_VMD_DETECT_171_171
|
||||
#define BOOST_VMD_DETECT_172_172
|
||||
#define BOOST_VMD_DETECT_173_173
|
||||
#define BOOST_VMD_DETECT_174_174
|
||||
#define BOOST_VMD_DETECT_175_175
|
||||
#define BOOST_VMD_DETECT_176_176
|
||||
#define BOOST_VMD_DETECT_177_177
|
||||
#define BOOST_VMD_DETECT_178_178
|
||||
#define BOOST_VMD_DETECT_179_179
|
||||
#define BOOST_VMD_DETECT_180_180
|
||||
#define BOOST_VMD_DETECT_181_181
|
||||
#define BOOST_VMD_DETECT_182_182
|
||||
#define BOOST_VMD_DETECT_183_183
|
||||
#define BOOST_VMD_DETECT_184_184
|
||||
#define BOOST_VMD_DETECT_185_185
|
||||
#define BOOST_VMD_DETECT_186_186
|
||||
#define BOOST_VMD_DETECT_187_187
|
||||
#define BOOST_VMD_DETECT_188_188
|
||||
#define BOOST_VMD_DETECT_189_189
|
||||
#define BOOST_VMD_DETECT_190_190
|
||||
#define BOOST_VMD_DETECT_191_191
|
||||
#define BOOST_VMD_DETECT_192_192
|
||||
#define BOOST_VMD_DETECT_193_193
|
||||
#define BOOST_VMD_DETECT_194_194
|
||||
#define BOOST_VMD_DETECT_195_195
|
||||
#define BOOST_VMD_DETECT_196_196
|
||||
#define BOOST_VMD_DETECT_197_197
|
||||
#define BOOST_VMD_DETECT_198_198
|
||||
#define BOOST_VMD_DETECT_199_199
|
||||
#define BOOST_VMD_DETECT_200_200
|
||||
#define BOOST_VMD_DETECT_201_201
|
||||
#define BOOST_VMD_DETECT_202_202
|
||||
#define BOOST_VMD_DETECT_203_203
|
||||
#define BOOST_VMD_DETECT_204_204
|
||||
#define BOOST_VMD_DETECT_205_205
|
||||
#define BOOST_VMD_DETECT_206_206
|
||||
#define BOOST_VMD_DETECT_207_207
|
||||
#define BOOST_VMD_DETECT_208_208
|
||||
#define BOOST_VMD_DETECT_209_209
|
||||
#define BOOST_VMD_DETECT_210_210
|
||||
#define BOOST_VMD_DETECT_211_211
|
||||
#define BOOST_VMD_DETECT_212_212
|
||||
#define BOOST_VMD_DETECT_213_213
|
||||
#define BOOST_VMD_DETECT_214_214
|
||||
#define BOOST_VMD_DETECT_215_215
|
||||
#define BOOST_VMD_DETECT_216_216
|
||||
#define BOOST_VMD_DETECT_217_217
|
||||
#define BOOST_VMD_DETECT_218_218
|
||||
#define BOOST_VMD_DETECT_219_219
|
||||
#define BOOST_VMD_DETECT_220_220
|
||||
#define BOOST_VMD_DETECT_221_221
|
||||
#define BOOST_VMD_DETECT_222_222
|
||||
#define BOOST_VMD_DETECT_223_223
|
||||
#define BOOST_VMD_DETECT_224_224
|
||||
#define BOOST_VMD_DETECT_225_225
|
||||
#define BOOST_VMD_DETECT_226_226
|
||||
#define BOOST_VMD_DETECT_227_227
|
||||
#define BOOST_VMD_DETECT_228_228
|
||||
#define BOOST_VMD_DETECT_229_229
|
||||
#define BOOST_VMD_DETECT_230_230
|
||||
#define BOOST_VMD_DETECT_231_231
|
||||
#define BOOST_VMD_DETECT_232_232
|
||||
#define BOOST_VMD_DETECT_233_233
|
||||
#define BOOST_VMD_DETECT_234_234
|
||||
#define BOOST_VMD_DETECT_235_235
|
||||
#define BOOST_VMD_DETECT_236_236
|
||||
#define BOOST_VMD_DETECT_237_237
|
||||
#define BOOST_VMD_DETECT_238_238
|
||||
#define BOOST_VMD_DETECT_239_239
|
||||
#define BOOST_VMD_DETECT_240_240
|
||||
#define BOOST_VMD_DETECT_241_241
|
||||
#define BOOST_VMD_DETECT_242_242
|
||||
#define BOOST_VMD_DETECT_243_243
|
||||
#define BOOST_VMD_DETECT_244_244
|
||||
#define BOOST_VMD_DETECT_245_245
|
||||
#define BOOST_VMD_DETECT_246_246
|
||||
#define BOOST_VMD_DETECT_247_247
|
||||
#define BOOST_VMD_DETECT_248_248
|
||||
#define BOOST_VMD_DETECT_249_249
|
||||
#define BOOST_VMD_DETECT_250_250
|
||||
#define BOOST_VMD_DETECT_251_251
|
||||
#define BOOST_VMD_DETECT_252_252
|
||||
#define BOOST_VMD_DETECT_253_253
|
||||
#define BOOST_VMD_DETECT_254_254
|
||||
#define BOOST_VMD_DETECT_255_255
|
||||
#define BOOST_VMD_DETECT_256_256
|
||||
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_0 (BOOST_VMD_TYPE_NUMBER,0)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_1 (BOOST_VMD_TYPE_NUMBER,1)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_2 (BOOST_VMD_TYPE_NUMBER,2)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_3 (BOOST_VMD_TYPE_NUMBER,3)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_4 (BOOST_VMD_TYPE_NUMBER,4)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_5 (BOOST_VMD_TYPE_NUMBER,5)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_6 (BOOST_VMD_TYPE_NUMBER,6)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_7 (BOOST_VMD_TYPE_NUMBER,7)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_8 (BOOST_VMD_TYPE_NUMBER,8)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_9 (BOOST_VMD_TYPE_NUMBER,9)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_10 (BOOST_VMD_TYPE_NUMBER,10)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_11 (BOOST_VMD_TYPE_NUMBER,11)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_12 (BOOST_VMD_TYPE_NUMBER,12)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_13 (BOOST_VMD_TYPE_NUMBER,13)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_14 (BOOST_VMD_TYPE_NUMBER,14)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_15 (BOOST_VMD_TYPE_NUMBER,15)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_16 (BOOST_VMD_TYPE_NUMBER,16)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_17 (BOOST_VMD_TYPE_NUMBER,17)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_18 (BOOST_VMD_TYPE_NUMBER,18)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_19 (BOOST_VMD_TYPE_NUMBER,19)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_20 (BOOST_VMD_TYPE_NUMBER,20)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_21 (BOOST_VMD_TYPE_NUMBER,21)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_22 (BOOST_VMD_TYPE_NUMBER,22)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_23 (BOOST_VMD_TYPE_NUMBER,23)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_24 (BOOST_VMD_TYPE_NUMBER,24)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_25 (BOOST_VMD_TYPE_NUMBER,25)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_26 (BOOST_VMD_TYPE_NUMBER,26)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_27 (BOOST_VMD_TYPE_NUMBER,27)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_28 (BOOST_VMD_TYPE_NUMBER,28)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_29 (BOOST_VMD_TYPE_NUMBER,29)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_30 (BOOST_VMD_TYPE_NUMBER,30)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_31 (BOOST_VMD_TYPE_NUMBER,31)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_32 (BOOST_VMD_TYPE_NUMBER,32)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_33 (BOOST_VMD_TYPE_NUMBER,33)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_34 (BOOST_VMD_TYPE_NUMBER,34)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_35 (BOOST_VMD_TYPE_NUMBER,35)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_36 (BOOST_VMD_TYPE_NUMBER,36)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_37 (BOOST_VMD_TYPE_NUMBER,37)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_38 (BOOST_VMD_TYPE_NUMBER,38)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_39 (BOOST_VMD_TYPE_NUMBER,39)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_40 (BOOST_VMD_TYPE_NUMBER,40)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_41 (BOOST_VMD_TYPE_NUMBER,41)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_42 (BOOST_VMD_TYPE_NUMBER,42)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_43 (BOOST_VMD_TYPE_NUMBER,43)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_44 (BOOST_VMD_TYPE_NUMBER,44)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_45 (BOOST_VMD_TYPE_NUMBER,45)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_46 (BOOST_VMD_TYPE_NUMBER,46)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_47 (BOOST_VMD_TYPE_NUMBER,47)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_48 (BOOST_VMD_TYPE_NUMBER,48)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_49 (BOOST_VMD_TYPE_NUMBER,49)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_50 (BOOST_VMD_TYPE_NUMBER,50)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_51 (BOOST_VMD_TYPE_NUMBER,51)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_52 (BOOST_VMD_TYPE_NUMBER,52)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_53 (BOOST_VMD_TYPE_NUMBER,53)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_54 (BOOST_VMD_TYPE_NUMBER,54)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_55 (BOOST_VMD_TYPE_NUMBER,55)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_56 (BOOST_VMD_TYPE_NUMBER,56)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_57 (BOOST_VMD_TYPE_NUMBER,57)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_58 (BOOST_VMD_TYPE_NUMBER,58)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_59 (BOOST_VMD_TYPE_NUMBER,59)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_60 (BOOST_VMD_TYPE_NUMBER,60)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_61 (BOOST_VMD_TYPE_NUMBER,61)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_62 (BOOST_VMD_TYPE_NUMBER,62)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_63 (BOOST_VMD_TYPE_NUMBER,63)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_64 (BOOST_VMD_TYPE_NUMBER,64)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_65 (BOOST_VMD_TYPE_NUMBER,65)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_66 (BOOST_VMD_TYPE_NUMBER,66)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_67 (BOOST_VMD_TYPE_NUMBER,67)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_68 (BOOST_VMD_TYPE_NUMBER,68)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_69 (BOOST_VMD_TYPE_NUMBER,69)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_70 (BOOST_VMD_TYPE_NUMBER,70)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_71 (BOOST_VMD_TYPE_NUMBER,71)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_72 (BOOST_VMD_TYPE_NUMBER,72)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_73 (BOOST_VMD_TYPE_NUMBER,73)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_74 (BOOST_VMD_TYPE_NUMBER,74)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_75 (BOOST_VMD_TYPE_NUMBER,75)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_76 (BOOST_VMD_TYPE_NUMBER,76)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_77 (BOOST_VMD_TYPE_NUMBER,77)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_78 (BOOST_VMD_TYPE_NUMBER,78)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_79 (BOOST_VMD_TYPE_NUMBER,79)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_80 (BOOST_VMD_TYPE_NUMBER,80)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_81 (BOOST_VMD_TYPE_NUMBER,81)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_82 (BOOST_VMD_TYPE_NUMBER,82)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_83 (BOOST_VMD_TYPE_NUMBER,83)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_84 (BOOST_VMD_TYPE_NUMBER,84)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_85 (BOOST_VMD_TYPE_NUMBER,85)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_86 (BOOST_VMD_TYPE_NUMBER,86)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_87 (BOOST_VMD_TYPE_NUMBER,87)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_88 (BOOST_VMD_TYPE_NUMBER,88)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_89 (BOOST_VMD_TYPE_NUMBER,89)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_90 (BOOST_VMD_TYPE_NUMBER,90)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_91 (BOOST_VMD_TYPE_NUMBER,91)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_92 (BOOST_VMD_TYPE_NUMBER,92)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_93 (BOOST_VMD_TYPE_NUMBER,93)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_94 (BOOST_VMD_TYPE_NUMBER,94)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_95 (BOOST_VMD_TYPE_NUMBER,95)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_96 (BOOST_VMD_TYPE_NUMBER,96)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_97 (BOOST_VMD_TYPE_NUMBER,97)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_98 (BOOST_VMD_TYPE_NUMBER,98)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_99 (BOOST_VMD_TYPE_NUMBER,99)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_100 (BOOST_VMD_TYPE_NUMBER,100)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_101 (BOOST_VMD_TYPE_NUMBER,101)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_102 (BOOST_VMD_TYPE_NUMBER,102)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_103 (BOOST_VMD_TYPE_NUMBER,103)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_104 (BOOST_VMD_TYPE_NUMBER,104)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_105 (BOOST_VMD_TYPE_NUMBER,105)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_106 (BOOST_VMD_TYPE_NUMBER,106)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_107 (BOOST_VMD_TYPE_NUMBER,107)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_108 (BOOST_VMD_TYPE_NUMBER,108)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_109 (BOOST_VMD_TYPE_NUMBER,109)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_110 (BOOST_VMD_TYPE_NUMBER,110)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_111 (BOOST_VMD_TYPE_NUMBER,111)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_112 (BOOST_VMD_TYPE_NUMBER,112)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_113 (BOOST_VMD_TYPE_NUMBER,113)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_114 (BOOST_VMD_TYPE_NUMBER,114)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_115 (BOOST_VMD_TYPE_NUMBER,115)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_116 (BOOST_VMD_TYPE_NUMBER,116)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_117 (BOOST_VMD_TYPE_NUMBER,117)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_118 (BOOST_VMD_TYPE_NUMBER,118)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_119 (BOOST_VMD_TYPE_NUMBER,119)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_120 (BOOST_VMD_TYPE_NUMBER,120)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_121 (BOOST_VMD_TYPE_NUMBER,121)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_122 (BOOST_VMD_TYPE_NUMBER,122)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_123 (BOOST_VMD_TYPE_NUMBER,123)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_124 (BOOST_VMD_TYPE_NUMBER,124)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_125 (BOOST_VMD_TYPE_NUMBER,125)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_126 (BOOST_VMD_TYPE_NUMBER,126)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_127 (BOOST_VMD_TYPE_NUMBER,127)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_128 (BOOST_VMD_TYPE_NUMBER,128)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_129 (BOOST_VMD_TYPE_NUMBER,129)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_130 (BOOST_VMD_TYPE_NUMBER,130)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_131 (BOOST_VMD_TYPE_NUMBER,131)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_132 (BOOST_VMD_TYPE_NUMBER,132)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_133 (BOOST_VMD_TYPE_NUMBER,133)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_134 (BOOST_VMD_TYPE_NUMBER,134)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_135 (BOOST_VMD_TYPE_NUMBER,135)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_136 (BOOST_VMD_TYPE_NUMBER,136)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_137 (BOOST_VMD_TYPE_NUMBER,137)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_138 (BOOST_VMD_TYPE_NUMBER,138)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_139 (BOOST_VMD_TYPE_NUMBER,139)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_140 (BOOST_VMD_TYPE_NUMBER,140)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_141 (BOOST_VMD_TYPE_NUMBER,141)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_142 (BOOST_VMD_TYPE_NUMBER,142)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_143 (BOOST_VMD_TYPE_NUMBER,143)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_144 (BOOST_VMD_TYPE_NUMBER,144)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_145 (BOOST_VMD_TYPE_NUMBER,145)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_146 (BOOST_VMD_TYPE_NUMBER,146)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_147 (BOOST_VMD_TYPE_NUMBER,147)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_148 (BOOST_VMD_TYPE_NUMBER,148)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_149 (BOOST_VMD_TYPE_NUMBER,149)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_150 (BOOST_VMD_TYPE_NUMBER,150)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_151 (BOOST_VMD_TYPE_NUMBER,151)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_152 (BOOST_VMD_TYPE_NUMBER,152)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_153 (BOOST_VMD_TYPE_NUMBER,153)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_154 (BOOST_VMD_TYPE_NUMBER,154)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_155 (BOOST_VMD_TYPE_NUMBER,155)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_156 (BOOST_VMD_TYPE_NUMBER,156)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_157 (BOOST_VMD_TYPE_NUMBER,157)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_158 (BOOST_VMD_TYPE_NUMBER,158)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_159 (BOOST_VMD_TYPE_NUMBER,159)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_160 (BOOST_VMD_TYPE_NUMBER,160)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_161 (BOOST_VMD_TYPE_NUMBER,161)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_162 (BOOST_VMD_TYPE_NUMBER,162)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_163 (BOOST_VMD_TYPE_NUMBER,163)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_164 (BOOST_VMD_TYPE_NUMBER,164)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_165 (BOOST_VMD_TYPE_NUMBER,165)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_166 (BOOST_VMD_TYPE_NUMBER,166)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_167 (BOOST_VMD_TYPE_NUMBER,167)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_168 (BOOST_VMD_TYPE_NUMBER,168)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_169 (BOOST_VMD_TYPE_NUMBER,169)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_170 (BOOST_VMD_TYPE_NUMBER,170)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_171 (BOOST_VMD_TYPE_NUMBER,171)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_172 (BOOST_VMD_TYPE_NUMBER,172)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_173 (BOOST_VMD_TYPE_NUMBER,173)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_174 (BOOST_VMD_TYPE_NUMBER,174)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_175 (BOOST_VMD_TYPE_NUMBER,175)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_176 (BOOST_VMD_TYPE_NUMBER,176)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_177 (BOOST_VMD_TYPE_NUMBER,177)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_178 (BOOST_VMD_TYPE_NUMBER,178)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_179 (BOOST_VMD_TYPE_NUMBER,179)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_180 (BOOST_VMD_TYPE_NUMBER,180)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_181 (BOOST_VMD_TYPE_NUMBER,181)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_182 (BOOST_VMD_TYPE_NUMBER,182)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_183 (BOOST_VMD_TYPE_NUMBER,183)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_184 (BOOST_VMD_TYPE_NUMBER,184)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_185 (BOOST_VMD_TYPE_NUMBER,185)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_186 (BOOST_VMD_TYPE_NUMBER,186)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_187 (BOOST_VMD_TYPE_NUMBER,187)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_188 (BOOST_VMD_TYPE_NUMBER,188)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_189 (BOOST_VMD_TYPE_NUMBER,189)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_190 (BOOST_VMD_TYPE_NUMBER,190)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_191 (BOOST_VMD_TYPE_NUMBER,191)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_192 (BOOST_VMD_TYPE_NUMBER,192)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_193 (BOOST_VMD_TYPE_NUMBER,193)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_194 (BOOST_VMD_TYPE_NUMBER,194)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_195 (BOOST_VMD_TYPE_NUMBER,195)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_196 (BOOST_VMD_TYPE_NUMBER,196)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_197 (BOOST_VMD_TYPE_NUMBER,197)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_198 (BOOST_VMD_TYPE_NUMBER,198)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_199 (BOOST_VMD_TYPE_NUMBER,199)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_200 (BOOST_VMD_TYPE_NUMBER,200)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_201 (BOOST_VMD_TYPE_NUMBER,201)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_202 (BOOST_VMD_TYPE_NUMBER,202)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_203 (BOOST_VMD_TYPE_NUMBER,203)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_204 (BOOST_VMD_TYPE_NUMBER,204)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_205 (BOOST_VMD_TYPE_NUMBER,205)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_206 (BOOST_VMD_TYPE_NUMBER,206)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_207 (BOOST_VMD_TYPE_NUMBER,207)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_208 (BOOST_VMD_TYPE_NUMBER,208)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_209 (BOOST_VMD_TYPE_NUMBER,209)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_210 (BOOST_VMD_TYPE_NUMBER,210)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_211 (BOOST_VMD_TYPE_NUMBER,211)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_212 (BOOST_VMD_TYPE_NUMBER,212)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_213 (BOOST_VMD_TYPE_NUMBER,213)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_214 (BOOST_VMD_TYPE_NUMBER,214)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_215 (BOOST_VMD_TYPE_NUMBER,215)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_216 (BOOST_VMD_TYPE_NUMBER,216)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_217 (BOOST_VMD_TYPE_NUMBER,217)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_218 (BOOST_VMD_TYPE_NUMBER,218)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_219 (BOOST_VMD_TYPE_NUMBER,219)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_220 (BOOST_VMD_TYPE_NUMBER,220)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_221 (BOOST_VMD_TYPE_NUMBER,221)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_222 (BOOST_VMD_TYPE_NUMBER,222)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_223 (BOOST_VMD_TYPE_NUMBER,223)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_224 (BOOST_VMD_TYPE_NUMBER,224)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_225 (BOOST_VMD_TYPE_NUMBER,225)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_226 (BOOST_VMD_TYPE_NUMBER,226)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_227 (BOOST_VMD_TYPE_NUMBER,227)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_228 (BOOST_VMD_TYPE_NUMBER,228)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_229 (BOOST_VMD_TYPE_NUMBER,229)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_230 (BOOST_VMD_TYPE_NUMBER,230)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_231 (BOOST_VMD_TYPE_NUMBER,231)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_232 (BOOST_VMD_TYPE_NUMBER,232)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_233 (BOOST_VMD_TYPE_NUMBER,233)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_234 (BOOST_VMD_TYPE_NUMBER,234)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_235 (BOOST_VMD_TYPE_NUMBER,235)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_236 (BOOST_VMD_TYPE_NUMBER,236)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_237 (BOOST_VMD_TYPE_NUMBER,237)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_238 (BOOST_VMD_TYPE_NUMBER,238)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_239 (BOOST_VMD_TYPE_NUMBER,239)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_240 (BOOST_VMD_TYPE_NUMBER,240)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_241 (BOOST_VMD_TYPE_NUMBER,241)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_242 (BOOST_VMD_TYPE_NUMBER,242)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_243 (BOOST_VMD_TYPE_NUMBER,243)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_244 (BOOST_VMD_TYPE_NUMBER,244)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_245 (BOOST_VMD_TYPE_NUMBER,245)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_246 (BOOST_VMD_TYPE_NUMBER,246)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_247 (BOOST_VMD_TYPE_NUMBER,247)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_248 (BOOST_VMD_TYPE_NUMBER,248)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_249 (BOOST_VMD_TYPE_NUMBER,249)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_250 (BOOST_VMD_TYPE_NUMBER,250)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_251 (BOOST_VMD_TYPE_NUMBER,251)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_252 (BOOST_VMD_TYPE_NUMBER,252)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_253 (BOOST_VMD_TYPE_NUMBER,253)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_254 (BOOST_VMD_TYPE_NUMBER,254)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_255 (BOOST_VMD_TYPE_NUMBER,255)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_256 (BOOST_VMD_TYPE_NUMBER,256)
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_NUMBER_REGISTRATION_HPP */
|
||||
@@ -0,0 +1,37 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_ONLY_AFTER_HPP)
|
||||
#define BOOST_VMD_DETAIL_ONLY_AFTER_HPP
|
||||
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
|
||||
/*
|
||||
|
||||
Determines whether or not the BOOST_VMD_RETURN_ONLY_AFTER modifiers has been passed
|
||||
as a variadic parameter.
|
||||
|
||||
Returns 1 = BOOST_VMD_RETURN_ONLY_AFTER has been passed
|
||||
0 = BOOST_VMD_RETURN_ONLY_AFTER has not been passed
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ONLY_AFTER(...) \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_ONLY_AFTER_D(d,...) \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_ONLY_AFTER_HPP */
|
||||
@@ -0,0 +1,54 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_PARENS_HPP)
|
||||
#define BOOST_VMD_DETAIL_PARENS_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/parens_split.hpp>
|
||||
#include <boost/vmd/detail/parens_common.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_PARENS_PROCESS(vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_BEGIN_PARENS, \
|
||||
BOOST_VMD_EMPTY \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_PARENS(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_PARENS_SPLIT, \
|
||||
BOOST_VMD_DETAIL_PARENS_PROCESS \
|
||||
) \
|
||||
(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_PARENS_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_PARENS_SPLIT, \
|
||||
BOOST_VMD_DETAIL_PARENS_PROCESS \
|
||||
) \
|
||||
(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_PARENS_HPP */
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_PARENS_COMMON_HPP)
|
||||
#define BOOST_VMD_DETAIL_PARENS_COMMON_HPP
|
||||
|
||||
#include <boost/preprocessor/facilities/expand.hpp>
|
||||
#include <boost/preprocessor/punctuation/paren.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_BEGIN_PARENS_EXP2(...) ( __VA_ARGS__ ) BOOST_VMD_EMPTY BOOST_PP_LPAREN()
|
||||
#define BOOST_VMD_DETAIL_BEGIN_PARENS_EXP1(vseq) BOOST_VMD_DETAIL_BEGIN_PARENS_EXP2 vseq BOOST_PP_RPAREN()
|
||||
#define BOOST_VMD_DETAIL_BEGIN_PARENS(vseq) BOOST_PP_EXPAND(BOOST_VMD_DETAIL_BEGIN_PARENS_EXP1(vseq))
|
||||
|
||||
#define BOOST_VMD_DETAIL_AFTER_PARENS_DATA(vseq) BOOST_VMD_EMPTY vseq
|
||||
#define BOOST_VMD_DETAIL_SPLIT_PARENS(vseq) (BOOST_VMD_DETAIL_BEGIN_PARENS(vseq),BOOST_VMD_DETAIL_AFTER_PARENS_DATA(vseq))
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_PARENS_COMMON_HPP */
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_PARENS_SPLIT_HPP)
|
||||
#define BOOST_VMD_DETAIL_PARENS_SPLIT_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/vmd/detail/empty_result.hpp>
|
||||
#include <boost/vmd/detail/parens_common.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_PARENS_SPLIT(vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_SPLIT_PARENS, \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
#endif /* BOOST_VMD_DETAIL_PARENS_SPLIT_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_1_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_1_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_1_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_10_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_10_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_10_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_11_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_11_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_11_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_12_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_12_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_12_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_13_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_13_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_13_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_14_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_14_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_14_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_15_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_15_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_15_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_16_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_16_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_16_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_2_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_2_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_2_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_3_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_3_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_3_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_4_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_4_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_4_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_5_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_5_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_5_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_6_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_6_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_6_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_7_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_7_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_7_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_8_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_8_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_8_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_9_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_9_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_9_HPP */
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_HEADERS_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_HEADERS_HPP
|
||||
|
||||
#include <boost/preprocessor/array/size.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/while.hpp>
|
||||
#include <boost/preprocessor/list/size.hpp>
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/equal.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/detail/data_equal_common.hpp>
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_HEADERS_HPP */
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_HPP)
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
|
||||
BOOST_VMD_IDENTITY(2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_D(d,state,em1,em2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
|
||||
BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS_D \
|
||||
) \
|
||||
(d,em1,em2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_D \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_D(d,state) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_D(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP(dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP_D(d,dataf,datas,sz,vtype) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_D, \
|
||||
( \
|
||||
1, \
|
||||
dataf, \
|
||||
datas, \
|
||||
sz, \
|
||||
vtype, \
|
||||
0, \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ(dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ_D(d,dataf,datas,szf,szs,vtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,szf,szs), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,dataf,datas,szf,vtype) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC(dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ \
|
||||
( \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_D(d,dataf,datas,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ_D \
|
||||
( \
|
||||
d, \
|
||||
dataf, \
|
||||
datas, \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
|
||||
vtype \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_1_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_1_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_1_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_1_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_1_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_10_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_10_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_10_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_10_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_10_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_11_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_11_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_11_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_11_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_11_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_12_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_12_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_12_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_12_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_12_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_13_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_13_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_13_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_13_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_14_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_14_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_14_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_14_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_14_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_15_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_15_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_15_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_15_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_15_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_16_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_16_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_16_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_16_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_16_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_2_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_2_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_2_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_2_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_2_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_3_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_3_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_3_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_3_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_3_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_4_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_4_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_4_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_4_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_4_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_5_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_5_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_5_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_5_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_5_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_6_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_6_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_6_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_6_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_7_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_7_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_7_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_7_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_7_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_8_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_8_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_8_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_8_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_8_HPP */
|
||||
@@ -0,0 +1,282 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_9_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_HPP
|
||||
|
||||
#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_CNI_CHK(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_CNI_CHK_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
|
||||
), \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_VSEQ(vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9 \
|
||||
( \
|
||||
BOOST_VMD_TO_SEQ(vseq1), \
|
||||
BOOST_VMD_TO_SEQ(vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_VSEQ_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_VMD_DETAIL_DATA_EQUAL_9_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq1), \
|
||||
BOOST_VMD_TO_SEQ_D(d,vseq2), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_CNI(vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_VSEQ, \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_CNI_CHK \
|
||||
) \
|
||||
(vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_CNI_D(d,vseq1,vseq2,vtype) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype, \
|
||||
BOOST_VMD_TYPE_SEQUENCE \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_VSEQ_D, \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_CNI_CHK_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_CNI, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
vtype1, \
|
||||
vtype2 \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_CNI_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_WT_CHECK \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_WT_CHECK_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
|
||||
BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_WT(vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_WT_CONVERT \
|
||||
) \
|
||||
(vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_WT_CONVERT_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,vtype1,vtype2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_GTYPE(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_WT \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_GTYPE_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_WT_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
|
||||
BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_EBP(vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_GTYPE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_EBP_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_GTYPE_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq1,vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_EMPTY(vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_EBP \
|
||||
) \
|
||||
(vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_EMPTY_D(d,vseq1,vseq2,be1,be2) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITAND(be1,be2), \
|
||||
BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_EBP_D \
|
||||
) \
|
||||
(d,vseq1,vseq2,be1,be2) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_9_D(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_9_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
vseq2, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
BOOST_VMD_IS_EMPTY(vseq2) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_9_HPP */
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_EQUAL_HEADERS_HPP)
|
||||
#define BOOST_VMD_DETAIL_EQUAL_HEADERS_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/vmd/to_seq.hpp>
|
||||
#include <boost/vmd/get_type.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/adjust_tuple_type.hpp>
|
||||
#include <boost/vmd/detail/data_equal.hpp>
|
||||
#include <boost/vmd/detail/equal_common.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_EQUAL_HEADERS_HPP */
|
||||
@@ -0,0 +1,236 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQ_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQ_HPP
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/while.hpp>
|
||||
#include <boost/preprocessor/facilities/empty.hpp>
|
||||
#include <boost/preprocessor/seq/push_back.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/push_back.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/empty_result.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/parens.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_INIT(seq) \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS(seq,BOOST_VMD_RETURN_AFTER), \
|
||||
BOOST_PP_EMPTY() \
|
||||
), \
|
||||
BOOST_PP_EMPTY() \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_INIT_D(d,seq) \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS_D(d,seq,BOOST_VMD_RETURN_AFTER), \
|
||||
BOOST_PP_EMPTY() \
|
||||
), \
|
||||
BOOST_PP_EMPTY() \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_PRED(d,state) \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP_SET_FAILURE(d,state) \
|
||||
( \
|
||||
BOOST_PP_EMPTY(), \
|
||||
BOOST_PP_EMPTY(), \
|
||||
BOOST_PP_TUPLE_ELEM(2,state), \
|
||||
BOOST_PP_TUPLE_ELEM(3,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP_MAKE_SEQ(d,state) \
|
||||
BOOST_PP_TUPLE_ELEM(0,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP_UPGRADE_SEQ(d,state) \
|
||||
BOOST_PP_SEQ_PUSH_BACK \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(2,state), \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_ELEM(0,state) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP_SET_SUCCESS(d,state) \
|
||||
( \
|
||||
BOOST_PP_EMPTY(), \
|
||||
BOOST_PP_EMPTY(), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(2,state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_MAKE_SEQ, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_UPGRADE_SEQ \
|
||||
) \
|
||||
(d,state), \
|
||||
BOOST_PP_EMPTY() \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP_SET_CONTINUE(d,state) \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_PARENS_D(d,BOOST_PP_TUPLE_ELEM(1,state),BOOST_VMD_RETURN_AFTER), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(2,state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_MAKE_SEQ, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_UPGRADE_SEQ \
|
||||
) \
|
||||
(d,state) \
|
||||
), \
|
||||
BOOST_PP_TUPLE_ELEM(1,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP_CHECK_REST(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(1,state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_SET_SUCCESS, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_SET_CONTINUE \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_OP(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
1, \
|
||||
BOOST_PP_TUPLE_SIZE \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,state) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_CHECK_REST, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP_SET_FAILURE \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_STATE_RESULT(state) \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(2,state), \
|
||||
BOOST_PP_TUPLE_ELEM(3,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_PROCESS(seq) \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_RESULT \
|
||||
( \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_PRED, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_INIT(seq) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_SPLIT(seq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(seq), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_SEQ_PROCESS \
|
||||
) \
|
||||
(seq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_BEGIN(seq) \
|
||||
BOOST_PP_TUPLE_ELEM(0,BOOST_VMD_DETAIL_SEQ_SPLIT(seq)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_PROCESS_D(d,seq) \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_RESULT \
|
||||
( \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_PRED, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_OP, \
|
||||
BOOST_VMD_DETAIL_SEQ_STATE_INIT_D(d,seq) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_SPLIT_D(d,seq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(seq), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_SEQ_PROCESS_D \
|
||||
) \
|
||||
(d,seq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_BEGIN_D(d,seq) \
|
||||
BOOST_PP_TUPLE_ELEM(0,BOOST_VMD_DETAIL_SEQ_SPLIT_D(d,seq)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQ_SPLIT_D, \
|
||||
BOOST_VMD_DETAIL_SEQ_BEGIN_D \
|
||||
) \
|
||||
(d,BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQ(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQ_SPLIT, \
|
||||
BOOST_VMD_DETAIL_SEQ_BEGIN \
|
||||
) \
|
||||
(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQ_HPP */
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_ARITY_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ARITY_HPP
|
||||
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/logical/bitnor.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/sequence_elem.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_MULTI_TUPLE(tuple) \
|
||||
BOOST_PP_BITNOR \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(1,tuple)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_UNARY_TUPLE(tuple) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(1,tuple)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
// UNARY
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_UNARY(vseq) \
|
||||
BOOST_VMD_DETAIL_IS_UNARY_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM(BOOST_VMD_ALLOW_AFTER,0,vseq,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_UNARY_D(d,vseq) \
|
||||
BOOST_VMD_DETAIL_IS_UNARY_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_D(d,BOOST_VMD_ALLOW_AFTER,0,vseq,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
// MULTI
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_MULTI(vseq) \
|
||||
BOOST_VMD_DETAIL_IS_MULTI_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM(BOOST_VMD_ALLOW_AFTER,0,vseq,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_MULTI_D(d,vseq) \
|
||||
BOOST_VMD_DETAIL_IS_MULTI_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_D(d,BOOST_VMD_ALLOW_AFTER,0,vseq,BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_ARITY_HPP */
|
||||
@@ -0,0 +1,766 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_COMMON_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_COMMON_HPP
|
||||
|
||||
#include <boost/preprocessor/arithmetic/inc.hpp>
|
||||
#include <boost/preprocessor/array/push_back.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/comparison/less_equal.hpp>
|
||||
#include <boost/preprocessor/comparison/not_equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/while.hpp>
|
||||
#include <boost/preprocessor/list/append.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/seq/push_back.hpp>
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/push_back.hpp>
|
||||
#include <boost/preprocessor/tuple/replace.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_empty_list.hpp>
|
||||
#include <boost/vmd/detail/array.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
#include <boost/vmd/detail/identifier.hpp>
|
||||
#include <boost/vmd/detail/identifier_type.hpp>
|
||||
#include <boost/vmd/detail/list.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/seq.hpp>
|
||||
#include <boost/vmd/detail/tuple.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT_ELEM 0
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ELEM 1
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM_ELEM 2
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE_ELEM 3
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM_ELEM 4
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES_ELEM 5
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX_ELEM 6
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_RETURN(d,from,number) \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_ELEM(0,from), \
|
||||
number \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_NO_RETURN(d,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_RETURN(d,from,BOOST_VMD_DETAIL_MODS_NO_RETURN) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_EXACT_RETURN(d,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_RETURN(d,from,BOOST_VMD_DETAIL_MODS_RETURN) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_GENERAL_RETURN(d,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_RETURN(d,from,BOOST_VMD_DETAIL_MODS_RETURN_TUPLE) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_ARRAY_RETURN(d,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_RETURN(d,from,BOOST_VMD_DETAIL_MODS_RETURN_ARRAY) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_LIST_RETURN(d,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_RETURN(d,from,BOOST_VMD_DETAIL_MODS_RETURN_LIST) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(from) \
|
||||
BOOST_PP_EQUAL \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(1,from), \
|
||||
BOOST_VMD_DETAIL_MODS_RETURN_AFTER \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,from) \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_ELEM(1,from), \
|
||||
BOOST_VMD_DETAIL_MODS_RETURN_AFTER \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state) \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX_ELEM,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_IS_EMPTY(state) \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_FROM_EMPTY(state,data) \
|
||||
(data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_TO_SEQ(state,data) \
|
||||
BOOST_PP_SEQ_PUSH_BACK(BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state),data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_TO_TUPLE(state,data) \
|
||||
BOOST_PP_TUPLE_PUSH_BACK(BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state),data) \
|
||||
/**/
|
||||
|
||||
// Array
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_BOOST_VMD_TYPE_ARRAY(d,state,data) \
|
||||
BOOST_PP_ARRAY_PUSH_BACK(BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state),data) \
|
||||
/**/
|
||||
|
||||
// List
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_BOOST_VMD_TYPE_LIST(d,state,data) \
|
||||
BOOST_PP_LIST_APPEND_D(d,BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state),(data,BOOST_PP_NIL)) \
|
||||
/**/
|
||||
|
||||
// Seq
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_BOOST_VMD_TYPE_SEQ(d,state,data) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_IS_EMPTY(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_FROM_EMPTY, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_TO_SEQ \
|
||||
) \
|
||||
(state,data) \
|
||||
/**/
|
||||
|
||||
// Tuple
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_BOOST_VMD_TYPE_TUPLE(d,state,data) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_IS_EMPTY(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_FROM_EMPTY, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_TO_TUPLE \
|
||||
) \
|
||||
(state,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_GET_NAME(state) \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_PROCESS(d,name,state,data) \
|
||||
name(d,state,data) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_GET_DATA(d,state,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_NO_RETURN \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
), \
|
||||
BOOST_PP_TUPLE_ELEM, \
|
||||
BOOST_VMD_IDENTITY(tuple) \
|
||||
) \
|
||||
(1,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD(d,state,ttuple) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_PROCESS \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_GET_NAME(state), \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD_GET_DATA(d,state,ttuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_PROCESSING_ELEM_CHECK(d,state) \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_SEQ_SIZE(BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_PROCESSING_ELEM(d,state) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state)), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_PROCESSING_ELEM_CHECK \
|
||||
) \
|
||||
(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_GET_TYPE(state) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state),BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_STATE_GET_TYPE_REENTRANT(state) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
1, \
|
||||
BOOST_PP_TUPLE_ELEM(BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state),BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_UNKNOWN(d,state) \
|
||||
( \
|
||||
, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD(d,state,(BOOST_VMD_TYPE_UNKNOWN,BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state))), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state), \
|
||||
BOOST_PP_INC(BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state)) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_GET_FULL_TYPE_CHECK_ID(d,type,id) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,type,BOOST_VMD_TYPE_IDENTIFIER), \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_TYPE_D, \
|
||||
BOOST_VMD_IDENTITY(type) \
|
||||
) \
|
||||
(d,id) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_GET_FULL_TYPE(d,state,tuple) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_GET_FULL_TYPE_CHECK_ID \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_TYPE_, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_GET_TYPE(state) \
|
||||
), \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND_PROCESS(d,state,tuple) \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(1,tuple), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_GET_FULL_TYPE(d,state,tuple), \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state), \
|
||||
BOOST_PP_INC(BOOST_PP_TUPLE_SIZE(BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state))) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND_SEQ_SINGLE(d,tuple) \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,tuple)),1) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND_SEQ(d,state,tuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_GET_FULL_TYPE(d,state,tuple), \
|
||||
BOOST_VMD_TYPE_SEQ \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND_SEQ_SINGLE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,tuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND(d,state,tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND_SEQ(d,state,tuple), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INCREMENT_INDEX, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND_PROCESS \
|
||||
) \
|
||||
(d,state,tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INCREMENT_INDEX(d,state,tuple) \
|
||||
BOOST_PP_TUPLE_REPLACE_D(d,state,BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX_ELEM,BOOST_PP_INC(BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state))) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE_TUPLE(d,state,tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,tuple) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INCREMENT_INDEX, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_FOUND \
|
||||
) \
|
||||
(d,state,tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE(d,call,state) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE_TUPLE \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
call(BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state),BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE_D(d,call,state) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE_TUPLE \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
call(d,BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state),BOOST_VMD_RETURN_AFTER) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_GCLRT(state) \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_, \
|
||||
BOOST_PP_CAT(BOOST_VMD_DETAIL_SEQUENCE_STATE_GET_TYPE(state),_D) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_GCLPL(state) \
|
||||
BOOST_PP_CAT \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_GET_TYPE(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST_GCL(state,rflag) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
rflag, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_GCLRT, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_GCLPL \
|
||||
) \
|
||||
(state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST_RT_CALL(d,call,state,rflag) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
rflag, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TEST_TYPE \
|
||||
) \
|
||||
(d,call,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST_RT(d,state,rflag) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST_RT_CALL \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST_GCL(state,rflag), \
|
||||
state, \
|
||||
rflag \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST(d,state) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST_RT \
|
||||
( \
|
||||
d, \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_GET_TYPE_REENTRANT(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_OP(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state), \
|
||||
BOOST_PP_TUPLE_SIZE(BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state)) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_UNKNOWN, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP_TEST \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_INNER_PRED(d,state) \
|
||||
BOOST_PP_NOT_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INDEX(state), \
|
||||
BOOST_PP_INC(BOOST_PP_TUPLE_SIZE(BOOST_VMD_DETAIL_SEQUENCE_STATE_TYPES(state))) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ELEM_FROM(d,from) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_GENERAL_RETURN(d,from), \
|
||||
((SEQ,1),(TUPLE,1)), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_EXACT_RETURN(d,from), \
|
||||
((SEQ,1),(LIST,1),(ARRAY,1),(TUPLE,1)), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_ARRAY_RETURN(d,from), \
|
||||
((SEQ,1),(ARRAY,1),(TUPLE,1)), \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_LIST_RETURN(d,from), \
|
||||
((SEQ,1),(LIST,1),(TUPLE,1)), \
|
||||
((SEQ,1),(TUPLE,1)) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ELEM(d,state) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ELEM_FROM \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ANY(d,state) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ELEM, \
|
||||
BOOST_VMD_IDENTITY(((SEQ,1),(TUPLE,1))) \
|
||||
) \
|
||||
(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_PROCESSING_ELEM(d,state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ELEM, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES_ANY \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN(d,state) \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_PRED, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP, \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
BOOST_PP_TUPLE_PUSH_BACK \
|
||||
( \
|
||||
state, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN_TUPLE_TYPES(d,state) \
|
||||
), \
|
||||
0 \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_ID_LOOP(d,state) \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_PRED, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_INNER_OP, \
|
||||
BOOST_PP_TUPLE_PUSH_BACK(BOOST_PP_TUPLE_PUSH_BACK(state,((IDENTIFIER,1))),0) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_ID_EL(d,state) \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(1,BOOST_VMD_DETAIL_LIST_D(d,BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state),BOOST_VMD_RETURN_AFTER)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT_ADD(d,state,(BOOST_VMD_TYPE_LIST,BOOST_PP_NIL)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_ID(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY_LIST_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_IDENTIFIER_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_ID_EL, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_ID_LOOP \
|
||||
) \
|
||||
(d,state) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP_REDUCE_STATE(state) \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_OUTTYPE(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_OP(d,state) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_REDUCE_STATE \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_PAREN, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP_ID \
|
||||
) \
|
||||
(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_PRED_CELEM_SZ(d,state) \
|
||||
BOOST_PP_LESS_EQUAL_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_SEQ_SIZE(BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_PRED_CELEM(d,state) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_ELEM(state) \
|
||||
), \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state) \
|
||||
) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(1), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_PRED_CELEM_SZ \
|
||||
) \
|
||||
(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_PRED(d,state) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_PRED_CELEM \
|
||||
) \
|
||||
(d,state) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE_CHECK(output) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(output,BOOST_VMD_TYPE_ARRAY), \
|
||||
(0,()), \
|
||||
BOOST_PP_NIL \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE_CHECK_D(d,output) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,output,BOOST_VMD_TYPE_ARRAY), \
|
||||
(0,()), \
|
||||
BOOST_PP_NIL \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE(output) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(output,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(output,BOOST_VMD_TYPE_TUPLE) \
|
||||
), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE_CHECK \
|
||||
) \
|
||||
(output) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE_D(d,output) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,output,BOOST_VMD_TYPE_SEQ), \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,output,BOOST_VMD_TYPE_TUPLE) \
|
||||
), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE_CHECK_D \
|
||||
) \
|
||||
(d,output) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_GET(state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
), \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state) \
|
||||
)
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_GET_D(d,state) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_FROM(state) \
|
||||
), \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_INPUT(state) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_RESULT(state) \
|
||||
)
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE(vseq,elem,output,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_GET \
|
||||
( \
|
||||
BOOST_PP_WHILE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_PRED, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP, \
|
||||
( \
|
||||
vseq, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE \
|
||||
( \
|
||||
output \
|
||||
), \
|
||||
elem, \
|
||||
output, \
|
||||
from \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D(d,vseq,elem,output,from) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_GET_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_WHILE_ ## d \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_PRED, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_OP, \
|
||||
( \
|
||||
vseq, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_EMPTY_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
output \
|
||||
), \
|
||||
elem, \
|
||||
output, \
|
||||
from \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_COMMON_HPP */
|
||||
@@ -0,0 +1,985 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP
|
||||
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
#include <boost/preprocessor/comparison/greater.hpp>
|
||||
#include <boost/preprocessor/control/expr_if.hpp>
|
||||
#include <boost/preprocessor/control/expr_iif.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/bitand.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/preprocessor/seq/elem.hpp>
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/push_back.hpp>
|
||||
#include <boost/preprocessor/tuple/replace.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_identifier.hpp>
|
||||
#include <boost/vmd/detail/empty_result.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
#include <boost/vmd/detail/match_identifier.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/only_after.hpp>
|
||||
#include <boost/vmd/detail/sequence_common.hpp>
|
||||
|
||||
/*
|
||||
|
||||
Given modifications and the requested type,
|
||||
determine whether or not we should be checking for specific identifiers
|
||||
|
||||
1 = check for specific identifiers
|
||||
0 = do no check for specific identifiers
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
type, \
|
||||
BOOST_VMD_TYPE_IDENTIFIER \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
type, \
|
||||
BOOST_VMD_TYPE_IDENTIFIER \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Given modifications, determine whether or not an index should be part of the result
|
||||
|
||||
1 = index should be part of the result
|
||||
0 = index should not be part of the result
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \
|
||||
BOOST_VMD_TYPE_IDENTIFIER \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm) \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
|
||||
BOOST_PP_BITAND \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \
|
||||
BOOST_VMD_TYPE_IDENTIFIER \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX(nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \
|
||||
(,,), \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX(nm) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Returns a failure result given the modifications
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \
|
||||
) \
|
||||
(nm),nm, \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \
|
||||
) \
|
||||
(nm),nm, \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE(res) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_ELEM(0,res) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY(res) \
|
||||
BOOST_PP_TUPLE_ELEM(0,res) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE(res) \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
1, \
|
||||
BOOST_PP_TUPLE_ELEM(0,res) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY(res) \
|
||||
BOOST_PP_TUPLE_ELEM(1,res) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Gets the 'data' of the result given the result and modifications
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \
|
||||
) \
|
||||
(res) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \
|
||||
) \
|
||||
(res) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Gets the 'type' of the result given the result and modifications
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \
|
||||
) \
|
||||
(res) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \
|
||||
) \
|
||||
(res) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE(res) \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(0,res) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
/*
|
||||
|
||||
Determines whether the result from the element access has failed or not
|
||||
|
||||
returns 1 if it has failed, otherwise 0.
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
) \
|
||||
(res) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \
|
||||
BOOST_VMD_IS_EMPTY \
|
||||
) \
|
||||
(res) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM(seq,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(seq),elem), \
|
||||
BOOST_PP_SEQ_ELEM, \
|
||||
BOOST_VMD_EMPTY \
|
||||
) \
|
||||
(elem,seq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D(d,seq,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(seq),elem), \
|
||||
BOOST_PP_SEQ_ELEM, \
|
||||
BOOST_VMD_EMPTY \
|
||||
) \
|
||||
(elem,seq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES(data,elem) \
|
||||
( \
|
||||
BOOST_PP_SEQ_ELEM(elem,BOOST_PP_TUPLE_ELEM(0,data)), \
|
||||
BOOST_PP_TUPLE_ELEM(1,data) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM(data,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(data,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D(d,data,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(data,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY(seq,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(seq), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM \
|
||||
) \
|
||||
(seq,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D(d,seq,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(seq), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D \
|
||||
) \
|
||||
(d,seq,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER(data,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM \
|
||||
) \
|
||||
(data,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D(d,data,elem) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D \
|
||||
) \
|
||||
(d,data,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ(seq,elem,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY \
|
||||
) \
|
||||
(seq,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D(d,seq,elem,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D \
|
||||
) \
|
||||
(d,seq,elem) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(...) \
|
||||
BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS(elem,vseq,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
|
||||
( \
|
||||
vseq, \
|
||||
elem, \
|
||||
BOOST_VMD_TYPE_SEQ, \
|
||||
nm \
|
||||
), \
|
||||
elem, \
|
||||
nm \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D(d,elem,vseq,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
vseq, \
|
||||
elem, \
|
||||
BOOST_VMD_TYPE_SEQ, \
|
||||
nm \
|
||||
), \
|
||||
elem, \
|
||||
nm \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY(elem,vseq,nm) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D(d,elem,vseq,nm) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY \
|
||||
) \
|
||||
(elem,vseq,nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D \
|
||||
) \
|
||||
(d,elem,vseq,nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
|
||||
BOOST_PP_TUPLE_ELEM, \
|
||||
BOOST_VMD_IDENTITY(res) \
|
||||
) \
|
||||
(1,res) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES(data,index) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
index, \
|
||||
(data,BOOST_PP_DEC(index)), \
|
||||
(,) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES(data,index) \
|
||||
BOOST_PP_EXPR_IF \
|
||||
( \
|
||||
index, \
|
||||
data \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH(data,nm,index) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES \
|
||||
) \
|
||||
(data,index) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP(data,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \
|
||||
( \
|
||||
data, \
|
||||
nm, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER \
|
||||
( \
|
||||
data, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D(d,data,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \
|
||||
( \
|
||||
data, \
|
||||
nm, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \
|
||||
( \
|
||||
d, \
|
||||
data, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID(data,nm,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP, \
|
||||
BOOST_VMD_IDENTITY(data) \
|
||||
) \
|
||||
(data,nm) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D(d,data,nm,type) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D, \
|
||||
BOOST_VMD_IDENTITY(data) \
|
||||
) \
|
||||
(d,data,nm) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY(res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID \
|
||||
( \
|
||||
BOOST_PP_TUPLE_ELEM(1,res), \
|
||||
nm, \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_ELEM(1,res), \
|
||||
nm, \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE(res,nm,type) \
|
||||
BOOST_PP_TUPLE_REPLACE \
|
||||
( \
|
||||
res, \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
1, \
|
||||
BOOST_PP_TUPLE_ELEM(0,res) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D(d,res,nm,type) \
|
||||
BOOST_PP_TUPLE_REPLACE_D \
|
||||
( \
|
||||
d, \
|
||||
res, \
|
||||
0, \
|
||||
BOOST_PP_TUPLE_ELEM \
|
||||
( \
|
||||
1, \
|
||||
BOOST_PP_TUPLE_ELEM(0,res) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS(res,nm,type,index) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \
|
||||
( \
|
||||
BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \
|
||||
nm, \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D(d,res,nm,type,index) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \
|
||||
nm, \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE(res,nm,type,index) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D(d,res,nm,type,index) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES(res,nm,type,index) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
index, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE \
|
||||
) \
|
||||
(res,nm,type,index) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D(d,res,nm,type,index) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
index, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D \
|
||||
) \
|
||||
(d,res,nm,type,index) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE(res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES(res,nm,type,index) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
index, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D(d,res,nm,type,index) \
|
||||
BOOST_PP_IF \
|
||||
( \
|
||||
index, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES(res,nm,type,index) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES \
|
||||
) \
|
||||
(res,nm,type,index) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D(d,res,nm,type,index) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D \
|
||||
) \
|
||||
(d,res,nm,type,index) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID(res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES \
|
||||
( \
|
||||
res, \
|
||||
nm, \
|
||||
type, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm), \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D \
|
||||
( \
|
||||
d, \
|
||||
res, \
|
||||
nm, \
|
||||
type, \
|
||||
BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm), \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED(res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID(res,nm,type) \
|
||||
BOOST_VMD_IS_IDENTIFIER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D(d,res,nm,type) \
|
||||
BOOST_VMD_IS_IDENTIFIER_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER(res,nm,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm), \
|
||||
type \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_IDENTIFIER, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TYPE_IDENTIFIER, \
|
||||
type \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(type), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED(res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D(d,res,nm,type) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE(res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF \
|
||||
) \
|
||||
(res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D(d,res,nm,type) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D \
|
||||
) \
|
||||
(d,res,nm,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA(res,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE \
|
||||
( \
|
||||
res, \
|
||||
nm, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D(d,res,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
res, \
|
||||
nm, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM(elem,vseq,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm), \
|
||||
nm \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D(d,elem,vseq,nm) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm), \
|
||||
nm \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM(allow,elem,...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM \
|
||||
( \
|
||||
elem, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(allow,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ELEM_D(d,allow,elem,...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D \
|
||||
( \
|
||||
d, \
|
||||
elem, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,allow,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP */
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_ENUM_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ENUM_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/tuple/enum.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/sequence_to_tuple.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ENUM_PROCESS(tuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(tuple), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_PP_TUPLE_ENUM \
|
||||
) \
|
||||
(tuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ENUM(...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ENUM_PROCESS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE(__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_ENUM_D(d,...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ENUM_PROCESS \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE_D(d,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_ENUM_HPP */
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_SIZE_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_SIZE_HPP
|
||||
|
||||
#include <boost/preprocessor/array/size.hpp>
|
||||
#include <boost/vmd/detail/sequence_to_array.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_SIZE(vseq) \
|
||||
BOOST_PP_ARRAY_SIZE(BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY(vseq)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_SIZE_D(d,vseq) \
|
||||
BOOST_PP_ARRAY_SIZE(BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY_D(d,vseq)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_SIZE_HPP */
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/sequence_elem.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
), \
|
||||
(0,()) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
), \
|
||||
(0,()) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_TO_ARRAY_HPP */
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_TO_LIST_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_LIST_HPP
|
||||
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/sequence_elem.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_LIST(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_LIST, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_PP_NIL \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_LIST_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_LIST, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_PP_NIL \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_TO_LIST_HPP */
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_TO_SEQ_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_SEQ_HPP
|
||||
|
||||
#include <boost/preprocessor/control/expr_iif.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/sequence_elem.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_SEQ(...) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_SEQ, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_SEQ_D(d,...) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_SEQ, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_TO_SEQ_HPP */
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE_HPP
|
||||
|
||||
#include <boost/preprocessor/control/expr_iif.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/not_empty.hpp>
|
||||
#include <boost/vmd/detail/sequence_elem.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE(...) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_TUPLE, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE_D(d,...) \
|
||||
BOOST_PP_EXPR_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NOT_EMPTY(BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
|
||||
, \
|
||||
BOOST_VMD_TYPE_TUPLE, \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_RETURN,__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_TO_TUPLE_HPP */
|
||||
@@ -0,0 +1,274 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SEQUENCE_TYPE_HPP)
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_HPP
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/equal_type.hpp>
|
||||
#include <boost/vmd/detail/is_array_common.hpp>
|
||||
#include <boost/vmd/detail/is_list.hpp>
|
||||
#include <boost/vmd/detail/modifiers.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/sequence_elem.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_ARRAY(dtuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX(BOOST_PP_TUPLE_ELEM(1,dtuple)), \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
BOOST_VMD_TYPE_TUPLE \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_ARRAY_D(d,dtuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D(d,BOOST_PP_TUPLE_ELEM(1,dtuple)), \
|
||||
BOOST_VMD_TYPE_ARRAY, \
|
||||
BOOST_VMD_TYPE_TUPLE \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_LIST(dtuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST(BOOST_PP_TUPLE_ELEM(1,dtuple)), \
|
||||
BOOST_VMD_TYPE_LIST, \
|
||||
BOOST_VMD_TYPE_TUPLE \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_LIST_D(d,dtuple) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_IS_LIST_D(d,BOOST_PP_TUPLE_ELEM(1,dtuple)), \
|
||||
BOOST_VMD_TYPE_LIST, \
|
||||
BOOST_VMD_TYPE_TUPLE \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_BOTH(dtuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE \
|
||||
( \
|
||||
BOOST_VMD_TYPE_TUPLE, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_LIST(dtuple) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_ARRAY, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_LIST) \
|
||||
) \
|
||||
(dtuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_BOTH_D(d,dtuple) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_TYPE_TUPLE, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_LIST_D(d,dtuple) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_ARRAY_D, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_LIST) \
|
||||
) \
|
||||
(d,dtuple) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MODS(dtuple,rtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(rtype,BOOST_VMD_DETAIL_MODS_RETURN_ARRAY), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_ARRAY, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(rtype,BOOST_VMD_DETAIL_MODS_RETURN_LIST), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_LIST, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(rtype,BOOST_VMD_DETAIL_MODS_RETURN_TUPLE), \
|
||||
BOOST_VMD_IDENTITY(BOOST_PP_TUPLE_ELEM(0,dtuple)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_BOTH \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(dtuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MODS_D(d,dtuple,rtype) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,rtype,BOOST_VMD_DETAIL_MODS_RETURN_ARRAY), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_ARRAY_D, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,rtype,BOOST_VMD_DETAIL_MODS_RETURN_LIST), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_LIST_D, \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL_D(d,rtype,BOOST_VMD_DETAIL_MODS_RETURN_TUPLE), \
|
||||
BOOST_VMD_IDENTITY(BOOST_PP_TUPLE_ELEM(0,dtuple)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_BOTH_D \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
(d,dtuple) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MORE(dtuple,...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MODS \
|
||||
( \
|
||||
dtuple, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_RETURN_TYPE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_ALL,__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MORE_D(d,dtuple,...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MODS_D \
|
||||
( \
|
||||
d, \
|
||||
dtuple, \
|
||||
BOOST_VMD_DETAIL_MODS_RESULT_RETURN_TYPE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS_D(d,BOOST_VMD_ALLOW_ALL,__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_UNARY(dtuple,...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE(BOOST_VMD_TYPE_TUPLE,BOOST_PP_TUPLE_ELEM(0,dtuple)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MORE, \
|
||||
BOOST_VMD_IDENTITY(BOOST_PP_TUPLE_ELEM(0,dtuple)) \
|
||||
) \
|
||||
(dtuple,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_UNARY_D(d,dtuple,...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,BOOST_VMD_TYPE_TUPLE,BOOST_PP_TUPLE_ELEM(0,dtuple)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_MORE_D, \
|
||||
BOOST_VMD_IDENTITY(BOOST_PP_TUPLE_ELEM(0,dtuple)) \
|
||||
) \
|
||||
(d,dtuple,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_SEQUENCE(tuple,...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(1,tuple)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_UNARY, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_SEQUENCE) \
|
||||
) \
|
||||
(BOOST_PP_TUPLE_ELEM(0,tuple),__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_SEQUENCE_D(d,tuple,...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(1,tuple)), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_UNARY_D, \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_SEQUENCE) \
|
||||
) \
|
||||
(d,BOOST_PP_TUPLE_ELEM(0,tuple),__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE(tuple,...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_EMPTY), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_SEQUENCE \
|
||||
) \
|
||||
(tuple,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_D(d,tuple,...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)), \
|
||||
BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_EMPTY), \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_SEQUENCE_D \
|
||||
) \
|
||||
(d,tuple,__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE(...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM \
|
||||
( \
|
||||
BOOST_VMD_ALLOW_ALL, \
|
||||
0, \
|
||||
BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__), \
|
||||
BOOST_VMD_RETURN_AFTER, \
|
||||
BOOST_VMD_RETURN_TYPE_TUPLE \
|
||||
), \
|
||||
__VA_ARGS__ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_SEQUENCE_TYPE_D(d,...) \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_TYPE_TUPLE_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_DETAIL_SEQUENCE_ELEM_D \
|
||||
( \
|
||||
d, \
|
||||
BOOST_VMD_ALLOW_ALL, \
|
||||
0, \
|
||||
BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__), \
|
||||
BOOST_VMD_RETURN_AFTER, \
|
||||
BOOST_VMD_RETURN_TYPE_TUPLE \
|
||||
), \
|
||||
__VA_ARGS__ \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SEQUENCE_TYPE_HPP */
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_SETUP_HPP)
|
||||
#define BOOST_VMD_DETAIL_SETUP_HPP
|
||||
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
|
||||
#if defined(BOOST_VMD_MSVC)
|
||||
#undef BOOST_VMD_MSVC
|
||||
#endif
|
||||
#if defined(BOOST_VMD_MSVC_V8)
|
||||
#undef BOOST_VMD_MSVC_V8
|
||||
#endif
|
||||
#if BOOST_PP_VARIADICS
|
||||
#define BOOST_VMD_MSVC BOOST_PP_VARIADICS_MSVC
|
||||
#if BOOST_VMD_MSVC && defined(_MSC_VER) && _MSC_VER == 1400
|
||||
#define BOOST_VMD_MSVC_V8 1
|
||||
#else
|
||||
#define BOOST_VMD_MSVC_V8 0
|
||||
#endif /* BOOST_VMD_MSVC && defined(_MSC_VER) && _MSC_VER == 1400 */
|
||||
#if !defined(BOOST_VMD_ASSERT_DATA)
|
||||
#if defined(NDEBUG)
|
||||
#define BOOST_VMD_ASSERT_DATA 0
|
||||
#else
|
||||
#define BOOST_VMD_ASSERT_DATA 1
|
||||
#endif /* NDEBUG */
|
||||
#endif /* BOOST_VMD_ASSERT_DATA */
|
||||
#else
|
||||
#define BOOST_VMD_MSVC 0
|
||||
#define BOOST_VMD_MSVC_V8 0
|
||||
#if defined(BOOST_VMD_ASSERT_DATA)
|
||||
#undef BOOST_VMD_ASSERT_DATA
|
||||
#endif
|
||||
#define BOOST_VMD_ASSERT_DATA 0
|
||||
#endif /* BOOST_PP_VARIADICS */
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_SETUP_HPP */
|
||||
@@ -0,0 +1,196 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_TUPLE_HPP)
|
||||
#define BOOST_VMD_DETAIL_TUPLE_HPP
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/empty.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/detail/empty_result.hpp>
|
||||
#include <boost/vmd/detail/mods.hpp>
|
||||
#include <boost/vmd/detail/parens.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BST_CS(vseq) \
|
||||
BOOST_PP_EQUAL(BOOST_PP_TUPLE_SIZE(BOOST_VMD_DETAIL_BEGIN_PARENS(vseq)),1) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BST_CS_D(d,vseq) \
|
||||
BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_SIZE(BOOST_VMD_DETAIL_BEGIN_PARENS(vseq)),1) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BST(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_BST_CS, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BST_D(d,vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_BST_CS_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BSEQ_NXT(vseq) \
|
||||
BOOST_VMD_DETAIL_TUPLE_BST(BOOST_VMD_DETAIL_AFTER_PARENS_DATA(vseq)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BSEQ_NXT_D(d,vseq) \
|
||||
BOOST_VMD_DETAIL_TUPLE_BST_D(d,BOOST_VMD_DETAIL_AFTER_PARENS_DATA(vseq)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BSEQ(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE_BST(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_BSEQ_NXT, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_BSEQ_D(d,vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE_BST_D(d,vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_BSEQ_NXT_D, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(d,vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_SPLIT_CHK_SEQ(vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE_BSEQ(vseq), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_SPLIT_PARENS \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_SPLIT_CHK_SEQ_D(d,vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE_BSEQ_D(d,vseq), \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT, \
|
||||
BOOST_VMD_DETAIL_SPLIT_PARENS \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_SPLIT(vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_SPLIT_CHK_SEQ, \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_SPLIT_D(d,vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_SPLIT_CHK_SEQ_D, \
|
||||
BOOST_VMD_DETAIL_EMPTY_RESULT \
|
||||
) \
|
||||
(d,vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_PROCESS_CHK_SEQ(vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE_BSEQ(vseq), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_BEGIN_PARENS \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_PROCESS_CHK_SEQ_D(d,vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_TUPLE_BSEQ_D(d,vseq), \
|
||||
BOOST_VMD_EMPTY, \
|
||||
BOOST_VMD_DETAIL_BEGIN_PARENS \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_PROCESS(vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_PROCESS_CHK_SEQ, \
|
||||
BOOST_VMD_EMPTY \
|
||||
) \
|
||||
(vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_PROCESS_D(d,vseq) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq), \
|
||||
BOOST_VMD_DETAIL_TUPLE_PROCESS_CHK_SEQ_D, \
|
||||
BOOST_VMD_EMPTY \
|
||||
) \
|
||||
(d,vseq) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE(...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_TUPLE_SPLIT, \
|
||||
BOOST_VMD_DETAIL_TUPLE_PROCESS \
|
||||
) \
|
||||
(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_TUPLE_D(d,...) \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
|
||||
( \
|
||||
BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
|
||||
), \
|
||||
BOOST_VMD_DETAIL_TUPLE_SPLIT_D, \
|
||||
BOOST_VMD_DETAIL_TUPLE_PROCESS_D \
|
||||
) \
|
||||
(d,BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_TUPLE_HPP */
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_IS_TYPE_REGISTRATION_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_TYPE_REGISTRATION_HPP
|
||||
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_UNKNOWN (BOOST_VMD_TYPE_UNKNOWN)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_EMPTY (BOOST_VMD_TYPE_EMPTY)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_ARRAY (BOOST_VMD_TYPE_ARRAY)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_LIST (BOOST_VMD_TYPE_LIST)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_SEQ (BOOST_VMD_TYPE_SEQ)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_TUPLE (BOOST_VMD_TYPE_TUPLE)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_IDENTIFIER (BOOST_VMD_TYPE_IDENTIFIER)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_NUMBER (BOOST_VMD_TYPE_NUMBER)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_SEQUENCE (BOOST_VMD_TYPE_SEQUENCE)
|
||||
#define BOOST_VMD_REGISTER_BOOST_VMD_TYPE_TYPE (BOOST_VMD_TYPE_TYPE)
|
||||
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_UNKNOWN_BOOST_VMD_TYPE_UNKNOWN
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_EMPTY_BOOST_VMD_TYPE_EMPTY
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_ARRAY_BOOST_VMD_TYPE_ARRAY
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_LIST_BOOST_VMD_TYPE_LIST
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_SEQ_BOOST_VMD_TYPE_SEQ
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_TUPLE_BOOST_VMD_TYPE_TUPLE
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_IDENTIFIER_BOOST_VMD_TYPE_IDENTIFIER
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_NUMBER_BOOST_VMD_TYPE_NUMBER
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_SEQUENCE_BOOST_VMD_TYPE_SEQUENCE
|
||||
#define BOOST_VMD_DETECT_BOOST_VMD_TYPE_TYPE_BOOST_VMD_TYPE_TYPE
|
||||
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_UNKNOWN (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_UNKNOWN)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_EMPTY (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_EMPTY)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_ARRAY (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_ARRAY)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_LIST (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_LIST)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_SEQ (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_SEQ)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_TUPLE (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_TUPLE)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_IDENTIFIER (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_IDENTIFIER)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_NUMBER (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_NUMBER)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_SEQUENCE (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_SEQUENCE)
|
||||
#define BOOST_VMD_SUBTYPE_REGISTER_BOOST_VMD_TYPE_TYPE (BOOST_VMD_TYPE_TYPE,BOOST_VMD_TYPE_TYPE)
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_TYPE_REGISTRATION_HPP */
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// Use, modification and distribution are subject to 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).
|
||||
|
||||
#if !defined(BOOST_VMD_DETAIL_VARIADIC_POP_FRONT_HPP)
|
||||
#define BOOST_VMD_DETAIL_VARIADIC_POP_FRONT_HPP
|
||||
|
||||
#include <boost/preprocessor/tuple/enum.hpp>
|
||||
#include <boost/preprocessor/tuple/pop_front.hpp>
|
||||
#include <boost/preprocessor/variadic/to_tuple.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_VARIADIC_POP_FRONT(...) \
|
||||
BOOST_PP_TUPLE_ENUM \
|
||||
( \
|
||||
BOOST_PP_TUPLE_POP_FRONT \
|
||||
( \
|
||||
BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__) \
|
||||
) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_VARIADIC_POP_FRONT_HPP */
|
||||
Reference in New Issue
Block a user