]>
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_IS_ARRAY_COMMON_HPP) | |
8 | #define BOOST_VMD_DETAIL_IS_ARRAY_COMMON_HPP | |
9 | ||
10 | #include <boost/preprocessor/cat.hpp> | |
11 | #include <boost/preprocessor/comparison/equal.hpp> | |
12 | #include <boost/preprocessor/control/if.hpp> | |
13 | #include <boost/preprocessor/control/iif.hpp> | |
14 | #include <boost/preprocessor/facilities/empty.hpp> | |
15 | #include <boost/preprocessor/tuple/elem.hpp> | |
16 | #include <boost/preprocessor/tuple/size.hpp> | |
17 | #include <boost/vmd/identity.hpp> | |
18 | #include <boost/vmd/is_empty.hpp> | |
19 | #include <boost/vmd/is_number.hpp> | |
20 | #include <boost/vmd/is_tuple.hpp> | |
21 | #include <boost/vmd/detail/is_empty_tuple.hpp> | |
22 | ||
23 | #define BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX(tuple) \ | |
24 | BOOST_VMD_IDENTITY_RESULT \ | |
25 | ( \ | |
26 | BOOST_PP_IIF \ | |
27 | ( \ | |
28 | BOOST_PP_EQUAL(2,BOOST_PP_TUPLE_SIZE(tuple)), \ | |
29 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM, \ | |
30 | BOOST_VMD_IDENTITY(0) \ | |
31 | ) \ | |
32 | (tuple) \ | |
33 | ) \ | |
34 | /**/ | |
35 | ||
36 | #define BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D(d,tuple) \ | |
37 | BOOST_VMD_IDENTITY_RESULT \ | |
38 | ( \ | |
39 | BOOST_PP_IIF \ | |
40 | ( \ | |
41 | BOOST_PP_EQUAL_D(d,2,BOOST_PP_TUPLE_SIZE(tuple)), \ | |
42 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM_D, \ | |
43 | BOOST_VMD_IDENTITY(0) \ | |
44 | ) \ | |
45 | (d,tuple) \ | |
46 | ) \ | |
47 | /**/ | |
48 | ||
49 | /* | |
50 | ||
51 | Check if the first element of the tuple is equal to the number of tuple elements of the second element | |
52 | ||
53 | */ | |
54 | ||
55 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE(x) \ | |
56 | BOOST_PP_EQUAL(BOOST_PP_TUPLE_ELEM(0,x),BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,x))) \ | |
57 | /**/ | |
58 | ||
59 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE_D(d,x) \ | |
60 | BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_ELEM(0,x),BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,x))) \ | |
61 | /**/ | |
62 | ||
63 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY(tuple) \ | |
64 | BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,tuple)) \ | |
65 | /**/ | |
66 | ||
67 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY_D(d,tuple) \ | |
68 | BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(1,tuple)) \ | |
69 | /**/ | |
70 | ||
71 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH(tuple) \ | |
72 | BOOST_PP_IF \ | |
73 | ( \ | |
74 | BOOST_PP_TUPLE_ELEM(0,tuple), \ | |
75 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE, \ | |
76 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY \ | |
77 | ) \ | |
78 | (tuple) \ | |
79 | /**/ | |
80 | ||
81 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_D(d,tuple) \ | |
82 | BOOST_PP_IF \ | |
83 | ( \ | |
84 | BOOST_PP_TUPLE_ELEM(0,tuple), \ | |
85 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_SIZE_D, \ | |
86 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_EMPTY_D \ | |
87 | ) \ | |
88 | (d,tuple) \ | |
89 | /**/ | |
90 | ||
91 | /* | |
92 | ||
93 | Check if the first element is numeric | |
94 | ||
95 | */ | |
96 | ||
97 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC(tuple) \ | |
98 | BOOST_VMD_IDENTITY_RESULT \ | |
99 | ( \ | |
100 | BOOST_PP_IIF \ | |
101 | ( \ | |
102 | BOOST_VMD_DETAIL_IS_ARRAY_NUM(BOOST_PP_TUPLE_ELEM(0,tuple)), \ | |
103 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH, \ | |
104 | BOOST_VMD_IDENTITY(0) \ | |
105 | ) \ | |
106 | (tuple) \ | |
107 | ) \ | |
108 | /**/ | |
109 | ||
110 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_D(d,tuple) \ | |
111 | BOOST_VMD_IDENTITY_RESULT \ | |
112 | ( \ | |
113 | BOOST_PP_IIF \ | |
114 | ( \ | |
115 | BOOST_VMD_DETAIL_IS_ARRAY_NUM(BOOST_PP_TUPLE_ELEM(0,tuple)), \ | |
116 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_MATCH_D, \ | |
117 | BOOST_VMD_IDENTITY(0) \ | |
118 | ) \ | |
119 | (d,tuple) \ | |
120 | ) \ | |
121 | /**/ | |
122 | ||
123 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER(tuple) \ | |
124 | BOOST_VMD_IDENTITY_RESULT \ | |
125 | ( \ | |
126 | BOOST_PP_IIF \ | |
127 | ( \ | |
128 | BOOST_VMD_IS_NUMBER(BOOST_PP_TUPLE_ELEM(0,tuple)), \ | |
129 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC, \ | |
130 | BOOST_VMD_IDENTITY(0) \ | |
131 | ) \ | |
132 | (tuple) \ | |
133 | ) \ | |
134 | /**/ | |
135 | ||
136 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER_D(d,tuple) \ | |
137 | BOOST_VMD_IDENTITY_RESULT \ | |
138 | ( \ | |
139 | BOOST_PP_IIF \ | |
140 | ( \ | |
141 | BOOST_VMD_IS_NUMBER(BOOST_PP_TUPLE_ELEM(0,tuple)), \ | |
142 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMERIC_D, \ | |
143 | BOOST_VMD_IDENTITY(0) \ | |
144 | ) \ | |
145 | (d,tuple) \ | |
146 | ) \ | |
147 | /**/ | |
148 | ||
149 | /* | |
150 | ||
151 | Check if the second element is a tuple | |
152 | ||
153 | */ | |
154 | ||
155 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM(tuple) \ | |
156 | BOOST_VMD_IDENTITY_RESULT \ | |
157 | ( \ | |
158 | BOOST_PP_IIF \ | |
159 | ( \ | |
160 | BOOST_VMD_IS_TUPLE(BOOST_PP_TUPLE_ELEM(1,tuple)), \ | |
161 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER, \ | |
162 | BOOST_VMD_IDENTITY(0) \ | |
163 | ) \ | |
164 | (tuple) \ | |
165 | ) \ | |
166 | /**/ | |
167 | ||
168 | #define BOOST_VMD_DETAIL_IS_ARRAY_CHECK_ARRAY_FORM_D(d,tuple) \ | |
169 | BOOST_VMD_IDENTITY_RESULT \ | |
170 | ( \ | |
171 | BOOST_PP_IIF \ | |
172 | ( \ | |
173 | BOOST_VMD_IS_TUPLE(BOOST_PP_TUPLE_ELEM(1,tuple)), \ | |
174 | BOOST_VMD_DETAIL_IS_ARRAY_CHECK_NUMBER_D, \ | |
175 | BOOST_VMD_IDENTITY(0) \ | |
176 | ) \ | |
177 | (d,tuple) \ | |
178 | ) \ | |
179 | /**/ | |
180 | ||
181 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM(x) BOOST_VMD_IS_EMPTY(BOOST_PP_CAT(BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_, x) BOOST_PP_EMPTY()) | |
182 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_0 | |
183 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_1 | |
184 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_2 | |
185 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_3 | |
186 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_4 | |
187 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_5 | |
188 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_6 | |
189 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_7 | |
190 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_8 | |
191 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_9 | |
192 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_10 | |
193 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_11 | |
194 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_12 | |
195 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_13 | |
196 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_14 | |
197 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_15 | |
198 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_16 | |
199 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_17 | |
200 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_18 | |
201 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_19 | |
202 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_20 | |
203 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_21 | |
204 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_22 | |
205 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_23 | |
206 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_24 | |
207 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_25 | |
208 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_26 | |
209 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_27 | |
210 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_28 | |
211 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_29 | |
212 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_30 | |
213 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_31 | |
214 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_32 | |
215 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_33 | |
216 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_34 | |
217 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_35 | |
218 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_36 | |
219 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_37 | |
220 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_38 | |
221 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_39 | |
222 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_40 | |
223 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_41 | |
224 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_42 | |
225 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_43 | |
226 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_44 | |
227 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_45 | |
228 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_46 | |
229 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_47 | |
230 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_48 | |
231 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_49 | |
232 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_50 | |
233 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_51 | |
234 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_52 | |
235 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_53 | |
236 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_54 | |
237 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_55 | |
238 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_56 | |
239 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_57 | |
240 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_58 | |
241 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_59 | |
242 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_60 | |
243 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_61 | |
244 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_62 | |
245 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_63 | |
246 | #define BOOST_VMD_DETAIL_IS_ARRAY_NUM_HELPER_64 | |
247 | ||
248 | #endif /* BOOST_VMD_DETAIL_IS_ARRAY_COMMON_HPP */ |