]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/vmd/include/boost/vmd/detail/array.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / vmd / include / boost / vmd / detail / array.hpp
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_ARRAY_HPP)
8 #define BOOST_VMD_DETAIL_ARRAY_HPP
9
10 #include <boost/preprocessor/control/expr_iif.hpp>
11 #include <boost/preprocessor/control/iif.hpp>
12 #include <boost/preprocessor/tuple/elem.hpp>
13 #include <boost/preprocessor/variadic/elem.hpp>
14 #include <boost/vmd/empty.hpp>
15 #include <boost/vmd/identity.hpp>
16 #include <boost/vmd/is_empty.hpp>
17 #include <boost/vmd/detail/empty_result.hpp>
18 #include <boost/vmd/detail/is_array_common.hpp>
19 #include <boost/vmd/detail/mods.hpp>
20 #include <boost/vmd/detail/tuple.hpp>
21
22 #define BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY(tuple) \
23 BOOST_VMD_IDENTITY_RESULT \
24 ( \
25 BOOST_PP_IIF \
26 ( \
27 BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX \
28 ( \
29 BOOST_PP_TUPLE_ELEM \
30 ( \
31 0, \
32 tuple \
33 ) \
34 ), \
35 BOOST_VMD_IDENTITY(tuple), \
36 BOOST_VMD_DETAIL_EMPTY_RESULT \
37 ) \
38 (tuple) \
39 ) \
40 /**/
41
42 #define BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY_D(d,tuple) \
43 BOOST_VMD_IDENTITY_RESULT \
44 ( \
45 BOOST_PP_IIF \
46 ( \
47 BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D \
48 ( \
49 d, \
50 BOOST_PP_TUPLE_ELEM \
51 ( \
52 0, \
53 tuple \
54 ) \
55 ), \
56 BOOST_VMD_IDENTITY(tuple), \
57 BOOST_VMD_DETAIL_EMPTY_RESULT \
58 ) \
59 (tuple) \
60 ) \
61 /**/
62
63 #define BOOST_VMD_DETAIL_ARRAY_PROCESS(tuple) \
64 BOOST_PP_IIF \
65 ( \
66 BOOST_VMD_IS_EMPTY \
67 ( \
68 BOOST_PP_TUPLE_ELEM \
69 ( \
70 0, \
71 tuple \
72 ) \
73 ), \
74 BOOST_VMD_DETAIL_EMPTY_RESULT, \
75 BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY \
76 ) \
77 (tuple) \
78 /**/
79
80 #define BOOST_VMD_DETAIL_ARRAY_PROCESS_D(d,tuple) \
81 BOOST_PP_IIF \
82 ( \
83 BOOST_VMD_IS_EMPTY \
84 ( \
85 BOOST_PP_TUPLE_ELEM \
86 ( \
87 0, \
88 tuple \
89 ) \
90 ), \
91 BOOST_VMD_DETAIL_EMPTY_RESULT, \
92 BOOST_VMD_DETAIL_ARRAY_CHECK_FOR_ARRAY_D \
93 ) \
94 (d,tuple) \
95 /**/
96
97 #define BOOST_VMD_DETAIL_ARRAY_SPLIT(param) \
98 BOOST_VMD_DETAIL_ARRAY_PROCESS \
99 ( \
100 BOOST_VMD_DETAIL_TUPLE(param,BOOST_VMD_RETURN_AFTER) \
101 ) \
102 /**/
103
104 #define BOOST_VMD_DETAIL_ARRAY_SPLIT_D(d,param) \
105 BOOST_VMD_DETAIL_ARRAY_PROCESS_D \
106 ( \
107 d, \
108 BOOST_VMD_DETAIL_TUPLE_D(d,param,BOOST_VMD_RETURN_AFTER) \
109 ) \
110 /**/
111
112 #define BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY(tuple) \
113 BOOST_PP_EXPR_IIF \
114 ( \
115 BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX(tuple), \
116 tuple \
117 ) \
118 /**/
119
120 #define BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY_D(d,tuple) \
121 BOOST_PP_EXPR_IIF \
122 ( \
123 BOOST_VMD_DETAIL_IS_ARRAY_SYNTAX_D(d,tuple), \
124 tuple \
125 ) \
126 /**/
127
128 #define BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE(tuple) \
129 BOOST_PP_IIF \
130 ( \
131 BOOST_VMD_IS_EMPTY(tuple), \
132 BOOST_VMD_EMPTY, \
133 BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY \
134 ) \
135 (tuple) \
136 /**/
137
138 #define BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE_D(d,tuple) \
139 BOOST_PP_IIF \
140 ( \
141 BOOST_VMD_IS_EMPTY(tuple), \
142 BOOST_VMD_EMPTY, \
143 BOOST_VMD_DETAIL_ARRAY_BEGIN_CHECK_FOR_ARRAY_D \
144 ) \
145 (d,tuple) \
146 /**/
147
148 #define BOOST_VMD_DETAIL_ARRAY_BEGIN(param) \
149 BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE \
150 ( \
151 BOOST_VMD_DETAIL_TUPLE(param) \
152 ) \
153 /**/
154
155 #define BOOST_VMD_DETAIL_ARRAY_BEGIN_D(d,param) \
156 BOOST_VMD_DETAIL_ARRAY_BEGIN_TUPLE_D \
157 ( \
158 d, \
159 BOOST_VMD_DETAIL_TUPLE_D(d,param) \
160 ) \
161 /**/
162
163 #define BOOST_VMD_DETAIL_ARRAY(...) \
164 BOOST_PP_IIF \
165 ( \
166 BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
167 ( \
168 BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
169 ), \
170 BOOST_VMD_DETAIL_ARRAY_SPLIT, \
171 BOOST_VMD_DETAIL_ARRAY_BEGIN \
172 ) \
173 (BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
174 /**/
175
176 #define BOOST_VMD_DETAIL_ARRAY_D(d,...) \
177 BOOST_PP_IIF \
178 ( \
179 BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER \
180 ( \
181 BOOST_VMD_DETAIL_NEW_MODS(BOOST_VMD_ALLOW_AFTER,__VA_ARGS__) \
182 ), \
183 BOOST_VMD_DETAIL_ARRAY_SPLIT_D, \
184 BOOST_VMD_DETAIL_ARRAY_BEGIN_D \
185 ) \
186 (d,BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
187 /**/
188
189 #endif /* BOOST_VMD_DETAIL_ARRAY_HPP */