]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/vmd/detail/identifier_type.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / vmd / detail / identifier_type.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_IDENTIFIER_TYPE_HPP)
8 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_HPP
9
10 #include <boost/preprocessor/cat.hpp>
11 #include <boost/preprocessor/comparison/equal.hpp>
12 #include <boost/preprocessor/control/iif.hpp>
13 #include <boost/preprocessor/tuple/elem.hpp>
14 #include <boost/preprocessor/tuple/size.hpp>
15 #include <boost/vmd/identity.hpp>
16 #include <boost/vmd/is_tuple.hpp>
17 #include <boost/vmd/detail/idprefix.hpp>
18 #include <boost/vmd/detail/number_registration.hpp>
19 #include <boost/vmd/detail/type_registration.hpp>
20
21 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCATENATE(id) \
22 BOOST_PP_CAT \
23 ( \
24 BOOST_VMD_DETAIL_IDENTIFIER_SUBTYPE_REGISTRATION_PREFIX, \
25 id \
26 ) \
27 /**/
28
29 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE(cres) \
30 BOOST_VMD_IDENTITY_RESULT \
31 ( \
32 BOOST_PP_IIF \
33 ( \
34 BOOST_PP_EQUAL \
35 ( \
36 BOOST_PP_TUPLE_SIZE(cres), \
37 2 \
38 ), \
39 BOOST_PP_TUPLE_ELEM, \
40 BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
41 ) \
42 (0,cres) \
43 ) \
44 /**/
45
46 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE_D(d,cres) \
47 BOOST_VMD_IDENTITY_RESULT \
48 ( \
49 BOOST_PP_IIF \
50 ( \
51 BOOST_PP_EQUAL_D \
52 ( \
53 d, \
54 BOOST_PP_TUPLE_SIZE(cres), \
55 2 \
56 ), \
57 BOOST_PP_TUPLE_ELEM, \
58 BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
59 ) \
60 (0,cres) \
61 ) \
62 /**/
63
64 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT(cres) \
65 BOOST_VMD_IDENTITY_RESULT \
66 ( \
67 BOOST_PP_IIF \
68 ( \
69 BOOST_VMD_IS_TUPLE(cres), \
70 BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE, \
71 BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
72 ) \
73 (cres) \
74 ) \
75 /**/
76
77 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT_D(d,cres) \
78 BOOST_VMD_IDENTITY_RESULT \
79 ( \
80 BOOST_PP_IIF \
81 ( \
82 BOOST_VMD_IS_TUPLE(cres), \
83 BOOST_VMD_DETAIL_IDENTIFIER_TYPE_SIZE_D, \
84 BOOST_VMD_IDENTITY(BOOST_VMD_TYPE_IDENTIFIER) \
85 ) \
86 (d,cres) \
87 ) \
88 /**/
89
90 /*
91
92 Determines the type of an identifier.
93
94 The type may be that of an identifier or else
95 it may be a subtype.
96
97 Assumes the 'id' is a valid identifier id
98
99 Expands to the appropriate type
100
101 */
102
103 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE(id) \
104 BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT \
105 ( \
106 BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCATENATE(id) \
107 ) \
108 /**/
109
110 #define BOOST_VMD_DETAIL_IDENTIFIER_TYPE_D(d,id) \
111 BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCAT_D \
112 ( \
113 d, \
114 BOOST_VMD_DETAIL_IDENTIFIER_TYPE_CONCATENATE(id) \
115 ) \
116 /**/
117
118 #endif /* BOOST_VMD_DETAIL_IDENTIFIER_TYPE_HPP */