]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/vmd/include/boost/vmd/detail/recurse/equal/equal_13.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / vmd / include / boost / vmd / detail / recurse / equal / equal_13.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_EQUAL_13_HPP)
8 #define BOOST_VMD_DETAIL_EQUAL_13_HPP
9
10 #include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
11
12 #define BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK(vseq1,vseq2,vtype) \
13 BOOST_PP_IIF \
14 ( \
15 BOOST_PP_BITOR \
16 ( \
17 BOOST_PP_BITOR \
18 ( \
19 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
20 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
21 ), \
22 BOOST_PP_BITOR \
23 ( \
24 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
25 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
26 ) \
27 ), \
28 BOOST_VMD_DETAIL_DATA_EQUAL_13, \
29 BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
30 ) \
31 (vseq1,vseq2,vtype) \
32 /**/
33
34 #define BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK_D(d,vseq1,vseq2,vtype) \
35 BOOST_PP_IIF \
36 ( \
37 BOOST_PP_BITOR \
38 ( \
39 BOOST_PP_BITOR \
40 ( \
41 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
42 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
43 ), \
44 BOOST_PP_BITOR \
45 ( \
46 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
47 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
48 ) \
49 ), \
50 BOOST_VMD_DETAIL_DATA_EQUAL_13_D, \
51 BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
52 ) \
53 (d,vseq1,vseq2,vtype) \
54 /**/
55
56 #define BOOST_VMD_DETAIL_EQUAL_13_VSEQ(vseq1,vseq2,vtype) \
57 BOOST_VMD_DETAIL_DATA_EQUAL_13 \
58 ( \
59 BOOST_VMD_TO_SEQ(vseq1), \
60 BOOST_VMD_TO_SEQ(vseq2), \
61 BOOST_VMD_TYPE_SEQ \
62 ) \
63 /**/
64
65 #define BOOST_VMD_DETAIL_EQUAL_13_VSEQ_D(d,vseq1,vseq2,vtype) \
66 BOOST_VMD_DETAIL_DATA_EQUAL_13_D \
67 ( \
68 d, \
69 BOOST_VMD_TO_SEQ_D(d,vseq1), \
70 BOOST_VMD_TO_SEQ_D(d,vseq2), \
71 BOOST_VMD_TYPE_SEQ \
72 ) \
73 /**/
74
75 #define BOOST_VMD_DETAIL_EQUAL_13_CNI(vseq1,vseq2,vtype) \
76 BOOST_PP_IIF \
77 ( \
78 BOOST_VMD_DETAIL_EQUAL_TYPE \
79 ( \
80 vtype, \
81 BOOST_VMD_TYPE_SEQUENCE \
82 ), \
83 BOOST_VMD_DETAIL_EQUAL_13_VSEQ, \
84 BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK \
85 ) \
86 (vseq1,vseq2,vtype) \
87 /**/
88
89 #define BOOST_VMD_DETAIL_EQUAL_13_CNI_D(d,vseq1,vseq2,vtype) \
90 BOOST_PP_IIF \
91 ( \
92 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
93 ( \
94 d, \
95 vtype, \
96 BOOST_VMD_TYPE_SEQUENCE \
97 ), \
98 BOOST_VMD_DETAIL_EQUAL_13_VSEQ_D, \
99 BOOST_VMD_DETAIL_EQUAL_13_CNI_CHK_D \
100 ) \
101 (d,vseq1,vseq2,vtype) \
102 /**/
103
104 #define BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
105 BOOST_VMD_IDENTITY_RESULT \
106 ( \
107 BOOST_PP_IIF \
108 ( \
109 BOOST_VMD_DETAIL_EQUAL_TYPE \
110 ( \
111 vtype1, \
112 vtype2 \
113 ), \
114 BOOST_VMD_DETAIL_EQUAL_13_CNI, \
115 BOOST_VMD_IDENTITY(0) \
116 ) \
117 (vseq1,vseq2,vtype1) \
118 ) \
119 /**/
120
121 #define BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
122 BOOST_VMD_IDENTITY_RESULT \
123 ( \
124 BOOST_PP_IIF \
125 ( \
126 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
127 ( \
128 d, \
129 vtype1, \
130 vtype2 \
131 ), \
132 BOOST_VMD_DETAIL_EQUAL_13_CNI_D, \
133 BOOST_VMD_IDENTITY(0) \
134 ) \
135 (d,vseq1,vseq2,vtype1) \
136 ) \
137 /**/
138
139 #define BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
140 BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK \
141 ( \
142 vseq1, \
143 vseq2, \
144 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
145 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
146 ) \
147 /**/
148
149 #define BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
150 BOOST_VMD_DETAIL_EQUAL_13_WT_CHECK_D \
151 ( \
152 d, \
153 vseq1, \
154 vseq2, \
155 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
156 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
157 ) \
158 /**/
159
160 #define BOOST_VMD_DETAIL_EQUAL_13_WT(vseq1,vseq2,vtype1,vtype2) \
161 BOOST_VMD_IDENTITY_RESULT \
162 ( \
163 BOOST_PP_IIF \
164 ( \
165 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
166 BOOST_VMD_IDENTITY(0), \
167 BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT \
168 ) \
169 (vseq1,vseq2,vtype1,vtype2) \
170 ) \
171 /**/
172
173 #define BOOST_VMD_DETAIL_EQUAL_13_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
174 BOOST_VMD_IDENTITY_RESULT \
175 ( \
176 BOOST_PP_IIF \
177 ( \
178 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
179 BOOST_VMD_IDENTITY(0), \
180 BOOST_VMD_DETAIL_EQUAL_13_WT_CONVERT_D \
181 ) \
182 (d,vseq1,vseq2,vtype1,vtype2) \
183 ) \
184 /**/
185
186 #define BOOST_VMD_DETAIL_EQUAL_13_GTYPE(vseq1,vseq2) \
187 BOOST_VMD_DETAIL_EQUAL_13_WT \
188 ( \
189 vseq1, \
190 vseq2, \
191 BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
192 BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
193 ) \
194 /**/
195
196 #define BOOST_VMD_DETAIL_EQUAL_13_GTYPE_D(d,vseq1,vseq2) \
197 BOOST_VMD_DETAIL_EQUAL_13_WT_D \
198 ( \
199 d, \
200 vseq1, \
201 vseq2, \
202 BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
203 BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
204 ) \
205 /**/
206
207 #define BOOST_VMD_DETAIL_EQUAL_13_EBP(vseq1,vseq2,be1,be2) \
208 BOOST_VMD_IDENTITY_RESULT \
209 ( \
210 BOOST_PP_IIF \
211 ( \
212 BOOST_PP_BITAND \
213 ( \
214 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
215 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
216 ), \
217 BOOST_VMD_DETAIL_EQUAL_13_GTYPE, \
218 BOOST_VMD_IDENTITY(0) \
219 ) \
220 (vseq1,vseq2) \
221 ) \
222 /**/
223
224 #define BOOST_VMD_DETAIL_EQUAL_13_EBP_D(d,vseq1,vseq2,be1,be2) \
225 BOOST_VMD_IDENTITY_RESULT \
226 ( \
227 BOOST_PP_IIF \
228 ( \
229 BOOST_PP_BITAND \
230 ( \
231 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
232 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
233 ), \
234 BOOST_VMD_DETAIL_EQUAL_13_GTYPE_D, \
235 BOOST_VMD_IDENTITY(0) \
236 ) \
237 (d,vseq1,vseq2) \
238 ) \
239 /**/
240
241 #define BOOST_VMD_DETAIL_EQUAL_13_EMPTY(vseq1,vseq2,be1,be2) \
242 BOOST_PP_IIF \
243 ( \
244 BOOST_PP_BITAND(be1,be2), \
245 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
246 BOOST_VMD_DETAIL_EQUAL_13_EBP \
247 ) \
248 (vseq1,vseq2,be1,be2) \
249 /**/
250
251 #define BOOST_VMD_DETAIL_EQUAL_13_EMPTY_D(d,vseq1,vseq2,be1,be2) \
252 BOOST_PP_IIF \
253 ( \
254 BOOST_PP_BITAND(be1,be2), \
255 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
256 BOOST_VMD_DETAIL_EQUAL_13_EBP_D \
257 ) \
258 (d,vseq1,vseq2,be1,be2) \
259 /**/
260
261 #define BOOST_VMD_DETAIL_EQUAL_13(vseq1,vseq2) \
262 BOOST_VMD_DETAIL_EQUAL_13_EMPTY \
263 ( \
264 vseq1, \
265 vseq2, \
266 BOOST_VMD_IS_EMPTY(vseq1), \
267 BOOST_VMD_IS_EMPTY(vseq2) \
268 ) \
269 /**/
270
271 #define BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2) \
272 BOOST_VMD_DETAIL_EQUAL_13_EMPTY_D \
273 ( \
274 d, \
275 vseq1, \
276 vseq2, \
277 BOOST_VMD_IS_EMPTY(vseq1), \
278 BOOST_VMD_IS_EMPTY(vseq2) \
279 ) \
280 /**/
281
282 #endif /* BOOST_VMD_DETAIL_EQUAL_13_HPP */