]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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_HPP) | |
8 | #define BOOST_VMD_DETAIL_EQUAL_HPP | |
9 | ||
10 | #include <boost/preprocessor/cat.hpp> | |
11 | #include <boost/preprocessor/detail/auto_rec.hpp> | |
12 | #include <boost/preprocessor/facilities/empty.hpp> | |
13 | #include <boost/preprocessor/facilities/overload.hpp> | |
14 | #include <boost/preprocessor/logical/compl.hpp> | |
15 | #include <boost/vmd/detail/recurse/equal/equal_headers.hpp> | |
16 | #include <boost/vmd/is_identifier.hpp> | |
17 | #include <boost/vmd/is_empty_list.hpp> | |
18 | #include <boost/vmd/detail/not_empty.hpp> | |
19 | ||
20 | #include <boost/vmd/detail/recurse/equal/equal_1.hpp> | |
21 | #include <boost/vmd/detail/recurse/equal/equal_2.hpp> | |
22 | #include <boost/vmd/detail/recurse/equal/equal_3.hpp> | |
23 | #include <boost/vmd/detail/recurse/equal/equal_4.hpp> | |
24 | #include <boost/vmd/detail/recurse/equal/equal_5.hpp> | |
25 | #include <boost/vmd/detail/recurse/equal/equal_6.hpp> | |
26 | #include <boost/vmd/detail/recurse/equal/equal_7.hpp> | |
27 | #include <boost/vmd/detail/recurse/equal/equal_8.hpp> | |
28 | #include <boost/vmd/detail/recurse/equal/equal_9.hpp> | |
29 | #include <boost/vmd/detail/recurse/equal/equal_10.hpp> | |
30 | #include <boost/vmd/detail/recurse/equal/equal_11.hpp> | |
31 | #include <boost/vmd/detail/recurse/equal/equal_12.hpp> | |
32 | #include <boost/vmd/detail/recurse/equal/equal_13.hpp> | |
33 | #include <boost/vmd/detail/recurse/equal/equal_14.hpp> | |
34 | #include <boost/vmd/detail/recurse/equal/equal_15.hpp> | |
35 | #include <boost/vmd/detail/recurse/equal/equal_16.hpp> | |
36 | ||
37 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_1(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_1_D(d,vseq1,vseq2) | |
38 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_2(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_2_D(d,vseq1,vseq2) | |
39 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_3(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_3_D(d,vseq1,vseq2) | |
40 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_4(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_4_D(d,vseq1,vseq2) | |
41 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_5(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_5_D(d,vseq1,vseq2) | |
42 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_6(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2) | |
43 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_7(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_7_D(d,vseq1,vseq2) | |
44 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_8(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_8_D(d,vseq1,vseq2) | |
45 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_9(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_9_D(d,vseq1,vseq2) | |
46 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_10(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_10_D(d,vseq1,vseq2) | |
47 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_11(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_11_D(d,vseq1,vseq2) | |
48 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_12(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_12_D(d,vseq1,vseq2) | |
49 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_13(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2) | |
50 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_14(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_14_D(d,vseq1,vseq2) | |
51 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_15(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_15_D(d,vseq1,vseq2) | |
52 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_16(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_16_D(d,vseq1,vseq2) | |
53 | ||
54 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D(n) \ | |
55 | BOOST_VMD_DETAIL_EQUAL_IS_1 \ | |
56 | ( \ | |
57 | BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_ ## n(1,,) \ | |
58 | ) \ | |
59 | /**/ | |
60 | ||
61 | #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \ | |
62 | BOOST_PP_CAT \ | |
63 | ( \ | |
64 | BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_, \ | |
65 | BOOST_PP_AUTO_REC(BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D,16) \ | |
66 | ) \ | |
67 | /**/ | |
68 | ||
69 | ||
70 | #define BOOST_VMD_DETAIL_EQUAL_CNI_CHK(vseq1,vseq2,vtype) \ | |
71 | BOOST_PP_IIF \ | |
72 | ( \ | |
73 | BOOST_PP_BITOR \ | |
74 | ( \ | |
75 | BOOST_PP_BITOR \ | |
76 | ( \ | |
77 | BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \ | |
78 | BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \ | |
79 | ), \ | |
80 | BOOST_PP_BITOR \ | |
81 | ( \ | |
82 | BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \ | |
83 | BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \ | |
84 | ) \ | |
85 | ), \ | |
86 | BOOST_VMD_DETAIL_DATA_EQUAL, \ | |
87 | BOOST_VMD_DETAIL_EQUAL_CNI_SMP \ | |
88 | ) \ | |
89 | (vseq1,vseq2,vtype) \ | |
90 | /**/ | |
91 | ||
92 | #define BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D(d,vseq1,vseq2,vtype) \ | |
93 | BOOST_PP_IIF \ | |
94 | ( \ | |
95 | BOOST_PP_BITOR \ | |
96 | ( \ | |
97 | BOOST_PP_BITOR \ | |
98 | ( \ | |
99 | BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \ | |
100 | BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \ | |
101 | ), \ | |
102 | BOOST_PP_BITOR \ | |
103 | ( \ | |
104 | BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \ | |
105 | BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \ | |
106 | ) \ | |
107 | ), \ | |
108 | BOOST_VMD_DETAIL_DATA_EQUAL_D, \ | |
109 | BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \ | |
110 | ) \ | |
111 | (d,vseq1,vseq2,vtype) \ | |
112 | /**/ | |
113 | ||
114 | #define BOOST_VMD_DETAIL_EQUAL_VSEQ(vseq1,vseq2,vtype) \ | |
115 | BOOST_VMD_DETAIL_DATA_EQUAL \ | |
116 | ( \ | |
117 | BOOST_VMD_TO_SEQ(vseq1), \ | |
118 | BOOST_VMD_TO_SEQ(vseq2), \ | |
119 | BOOST_VMD_TYPE_SEQ \ | |
120 | ) \ | |
121 | /**/ | |
122 | ||
123 | #define BOOST_VMD_DETAIL_EQUAL_VSEQ_D(d,vseq1,vseq2,vtype) \ | |
124 | BOOST_VMD_DETAIL_DATA_EQUAL_D \ | |
125 | ( \ | |
126 | d, \ | |
127 | BOOST_VMD_TO_SEQ_D(d,vseq1), \ | |
128 | BOOST_VMD_TO_SEQ_D(d,vseq2), \ | |
129 | BOOST_VMD_TYPE_SEQ \ | |
130 | ) \ | |
131 | /**/ | |
132 | ||
133 | #define BOOST_VMD_DETAIL_EQUAL_CNI(vseq1,vseq2,vtype) \ | |
134 | BOOST_PP_IIF \ | |
135 | ( \ | |
136 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
137 | ( \ | |
138 | vtype, \ | |
139 | BOOST_VMD_TYPE_SEQUENCE \ | |
140 | ), \ | |
141 | BOOST_VMD_DETAIL_EQUAL_VSEQ, \ | |
142 | BOOST_VMD_DETAIL_EQUAL_CNI_CHK \ | |
143 | ) \ | |
144 | (vseq1,vseq2,vtype) \ | |
145 | /**/ | |
146 | ||
147 | #define BOOST_VMD_DETAIL_EQUAL_CNI_D(d,vseq1,vseq2,vtype) \ | |
148 | BOOST_PP_IIF \ | |
149 | ( \ | |
150 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
151 | ( \ | |
152 | d, \ | |
153 | vtype, \ | |
154 | BOOST_VMD_TYPE_SEQUENCE \ | |
155 | ), \ | |
156 | BOOST_VMD_DETAIL_EQUAL_VSEQ_D, \ | |
157 | BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D \ | |
158 | ) \ | |
159 | (d,vseq1,vseq2,vtype) \ | |
160 | /**/ | |
161 | ||
162 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE(vseq1,vtype1,type) \ | |
163 | BOOST_PP_BITOR \ | |
164 | ( \ | |
165 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
166 | ( \ | |
167 | BOOST_VMD_TYPE_ARRAY, \ | |
168 | vtype1 \ | |
169 | ), \ | |
170 | BOOST_PP_BITAND \ | |
171 | ( \ | |
172 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
173 | ( \ | |
174 | BOOST_VMD_TYPE_LIST, \ | |
175 | vtype1 \ | |
176 | ), \ | |
177 | BOOST_PP_COMPL \ | |
178 | ( \ | |
179 | BOOST_VMD_IS_EMPTY_LIST(vseq1) \ | |
180 | ) \ | |
181 | ) \ | |
182 | ) \ | |
183 | /**/ | |
184 | ||
185 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D(d,vseq1,vtype1,type) \ | |
186 | BOOST_PP_BITOR \ | |
187 | ( \ | |
188 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
189 | ( \ | |
190 | d, \ | |
191 | BOOST_VMD_TYPE_ARRAY, \ | |
192 | vtype1 \ | |
193 | ), \ | |
194 | BOOST_PP_BITAND \ | |
195 | ( \ | |
196 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
197 | ( \ | |
198 | d, \ | |
199 | BOOST_VMD_TYPE_LIST, \ | |
200 | vtype1 \ | |
201 | ), \ | |
202 | BOOST_PP_COMPL \ | |
203 | ( \ | |
204 | BOOST_VMD_IS_EMPTY_LIST_D(d,vseq1) \ | |
205 | ) \ | |
206 | ) \ | |
207 | ) \ | |
208 | /**/ | |
209 | ||
210 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER(vseq1,vtype1,type) \ | |
211 | BOOST_VMD_IDENTITY_RESULT \ | |
212 | ( \ | |
213 | BOOST_PP_IIF \ | |
214 | ( \ | |
215 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
216 | ( \ | |
217 | BOOST_VMD_TYPE_IDENTIFIER, \ | |
218 | type \ | |
219 | ), \ | |
220 | BOOST_VMD_IS_IDENTIFIER, \ | |
221 | BOOST_VMD_IDENTITY(0) \ | |
222 | ) \ | |
223 | (vseq1) \ | |
224 | ) \ | |
225 | /**/ | |
226 | ||
227 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D(d,vseq1,vtype1,type) \ | |
228 | BOOST_VMD_IDENTITY_RESULT \ | |
229 | ( \ | |
230 | BOOST_PP_IIF \ | |
231 | ( \ | |
232 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
233 | ( \ | |
234 | d, \ | |
235 | BOOST_VMD_TYPE_IDENTIFIER, \ | |
236 | type \ | |
237 | ), \ | |
238 | BOOST_VMD_IS_IDENTIFIER_D, \ | |
239 | BOOST_VMD_IDENTITY(0) \ | |
240 | ) \ | |
241 | (d,vseq1) \ | |
242 | ) \ | |
243 | /**/ | |
244 | ||
245 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK(vseq1,vtype1,type) \ | |
246 | BOOST_PP_IIF \ | |
247 | ( \ | |
248 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
249 | ( \ | |
250 | BOOST_VMD_TYPE_TUPLE, \ | |
251 | type \ | |
252 | ), \ | |
253 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE, \ | |
254 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER \ | |
255 | ) \ | |
256 | (vseq1,vtype1,type) \ | |
257 | /**/ | |
258 | ||
259 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D(d,vseq1,vtype1,type) \ | |
260 | BOOST_PP_IIF \ | |
261 | ( \ | |
262 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
263 | ( \ | |
264 | d, \ | |
265 | BOOST_VMD_TYPE_TUPLE, \ | |
266 | type \ | |
267 | ), \ | |
268 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D, \ | |
269 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D \ | |
270 | ) \ | |
271 | (d,vseq1,vtype1,type) \ | |
272 | /**/ | |
273 | ||
274 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE(vseq1,vtype1,type) \ | |
275 | BOOST_VMD_IDENTITY_RESULT \ | |
276 | ( \ | |
277 | BOOST_PP_IIF \ | |
278 | ( \ | |
279 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
280 | ( \ | |
281 | vtype1, \ | |
282 | type \ | |
283 | ), \ | |
284 | BOOST_VMD_IDENTITY(1), \ | |
285 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK \ | |
286 | ) \ | |
287 | (vseq1,vtype1,type) \ | |
288 | ) \ | |
289 | /**/ | |
290 | ||
291 | #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D(d,vseq1,vtype1,type) \ | |
292 | BOOST_VMD_IDENTITY_RESULT \ | |
293 | ( \ | |
294 | BOOST_PP_IIF \ | |
295 | ( \ | |
296 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
297 | ( \ | |
298 | d, \ | |
299 | vtype1, \ | |
300 | type \ | |
301 | ), \ | |
302 | BOOST_VMD_IDENTITY(1), \ | |
303 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D \ | |
304 | ) \ | |
305 | (d,vseq1,vtype1,type) \ | |
306 | ) \ | |
307 | /**/ | |
308 | ||
309 | #define BOOST_VMD_DETAIL_EQUAL_WT_CHECK(vseq1,vseq2,vtype1,vtype2,type) \ | |
310 | BOOST_VMD_IDENTITY_RESULT \ | |
311 | ( \ | |
312 | BOOST_PP_IIF \ | |
313 | ( \ | |
314 | BOOST_PP_BITAND \ | |
315 | ( \ | |
316 | BOOST_VMD_DETAIL_EQUAL_TYPE \ | |
317 | ( \ | |
318 | vtype1, \ | |
319 | vtype2 \ | |
320 | ), \ | |
321 | BOOST_VMD_IDENTITY_RESULT \ | |
322 | ( \ | |
323 | BOOST_PP_IIF \ | |
324 | ( \ | |
325 | BOOST_VMD_DETAIL_NOT_EMPTY(type), \ | |
326 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE, \ | |
327 | BOOST_VMD_IDENTITY(1) \ | |
328 | ) \ | |
329 | (vseq1,vtype1,type) \ | |
330 | ) \ | |
331 | ), \ | |
332 | BOOST_VMD_DETAIL_EQUAL_CNI, \ | |
333 | BOOST_VMD_IDENTITY(0) \ | |
334 | ) \ | |
335 | (vseq1,vseq2,vtype1) \ | |
336 | ) \ | |
337 | /**/ | |
338 | ||
339 | #define BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2,type) \ | |
340 | BOOST_VMD_IDENTITY_RESULT \ | |
341 | ( \ | |
342 | BOOST_PP_IIF \ | |
343 | ( \ | |
344 | BOOST_PP_BITAND \ | |
345 | ( \ | |
346 | BOOST_VMD_DETAIL_EQUAL_TYPE_D \ | |
347 | ( \ | |
348 | d, \ | |
349 | vtype1, \ | |
350 | vtype2 \ | |
351 | ), \ | |
352 | BOOST_VMD_IDENTITY_RESULT \ | |
353 | ( \ | |
354 | BOOST_PP_IIF \ | |
355 | ( \ | |
356 | BOOST_VMD_DETAIL_NOT_EMPTY(type), \ | |
357 | BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D, \ | |
358 | BOOST_VMD_IDENTITY(1) \ | |
359 | ) \ | |
360 | (d,vseq1,vtype1,type) \ | |
361 | ) \ | |
362 | ), \ | |
363 | BOOST_VMD_DETAIL_EQUAL_CNI_D, \ | |
364 | BOOST_VMD_IDENTITY(0) \ | |
365 | ) \ | |
366 | (d,vseq1,vseq2,vtype1) \ | |
367 | ) \ | |
368 | /**/ | |
369 | ||
370 | #define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT(vseq1,vseq2,vtype1,vtype2,type) \ | |
371 | BOOST_VMD_DETAIL_EQUAL_WT_CHECK \ | |
372 | ( \ | |
373 | vseq1, \ | |
374 | vseq2, \ | |
375 | BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \ | |
376 | BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2), \ | |
377 | type \ | |
378 | ) \ | |
379 | /**/ | |
380 | ||
381 | #define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2,type) \ | |
382 | BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D \ | |
383 | ( \ | |
384 | d, \ | |
385 | vseq1, \ | |
386 | vseq2, \ | |
387 | BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \ | |
388 | BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2), \ | |
389 | type \ | |
390 | ) \ | |
391 | /**/ | |
392 | ||
393 | #define BOOST_VMD_DETAIL_EQUAL_WT(vseq1,vseq2,vtype1,vtype2,type) \ | |
394 | BOOST_VMD_IDENTITY_RESULT \ | |
395 | ( \ | |
396 | BOOST_PP_IIF \ | |
397 | ( \ | |
398 | BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \ | |
399 | BOOST_VMD_IDENTITY(0), \ | |
400 | BOOST_VMD_DETAIL_EQUAL_WT_CONVERT \ | |
401 | ) \ | |
402 | (vseq1,vseq2,vtype1,vtype2,type) \ | |
403 | ) \ | |
404 | /**/ | |
405 | ||
406 | #define BOOST_VMD_DETAIL_EQUAL_WT_D(d,vseq1,vseq2,vtype1,vtype2,type) \ | |
407 | BOOST_VMD_IDENTITY_RESULT \ | |
408 | ( \ | |
409 | BOOST_PP_IIF \ | |
410 | ( \ | |
411 | BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \ | |
412 | BOOST_VMD_IDENTITY(0), \ | |
413 | BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D \ | |
414 | ) \ | |
415 | (d,vseq1,vseq2,vtype1,vtype2,type) \ | |
416 | ) \ | |
417 | /**/ | |
418 | ||
419 | #define BOOST_VMD_DETAIL_EQUAL_GTYPE(vseq1,vseq2,type) \ | |
420 | BOOST_VMD_DETAIL_EQUAL_WT \ | |
421 | ( \ | |
422 | vseq1, \ | |
423 | vseq2, \ | |
424 | BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \ | |
425 | BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \ | |
426 | type \ | |
427 | ) \ | |
428 | /**/ | |
429 | ||
430 | #define BOOST_VMD_DETAIL_EQUAL_GTYPE_D(d,vseq1,vseq2,type) \ | |
431 | BOOST_VMD_DETAIL_EQUAL_WT_D \ | |
432 | ( \ | |
433 | d, \ | |
434 | vseq1, \ | |
435 | vseq2, \ | |
436 | BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \ | |
437 | BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \ | |
438 | type \ | |
439 | ) \ | |
440 | /**/ | |
441 | ||
442 | #define BOOST_VMD_DETAIL_EQUAL_EBP(vseq1,vseq2,be1,be2,type) \ | |
443 | BOOST_VMD_IDENTITY_RESULT \ | |
444 | ( \ | |
445 | BOOST_PP_IIF \ | |
446 | ( \ | |
447 | BOOST_PP_BITAND \ | |
448 | ( \ | |
449 | BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \ | |
450 | BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \ | |
451 | ), \ | |
452 | BOOST_VMD_DETAIL_EQUAL_GTYPE, \ | |
453 | BOOST_VMD_IDENTITY(0) \ | |
454 | ) \ | |
455 | (vseq1,vseq2,type) \ | |
456 | ) \ | |
457 | /**/ | |
458 | ||
459 | #define BOOST_VMD_DETAIL_EQUAL_EBP_D(d,vseq1,vseq2,be1,be2,type) \ | |
460 | BOOST_VMD_IDENTITY_RESULT \ | |
461 | ( \ | |
462 | BOOST_PP_IIF \ | |
463 | ( \ | |
464 | BOOST_PP_BITAND \ | |
465 | ( \ | |
466 | BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \ | |
467 | BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \ | |
468 | ), \ | |
469 | BOOST_VMD_DETAIL_EQUAL_GTYPE_D, \ | |
470 | BOOST_VMD_IDENTITY(0) \ | |
471 | ) \ | |
472 | (d,vseq1,vseq2,type) \ | |
473 | ) \ | |
474 | /**/ | |
475 | ||
476 | #define BOOST_VMD_DETAIL_EQUAL_EMPTY(vseq1,vseq2,be1,be2,type) \ | |
477 | BOOST_PP_IIF \ | |
478 | ( \ | |
479 | BOOST_PP_BITAND(be1,be2), \ | |
480 | BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \ | |
481 | BOOST_VMD_DETAIL_EQUAL_EBP \ | |
482 | ) \ | |
483 | (vseq1,vseq2,be1,be2,type) \ | |
484 | /**/ | |
485 | ||
486 | #define BOOST_VMD_DETAIL_EQUAL_EMPTY_D(d,vseq1,vseq2,be1,be2,type) \ | |
487 | BOOST_PP_IIF \ | |
488 | ( \ | |
489 | BOOST_PP_BITAND(be1,be2), \ | |
490 | BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \ | |
491 | BOOST_VMD_DETAIL_EQUAL_EBP_D \ | |
492 | ) \ | |
493 | (d,vseq1,vseq2,be1,be2,type) \ | |
494 | /**/ | |
495 | ||
20effc67 TL |
496 | #define BOOST_VMD_DETAIL_EQUAL_OV0(vseq1,vseq2) \ |
497 | BOOST_VMD_DETAIL_EQUAL_EMPTY \ | |
498 | ( \ | |
499 | vseq1, \ | |
500 | , \ | |
501 | BOOST_VMD_IS_EMPTY(vseq1), \ | |
502 | 1, \ | |
503 | ) \ | |
504 | /**/ | |
505 | ||
7c673cae FG |
506 | #define BOOST_VMD_DETAIL_EQUAL_OV1(vseq1,vseq2) \ |
507 | BOOST_VMD_DETAIL_EQUAL_EMPTY \ | |
508 | ( \ | |
509 | vseq1, \ | |
510 | vseq2, \ | |
511 | BOOST_VMD_IS_EMPTY(vseq1), \ | |
512 | BOOST_VMD_IS_EMPTY(vseq2), \ | |
513 | ) \ | |
514 | /**/ | |
515 | ||
516 | #define BOOST_VMD_DETAIL_EQUAL_OV2(vseq1,vseq2,type) \ | |
517 | BOOST_VMD_DETAIL_EQUAL_EMPTY \ | |
518 | ( \ | |
519 | vseq1, \ | |
520 | vseq2, \ | |
521 | BOOST_VMD_IS_EMPTY(vseq1), \ | |
522 | BOOST_VMD_IS_EMPTY(vseq2), \ | |
523 | type \ | |
524 | ) \ | |
525 | /**/ | |
526 | ||
20effc67 TL |
527 | #define BOOST_VMD_DETAIL_EQUAL_D_OV0(d,vseq1,vseq2) \ |
528 | BOOST_VMD_DETAIL_EQUAL_EMPTY_D \ | |
529 | ( \ | |
530 | d, \ | |
531 | vseq1, \ | |
532 | , \ | |
533 | BOOST_VMD_IS_EMPTY(vseq1), \ | |
534 | 1, \ | |
535 | ) \ | |
536 | /**/ | |
537 | ||
7c673cae FG |
538 | #define BOOST_VMD_DETAIL_EQUAL_D_OV1(d,vseq1,vseq2) \ |
539 | BOOST_VMD_DETAIL_EQUAL_EMPTY_D \ | |
540 | ( \ | |
541 | d, \ | |
542 | vseq1, \ | |
543 | vseq2, \ | |
544 | BOOST_VMD_IS_EMPTY(vseq1), \ | |
545 | BOOST_VMD_IS_EMPTY(vseq2), \ | |
546 | ) \ | |
547 | /**/ | |
548 | ||
549 | #define BOOST_VMD_DETAIL_EQUAL_D_OV2(d,vseq1,vseq2,type) \ | |
550 | BOOST_VMD_DETAIL_EQUAL_EMPTY_D \ | |
551 | ( \ | |
552 | d, \ | |
553 | vseq1, \ | |
554 | vseq2, \ | |
555 | BOOST_VMD_IS_EMPTY(vseq1), \ | |
556 | BOOST_VMD_IS_EMPTY(vseq2), \ | |
557 | type \ | |
558 | ) \ | |
559 | /**/ | |
560 | ||
561 | #if BOOST_VMD_MSVC | |
562 | ||
563 | #define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \ | |
564 | BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \ | |
565 | /**/ | |
566 | ||
567 | #define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \ | |
568 | BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \ | |
569 | /**/ | |
570 | ||
571 | #else | |
572 | ||
573 | #define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \ | |
574 | BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__) \ | |
575 | /**/ | |
576 | ||
577 | #define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \ | |
578 | BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__) \ | |
579 | /**/ | |
580 | ||
581 | #endif | |
582 | ||
583 | #endif /* BOOST_VMD_DETAIL_EQUAL_HPP */ |