Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:53:36

0001 
0002 //  (C) Copyright Edward Diener 2011-2015
0003 //  Use, modification and distribution are subject to the Boost Software License,
0004 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
0005 //  http://www.boost.org/LICENSE_1_0.txt).
0006 
0007 #if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_HPP)
0008 #define BOOST_VMD_DETAIL_DATA_EQUAL_HPP
0009 
0010 #include <boost/vmd/detail/recurse/data_equal/data_equal_1.hpp>
0011 #include <boost/vmd/detail/recurse/data_equal/data_equal_2.hpp>
0012 #include <boost/vmd/detail/recurse/data_equal/data_equal_3.hpp>
0013 #include <boost/vmd/detail/recurse/data_equal/data_equal_4.hpp>
0014 #include <boost/vmd/detail/recurse/data_equal/data_equal_5.hpp>
0015 #include <boost/vmd/detail/recurse/data_equal/data_equal_6.hpp>
0016 #include <boost/vmd/detail/recurse/data_equal/data_equal_7.hpp>
0017 #include <boost/vmd/detail/recurse/data_equal/data_equal_8.hpp>
0018 #include <boost/vmd/detail/recurse/data_equal/data_equal_9.hpp>
0019 #include <boost/vmd/detail/recurse/data_equal/data_equal_10.hpp>
0020 #include <boost/vmd/detail/recurse/data_equal/data_equal_11.hpp>
0021 #include <boost/vmd/detail/recurse/data_equal/data_equal_12.hpp>
0022 #include <boost/vmd/detail/recurse/data_equal/data_equal_13.hpp>
0023 #include <boost/vmd/detail/recurse/data_equal/data_equal_14.hpp>
0024 #include <boost/vmd/detail/recurse/data_equal/data_equal_15.hpp>
0025 #include <boost/vmd/detail/recurse/data_equal/data_equal_16.hpp>
0026 
0027 #include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
0028 
0029 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS(d,em1,em2) \
0030     BOOST_VMD_IDENTITY_RESULT \
0031         ( \
0032         BOOST_PP_IIF \
0033             ( \
0034             BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
0035             BOOST_VMD_IDENTITY(2), \
0036             BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
0037             ) \
0038         (d,em1,em2) \
0039         ) \
0040 /**/
0041 
0042 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
0043     BOOST_VMD_IDENTITY_RESULT \
0044         ( \
0045         BOOST_PP_IIF \
0046             ( \
0047             BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
0048             BOOST_VMD_IDENTITY(2), \
0049             BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
0050             ) \
0051         (d,em1,em2) \
0052         ) \
0053 /**/
0054 
0055 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP(d,state,em1,em2) \
0056     BOOST_PP_IIF \
0057         ( \
0058         BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
0059         BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
0060         BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS \
0061         ) \
0062     (d,em1,em2) \
0063 /**/
0064 
0065 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_D(d,state,em1,em2) \
0066     BOOST_PP_IIF \
0067         ( \
0068         BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
0069         BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
0070         BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_PARENS_D \
0071         ) \
0072     (d,em1,em2) \
0073 /**/
0074 
0075 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ(d,state) \
0076     BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP \
0077         ( \
0078         d, \
0079         state, \
0080         BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
0081         BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
0082         ) \
0083 /**/
0084 
0085 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_D(d,state) \
0086     BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_CMP_D \
0087         ( \
0088         d, \
0089         state, \
0090         BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
0091         BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
0092         ) \
0093 /**/
0094 
0095 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP(d,state) \
0096     BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
0097         ( \
0098         d, \
0099         state, \
0100         BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ(d,state) \
0101         ) \
0102 /**/
0103 
0104 #define BOOST_VMD_DETAIL_DATA_EQUAL_OP_D(d,state) \
0105     BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
0106         ( \
0107         d, \
0108         state, \
0109         BOOST_VMD_DETAIL_DATA_EQUAL_OP_TEQ_D(d,state) \
0110         ) \
0111 /**/
0112 
0113 #define BOOST_VMD_DETAIL_DATA_EQUAL_LOOP(dataf,datas,sz,vtype) \
0114     BOOST_PP_TUPLE_ELEM \
0115         ( \
0116         0, \
0117         BOOST_PP_WHILE \
0118             ( \
0119             BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
0120             BOOST_VMD_DETAIL_DATA_EQUAL_OP, \
0121                 ( \
0122                 1, \
0123                 dataf, \
0124                 datas, \
0125                 sz, \
0126                 vtype, \
0127                 0, \
0128                 ) \
0129             ) \
0130         ) \
0131 /**/
0132 
0133 #define BOOST_VMD_DETAIL_DATA_EQUAL_LOOP_D(d,dataf,datas,sz,vtype) \
0134     BOOST_PP_TUPLE_ELEM \
0135         ( \
0136         0, \
0137         BOOST_PP_WHILE_ ## d \
0138             ( \
0139             BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
0140             BOOST_VMD_DETAIL_DATA_EQUAL_OP_D, \
0141                 ( \
0142                 1, \
0143                 dataf, \
0144                 datas, \
0145                 sz, \
0146                 vtype, \
0147                 0, \
0148                 ) \
0149             ) \
0150         ) \
0151 /**/
0152 
0153 #define BOOST_VMD_DETAIL_DATA_EQUAL_SZ(dataf,datas,szf,szs,vtype) \
0154     BOOST_VMD_IDENTITY_RESULT \
0155         ( \
0156         BOOST_PP_IIF \
0157             ( \
0158             BOOST_PP_EQUAL(szf,szs), \
0159             BOOST_VMD_DETAIL_DATA_EQUAL_LOOP, \
0160             BOOST_VMD_IDENTITY(0) \
0161             ) \
0162         (dataf,datas,szf,vtype) \
0163         ) \
0164 /**/
0165 
0166 #define BOOST_VMD_DETAIL_DATA_EQUAL_SZ_D(d,dataf,datas,szf,szs,vtype) \
0167     BOOST_VMD_IDENTITY_RESULT \
0168         ( \
0169         BOOST_PP_IIF \
0170             ( \
0171             BOOST_PP_EQUAL_D(d,szf,szs), \
0172             BOOST_VMD_DETAIL_DATA_EQUAL_LOOP_D, \
0173             BOOST_VMD_IDENTITY(0) \
0174             ) \
0175         (d,dataf,datas,szf,vtype) \
0176         ) \
0177 /**/
0178 
0179 #define BOOST_VMD_DETAIL_DATA_EQUAL(dataf,datas,vtype) \
0180     BOOST_VMD_DETAIL_DATA_EQUAL_SZ \
0181         ( \
0182         dataf, \
0183         datas, \
0184         BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
0185         BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
0186         vtype \
0187         ) \
0188 /**/
0189 
0190 #define BOOST_VMD_DETAIL_DATA_EQUAL_D(d,dataf,datas,vtype) \
0191     BOOST_VMD_DETAIL_DATA_EQUAL_SZ_D \
0192         ( \
0193         d, \
0194         dataf, \
0195         datas, \
0196         BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
0197         BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
0198         vtype \
0199         ) \
0200 /**/
0201 
0202 #endif /* BOOST_VMD_DETAIL_DATA_EQUAL_HPP */