]>
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_16_HPP) | |
8 | #define BOOST_VMD_DETAIL_EQUAL_16_HPP | |
9 | ||
10 | #include <boost/vmd/detail/recurse/equal/equal_headers.hpp> | |
11 | ||
12 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16, \ | |
29 | BOOST_VMD_DETAIL_EQUAL_CNI_SMP \ | |
30 | ) \ | |
31 | (vseq1,vseq2,vtype) \ | |
32 | /**/ | |
33 | ||
34 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_D, \ | |
51 | BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \ | |
52 | ) \ | |
53 | (d,vseq1,vseq2,vtype) \ | |
54 | /**/ | |
55 | ||
56 | #define BOOST_VMD_DETAIL_EQUAL_16_VSEQ(vseq1,vseq2,vtype) \ | |
57 | BOOST_VMD_DETAIL_DATA_EQUAL_16 \ | |
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_16_VSEQ_D(d,vseq1,vseq2,vtype) \ | |
66 | BOOST_VMD_DETAIL_DATA_EQUAL_16_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_16_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_16_VSEQ, \ | |
84 | BOOST_VMD_DETAIL_EQUAL_16_CNI_CHK \ | |
85 | ) \ | |
86 | (vseq1,vseq2,vtype) \ | |
87 | /**/ | |
88 | ||
89 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_VSEQ_D, \ | |
99 | BOOST_VMD_DETAIL_EQUAL_16_CNI_CHK_D \ | |
100 | ) \ | |
101 | (d,vseq1,vseq2,vtype) \ | |
102 | /**/ | |
103 | ||
104 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_CNI, \ | |
115 | BOOST_VMD_IDENTITY(0) \ | |
116 | ) \ | |
117 | (vseq1,vseq2,vtype1) \ | |
118 | ) \ | |
119 | /**/ | |
120 | ||
121 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_CNI_D, \ | |
133 | BOOST_VMD_IDENTITY(0) \ | |
134 | ) \ | |
135 | (d,vseq1,vseq2,vtype1) \ | |
136 | ) \ | |
137 | /**/ | |
138 | ||
139 | #define BOOST_VMD_DETAIL_EQUAL_16_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \ | |
140 | BOOST_VMD_DETAIL_EQUAL_16_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_16_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \ | |
150 | BOOST_VMD_DETAIL_EQUAL_16_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_16_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_16_WT_CONVERT \ | |
168 | ) \ | |
169 | (vseq1,vseq2,vtype1,vtype2) \ | |
170 | ) \ | |
171 | /**/ | |
172 | ||
173 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_WT_CONVERT_D \ | |
181 | ) \ | |
182 | (d,vseq1,vseq2,vtype1,vtype2) \ | |
183 | ) \ | |
184 | /**/ | |
185 | ||
186 | #define BOOST_VMD_DETAIL_EQUAL_16_GTYPE(vseq1,vseq2) \ | |
187 | BOOST_VMD_DETAIL_EQUAL_16_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_16_GTYPE_D(d,vseq1,vseq2) \ | |
197 | BOOST_VMD_DETAIL_EQUAL_16_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_16_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_16_GTYPE, \ | |
218 | BOOST_VMD_IDENTITY(0) \ | |
219 | ) \ | |
220 | (vseq1,vseq2) \ | |
221 | ) \ | |
222 | /**/ | |
223 | ||
224 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_GTYPE_D, \ | |
235 | BOOST_VMD_IDENTITY(0) \ | |
236 | ) \ | |
237 | (d,vseq1,vseq2) \ | |
238 | ) \ | |
239 | /**/ | |
240 | ||
241 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_EBP \ | |
247 | ) \ | |
248 | (vseq1,vseq2,be1,be2) \ | |
249 | /**/ | |
250 | ||
251 | #define BOOST_VMD_DETAIL_EQUAL_16_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_16_EBP_D \ | |
257 | ) \ | |
258 | (d,vseq1,vseq2,be1,be2) \ | |
259 | /**/ | |
260 | ||
261 | #define BOOST_VMD_DETAIL_EQUAL_16(vseq1,vseq2) \ | |
262 | BOOST_VMD_DETAIL_EQUAL_16_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_16_D(d,vseq1,vseq2) \ | |
272 | BOOST_VMD_DETAIL_EQUAL_16_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_16_HPP */ |