1// Copyright Daniel Wallin 2006.
2// Copyright Cromwell D. Enage 2017.
3// Distributed under the Boost Software License, Version 1.0.
4// (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#ifndef BOOST_PARAMETER_AUX_PREPROCESSOR_QUALIFIER_HPP
8#define BOOST_PARAMETER_AUX_PREPROCESSOR_QUALIFIER_HPP
9
10#define BOOST_PARAMETER_QUALIFIER_EAT_in(x)
11#define BOOST_PARAMETER_QUALIFIER_EAT_out(x)
12#define BOOST_PARAMETER_QUALIFIER_EAT_in_out(x)
13#define BOOST_PARAMETER_QUALIFIER_EAT_consume(x)
14#define BOOST_PARAMETER_QUALIFIER_EAT_move_from(x)
15#define BOOST_PARAMETER_QUALIFIER_EAT_forward(x)
16
17#define BOOST_PARAMETER_GET_QUALIFIER_in(x) in_reference
18#define BOOST_PARAMETER_GET_QUALIFIER_out(x) out_reference
19#define BOOST_PARAMETER_GET_QUALIFIER_in_out(x) in_out_reference
20#define BOOST_PARAMETER_GET_QUALIFIER_consume(x) consume_reference
21#define BOOST_PARAMETER_GET_QUALIFIER_move_from(x) move_from_reference
22#define BOOST_PARAMETER_GET_QUALIFIER_forward(x) forward_reference
23
24#define BOOST_PARAMETER_STRIP_QUALIFIER_in(x) x
25#define BOOST_PARAMETER_STRIP_QUALIFIER_out(x) x
26#define BOOST_PARAMETER_STRIP_QUALIFIER_in_out(x) x
27#define BOOST_PARAMETER_STRIP_QUALIFIER_consume(x) x
28#define BOOST_PARAMETER_STRIP_QUALIFIER_move_from(x) x
29#define BOOST_PARAMETER_STRIP_QUALIFIER_forward(x) x
30
31#include <boost/preprocessor/cat.hpp>
32
33#define BOOST_PARAMETER_GET_QUALIFIER_GET(x) \
34 BOOST_PP_CAT(BOOST_PARAMETER_GET_QUALIFIER_, x)
35/**/
36
37#define BOOST_PARAMETER_GET_UNQUALIFIED(x) \
38 BOOST_PP_CAT(BOOST_PARAMETER_STRIP_QUALIFIER_, x)
39/**/
40
41#include <boost/preprocessor/facilities/is_empty.hpp>
42
43// Expands to 1 if x is either "in(k)", "out(k)", "in_out(k)", "consume(k)",
44// "move_from(k)", or "forward(k)"; expands to 0 otherwise.
45#define BOOST_PARAMETER_IS_QUALIFIER(x) \
46 BOOST_PP_IS_EMPTY(BOOST_PP_CAT(BOOST_PARAMETER_QUALIFIER_EAT_, x))
47/**/
48
49#include <boost/preprocessor/control/iif.hpp>
50
51// Expands to the qualifier of x,
52// where x is either a keyword qualifier or a keyword.
53//
54// k => forward_reference
55// in(k) => in_reference
56// out(k) => out_reference
57// in_out(k) => in_out_reference
58// forward(k) => forward_reference
59// consume(k) => consume_reference
60// move_from(k) => move_from_reference
61#define BOOST_PARAMETER_GET_QUALIFIER(x) \
62 BOOST_PP_IIF( \
63 BOOST_PARAMETER_IS_QUALIFIER(x) \
64 , BOOST_PARAMETER_GET_QUALIFIER_GET(x) \
65 , forward_reference \
66 )
67/**/
68
69// Expands to the unqualified version of x,
70// where x is either a keyword qualifier or a keyword.
71//
72// k => k
73// in(k) => k
74// out(k) => k
75// in_out(k) => k
76// forward(k) => k
77// consume(k) => k
78// move_from(k) => k
79#define BOOST_PARAMETER_UNQUALIFIED(x) \
80 BOOST_PP_IIF( \
81 BOOST_PARAMETER_IS_QUALIFIER(x) \
82 , BOOST_PARAMETER_GET_UNQUALIFIED(x) \
83 , x \
84 )
85/**/
86
87#endif // include guard
88
89

source code of include/boost/parameter/aux_/preprocessor/qualifier.hpp