]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/vmd/include/boost/vmd/detail/recurse/equal/equal_2.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / vmd / include / boost / vmd / detail / recurse / equal / equal_2.hpp
CommitLineData
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_2_HPP)
8#define BOOST_VMD_DETAIL_EQUAL_2_HPP
9
10#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
11
12#define BOOST_VMD_DETAIL_EQUAL_2_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_2, \
29 BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
30 ) \
31 (vseq1,vseq2,vtype) \
32/**/
33
34#define BOOST_VMD_DETAIL_EQUAL_2_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_2_D, \
51 BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
52 ) \
53 (d,vseq1,vseq2,vtype) \
54/**/
55
56#define BOOST_VMD_DETAIL_EQUAL_2_VSEQ(vseq1,vseq2,vtype) \
57 BOOST_VMD_DETAIL_DATA_EQUAL_2 \
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_2_VSEQ_D(d,vseq1,vseq2,vtype) \
66 BOOST_VMD_DETAIL_DATA_EQUAL_2_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_2_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_2_VSEQ, \
84 BOOST_VMD_DETAIL_EQUAL_2_CNI_CHK \
85 ) \
86 (vseq1,vseq2,vtype) \
87/**/
88
89#define BOOST_VMD_DETAIL_EQUAL_2_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_2_VSEQ_D, \
99 BOOST_VMD_DETAIL_EQUAL_2_CNI_CHK_D \
100 ) \
101 (d,vseq1,vseq2,vtype) \
102/**/
103
104#define BOOST_VMD_DETAIL_EQUAL_2_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_2_CNI, \
115 BOOST_VMD_IDENTITY(0) \
116 ) \
117 (vseq1,vseq2,vtype1) \
118 ) \
119/**/
120
121#define BOOST_VMD_DETAIL_EQUAL_2_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_2_CNI_D, \
133 BOOST_VMD_IDENTITY(0) \
134 ) \
135 (d,vseq1,vseq2,vtype1) \
136 ) \
137/**/
138
139#define BOOST_VMD_DETAIL_EQUAL_2_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
140 BOOST_VMD_DETAIL_EQUAL_2_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_2_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
150 BOOST_VMD_DETAIL_EQUAL_2_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_2_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_2_WT_CONVERT \
168 ) \
169 (vseq1,vseq2,vtype1,vtype2) \
170 ) \
171/**/
172
173#define BOOST_VMD_DETAIL_EQUAL_2_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_2_WT_CONVERT_D \
181 ) \
182 (d,vseq1,vseq2,vtype1,vtype2) \
183 ) \
184/**/
185
186#define BOOST_VMD_DETAIL_EQUAL_2_GTYPE(vseq1,vseq2) \
187 BOOST_VMD_DETAIL_EQUAL_2_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_2_GTYPE_D(d,vseq1,vseq2) \
197 BOOST_VMD_DETAIL_EQUAL_2_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_2_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_2_GTYPE, \
218 BOOST_VMD_IDENTITY(0) \
219 ) \
220 (vseq1,vseq2) \
221 ) \
222/**/
223
224#define BOOST_VMD_DETAIL_EQUAL_2_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_2_GTYPE_D, \
235 BOOST_VMD_IDENTITY(0) \
236 ) \
237 (d,vseq1,vseq2) \
238 ) \
239/**/
240
241#define BOOST_VMD_DETAIL_EQUAL_2_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_2_EBP \
247 ) \
248 (vseq1,vseq2,be1,be2) \
249/**/
250
251#define BOOST_VMD_DETAIL_EQUAL_2_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_2_EBP_D \
257 ) \
258 (d,vseq1,vseq2,be1,be2) \
259/**/
260
261#define BOOST_VMD_DETAIL_EQUAL_2(vseq1,vseq2) \
262 BOOST_VMD_DETAIL_EQUAL_2_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_2_D(d,vseq1,vseq2) \
272 BOOST_VMD_DETAIL_EQUAL_2_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_2_HPP */