]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/vmd/detail/match_identifier.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / vmd / detail / match_identifier.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_MATCH_IDENTIFIER_HPP)
8 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_HPP
9
10 #include <boost/preprocessor/arithmetic/inc.hpp>
11 #include <boost/preprocessor/cat.hpp>
12 #include <boost/preprocessor/comparison/equal.hpp>
13 #include <boost/preprocessor/comparison/not_equal.hpp>
14 #include <boost/preprocessor/control/iif.hpp>
15 #include <boost/preprocessor/control/while.hpp>
16 #include <boost/preprocessor/logical/bitand.hpp>
17 #include <boost/preprocessor/tuple/elem.hpp>
18 #include <boost/preprocessor/tuple/replace.hpp>
19 #include <boost/preprocessor/tuple/size.hpp>
20 #include <boost/vmd/is_empty.hpp>
21 #include <boost/vmd/detail/idprefix.hpp>
22 #include <boost/vmd/detail/match_identifier_common.hpp>
23
24 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_ID(state) \
25 BOOST_PP_TUPLE_ELEM(0,state) \
26 /**/
27
28 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE(state) \
29 BOOST_PP_TUPLE_ELEM(1,state) \
30 /**/
31
32 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE_SIZE(state) \
33 BOOST_PP_TUPLE_ELEM(2,state) \
34 /**/
35
36 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_CURRENT(state) \
37 BOOST_PP_TUPLE_ELEM \
38 ( \
39 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state), \
40 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE(state) \
41 ) \
42 /**/
43
44 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state) \
45 BOOST_PP_TUPLE_ELEM(3,state) \
46 /**/
47
48 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_RESULT(state) \
49 BOOST_PP_TUPLE_ELEM(4,state) \
50 /**/
51
52 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_PRED(d,state) \
53 BOOST_PP_BITAND \
54 ( \
55 BOOST_PP_EQUAL_D \
56 ( \
57 d, \
58 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_RESULT(state), \
59 0 \
60 ), \
61 BOOST_PP_NOT_EQUAL_D \
62 ( \
63 d, \
64 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state), \
65 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_TUPLE_SIZE(state) \
66 ) \
67 ) \
68 /**/
69
70 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_FOUND(d,state) \
71 BOOST_PP_TUPLE_REPLACE_D \
72 ( \
73 d, \
74 state, \
75 4, \
76 BOOST_PP_INC \
77 ( \
78 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state) \
79 ) \
80 ) \
81 /**/
82
83 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CONTINUE(d,state) \
84 BOOST_PP_TUPLE_REPLACE_D \
85 ( \
86 d, \
87 state, \
88 3, \
89 BOOST_PP_INC \
90 ( \
91 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_INDEX(state) \
92 ) \
93 ) \
94 /**/
95
96 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP(d,state) \
97 BOOST_PP_IIF \
98 ( \
99 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CMP_IDS \
100 ( \
101 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_ID(state), \
102 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_STATE_KEY_CURRENT(state) \
103 ), \
104 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_FOUND, \
105 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP_CONTINUE \
106 ) \
107 (d,state) \
108 /**/
109
110 /*
111
112 Return index starting with 1 of the tuple id the identifier matches, or 0 if there are no matches.
113
114 */
115
116 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER(id,keytuple) \
117 BOOST_PP_TUPLE_ELEM \
118 ( \
119 4, \
120 BOOST_PP_WHILE \
121 ( \
122 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_PRED, \
123 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP, \
124 ( \
125 id, \
126 keytuple, \
127 BOOST_PP_TUPLE_SIZE(keytuple), \
128 0, \
129 0 \
130 ) \
131 ) \
132 ) \
133 /**/
134
135 /*
136
137 Return index starting with 1 of the tuple id the identifier matches, or 0 if there are no matches.
138
139 */
140
141 #define BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D(d,id,keytuple) \
142 BOOST_PP_TUPLE_ELEM \
143 ( \
144 4, \
145 BOOST_PP_WHILE_ ## d \
146 ( \
147 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_PRED, \
148 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_OP, \
149 ( \
150 id, \
151 keytuple, \
152 BOOST_PP_TUPLE_SIZE(keytuple), \
153 0, \
154 0 \
155 ) \
156 ) \
157 ) \
158 /**/
159
160 #endif /* BOOST_VMD_DETAIL_MATCH_IDENTIFIER_HPP */