stabilize build system: depends, installer, boost/bdb fixes, cross targets groundwork

This commit is contained in:
2026-02-24 18:38:47 +00:00
parent da8c28aaeb
commit 65cb2619a7
13106 changed files with 2484322 additions and 1804 deletions
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */
@@ -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 */