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).
7 #if !defined(BOOST_VMD_DETAIL_EQUAL_6_HPP)
8 #define BOOST_VMD_DETAIL_EQUAL_6_HPP
10 #include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
12 #define BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK(vseq1,vseq2,vtype) \
19 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
20 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
24 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
25 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
28 BOOST_VMD_DETAIL_DATA_EQUAL_6, \
29 BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
34 #define BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK_D(d,vseq1,vseq2,vtype) \
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) \
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) \
50 BOOST_VMD_DETAIL_DATA_EQUAL_6_D, \
51 BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
53 (d,vseq1,vseq2,vtype) \
56 #define BOOST_VMD_DETAIL_EQUAL_6_VSEQ(vseq1,vseq2,vtype) \
57 BOOST_VMD_DETAIL_DATA_EQUAL_6 \
59 BOOST_VMD_TO_SEQ(vseq1), \
60 BOOST_VMD_TO_SEQ(vseq2), \
65 #define BOOST_VMD_DETAIL_EQUAL_6_VSEQ_D(d,vseq1,vseq2,vtype) \
66 BOOST_VMD_DETAIL_DATA_EQUAL_6_D \
69 BOOST_VMD_TO_SEQ_D(d,vseq1), \
70 BOOST_VMD_TO_SEQ_D(d,vseq2), \
75 #define BOOST_VMD_DETAIL_EQUAL_6_CNI(vseq1,vseq2,vtype) \
78 BOOST_VMD_DETAIL_EQUAL_TYPE \
81 BOOST_VMD_TYPE_SEQUENCE \
83 BOOST_VMD_DETAIL_EQUAL_6_VSEQ, \
84 BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK \
89 #define BOOST_VMD_DETAIL_EQUAL_6_CNI_D(d,vseq1,vseq2,vtype) \
92 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
96 BOOST_VMD_TYPE_SEQUENCE \
98 BOOST_VMD_DETAIL_EQUAL_6_VSEQ_D, \
99 BOOST_VMD_DETAIL_EQUAL_6_CNI_CHK_D \
101 (d,vseq1,vseq2,vtype) \
104 #define BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK(vseq1,vseq2,vtype1,vtype2) \
105 BOOST_VMD_IDENTITY_RESULT \
109 BOOST_VMD_DETAIL_EQUAL_TYPE \
114 BOOST_VMD_DETAIL_EQUAL_6_CNI, \
115 BOOST_VMD_IDENTITY(0) \
117 (vseq1,vseq2,vtype1) \
121 #define BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2) \
122 BOOST_VMD_IDENTITY_RESULT \
126 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
132 BOOST_VMD_DETAIL_EQUAL_6_CNI_D, \
133 BOOST_VMD_IDENTITY(0) \
135 (d,vseq1,vseq2,vtype1) \
139 #define BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT(vseq1,vseq2,vtype1,vtype2) \
140 BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK \
144 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
145 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2) \
149 #define BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2) \
150 BOOST_VMD_DETAIL_EQUAL_6_WT_CHECK_D \
155 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
156 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2) \
160 #define BOOST_VMD_DETAIL_EQUAL_6_WT(vseq1,vseq2,vtype1,vtype2) \
161 BOOST_VMD_IDENTITY_RESULT \
165 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
166 BOOST_VMD_IDENTITY(0), \
167 BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT \
169 (vseq1,vseq2,vtype1,vtype2) \
173 #define BOOST_VMD_DETAIL_EQUAL_6_WT_D(d,vseq1,vseq2,vtype1,vtype2) \
174 BOOST_VMD_IDENTITY_RESULT \
178 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
179 BOOST_VMD_IDENTITY(0), \
180 BOOST_VMD_DETAIL_EQUAL_6_WT_CONVERT_D \
182 (d,vseq1,vseq2,vtype1,vtype2) \
186 #define BOOST_VMD_DETAIL_EQUAL_6_GTYPE(vseq1,vseq2) \
187 BOOST_VMD_DETAIL_EQUAL_6_WT \
191 BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
192 BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE) \
196 #define BOOST_VMD_DETAIL_EQUAL_6_GTYPE_D(d,vseq1,vseq2) \
197 BOOST_VMD_DETAIL_EQUAL_6_WT_D \
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) \
207 #define BOOST_VMD_DETAIL_EQUAL_6_EBP(vseq1,vseq2,be1,be2) \
208 BOOST_VMD_IDENTITY_RESULT \
214 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
215 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
217 BOOST_VMD_DETAIL_EQUAL_6_GTYPE, \
218 BOOST_VMD_IDENTITY(0) \
224 #define BOOST_VMD_DETAIL_EQUAL_6_EBP_D(d,vseq1,vseq2,be1,be2) \
225 BOOST_VMD_IDENTITY_RESULT \
231 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
232 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
234 BOOST_VMD_DETAIL_EQUAL_6_GTYPE_D, \
235 BOOST_VMD_IDENTITY(0) \
241 #define BOOST_VMD_DETAIL_EQUAL_6_EMPTY(vseq1,vseq2,be1,be2) \
244 BOOST_PP_BITAND(be1,be2), \
245 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
246 BOOST_VMD_DETAIL_EQUAL_6_EBP \
248 (vseq1,vseq2,be1,be2) \
251 #define BOOST_VMD_DETAIL_EQUAL_6_EMPTY_D(d,vseq1,vseq2,be1,be2) \
254 BOOST_PP_BITAND(be1,be2), \
255 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
256 BOOST_VMD_DETAIL_EQUAL_6_EBP_D \
258 (d,vseq1,vseq2,be1,be2) \
261 #define BOOST_VMD_DETAIL_EQUAL_6(vseq1,vseq2) \
262 BOOST_VMD_DETAIL_EQUAL_6_EMPTY \
266 BOOST_VMD_IS_EMPTY(vseq1), \
267 BOOST_VMD_IS_EMPTY(vseq2) \
271 #define BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2) \
272 BOOST_VMD_DETAIL_EQUAL_6_EMPTY_D \
277 BOOST_VMD_IS_EMPTY(vseq1), \
278 BOOST_VMD_IS_EMPTY(vseq2) \
282 #endif /* BOOST_VMD_DETAIL_EQUAL_6_HPP */