]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/vmd/detail/recurse/data_equal/data_equal_specific.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / vmd / detail / recurse / data_equal / data_equal_specific.hpp
1
2 // (C) Copyright Edward Diener 2011-2015
3 // Use, modification and distribution are subject to the Boost Software License,
4 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt).
6
7 #if !defined(BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_HPP)
8 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_HPP
9
10 #include <boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp>
11
12 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS(d,em1,em2) \
13 BOOST_VMD_IDENTITY_RESULT \
14 ( \
15 BOOST_PP_IIF \
16 ( \
17 BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
18 BOOST_VMD_IDENTITY(2), \
19 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
20 ) \
21 (d,em1,em2) \
22 ) \
23 /**/
24
25 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS_D(d,em1,em2) \
26 BOOST_VMD_IDENTITY_RESULT \
27 ( \
28 BOOST_PP_IIF \
29 ( \
30 BOOST_VMD_DETAIL_DATA_EQUAL_IS_BOTH_COMPOSITE(em1,em2), \
31 BOOST_VMD_IDENTITY(2), \
32 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
33 ) \
34 (d,em1,em2) \
35 ) \
36 /**/
37
38 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP(d,state,em1,em2) \
39 BOOST_PP_IIF \
40 ( \
41 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
42 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
43 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS \
44 ) \
45 (d,em1,em2) \
46 /**/
47
48 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_D(d,state,em1,em2) \
49 BOOST_PP_IIF \
50 ( \
51 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_COMP_PROCESSING(d,state), \
52 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D, \
53 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_PARENS_D \
54 ) \
55 (d,em1,em2) \
56 /**/
57
58 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ(d,state) \
59 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP \
60 ( \
61 d, \
62 state, \
63 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
64 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
65 ) \
66 /**/
67
68 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_D(d,state) \
69 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_CMP_D \
70 ( \
71 d, \
72 state, \
73 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_FIRST_ELEMENT(d,state), \
74 BOOST_VMD_DETAIL_DATA_EQUAL_STATE_GET_SECOND_ELEMENT(d,state) \
75 ) \
76 /**/
77
78 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP(d,state) \
79 BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
80 ( \
81 d, \
82 state, \
83 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ(d,state) \
84 ) \
85 /**/
86
87 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_D(d,state) \
88 BOOST_VMD_DETAIL_DATA_EQUAL_OP_RESULT \
89 ( \
90 d, \
91 state, \
92 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_TEQ_D(d,state) \
93 ) \
94 /**/
95
96 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP(dataf,datas,sz,vtype) \
97 BOOST_PP_TUPLE_ELEM \
98 ( \
99 0, \
100 BOOST_PP_WHILE \
101 ( \
102 BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
103 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP, \
104 ( \
105 1, \
106 dataf, \
107 datas, \
108 sz, \
109 vtype, \
110 0, \
111 ) \
112 ) \
113 ) \
114 /**/
115
116 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP_D(d,dataf,datas,sz,vtype) \
117 BOOST_PP_TUPLE_ELEM \
118 ( \
119 0, \
120 BOOST_PP_WHILE_ ## d \
121 ( \
122 BOOST_VMD_DETAIL_DATA_EQUAL_PRED, \
123 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_OP_D, \
124 ( \
125 1, \
126 dataf, \
127 datas, \
128 sz, \
129 vtype, \
130 0, \
131 ) \
132 ) \
133 ) \
134 /**/
135
136 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ(dataf,datas,szf,szs,vtype) \
137 BOOST_VMD_IDENTITY_RESULT \
138 ( \
139 BOOST_PP_IIF \
140 ( \
141 BOOST_PP_EQUAL(szf,szs), \
142 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP, \
143 BOOST_VMD_IDENTITY(0) \
144 ) \
145 (dataf,datas,szf,vtype) \
146 ) \
147 /**/
148
149 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ_D(d,dataf,datas,szf,szs,vtype) \
150 BOOST_VMD_IDENTITY_RESULT \
151 ( \
152 BOOST_PP_IIF \
153 ( \
154 BOOST_PP_EQUAL_D(d,szf,szs), \
155 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_LOOP_D, \
156 BOOST_VMD_IDENTITY(0) \
157 ) \
158 (d,dataf,datas,szf,vtype) \
159 ) \
160 /**/
161
162 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC(dataf,datas,vtype) \
163 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ \
164 ( \
165 dataf, \
166 datas, \
167 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(dataf,vtype), \
168 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE(datas,vtype), \
169 vtype \
170 ) \
171 /**/
172
173 #define BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_D(d,dataf,datas,vtype) \
174 BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_SZ_D \
175 ( \
176 d, \
177 dataf, \
178 datas, \
179 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,dataf,vtype), \
180 BOOST_VMD_DETAIL_DATA_EQUAL_GET_SIZE_D(d,datas,vtype), \
181 vtype \
182 ) \
183 /**/
184
185 #endif /* BOOST_VMD_DETAIL_DATA_EQUAL_SPECIFIC_HPP */