123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- // (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 */
|