]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
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_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 */