]> git.donarmstrong.com Git - rsem.git/blob - boost/fusion/adapted/struct/adapt_struct.hpp
Updated boost to v1.55.0
[rsem.git] / boost / fusion / adapted / struct / adapt_struct.hpp
1 /*=============================================================================
2     Copyright (c) 2001-2007 Joel de Guzman
3     Copyright (c) 2009-2011 Christopher Schmidt
4
5     Distributed under the Boost Software License, Version 1.0. (See accompanying
6     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 ==============================================================================*/
8
9 #ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
10 #define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
11
12 #include <boost/preprocessor/cat.hpp>
13 #include <boost/preprocessor/empty.hpp>
14 #include <boost/type_traits/add_reference.hpp>
15 #include <boost/type_traits/is_const.hpp>
16 #include <boost/type_traits/add_const.hpp>
17 #include <boost/type_traits/remove_const.hpp>
18
19 #include <boost/fusion/adapted/struct/detail/extension.hpp>
20 #include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
21 #include <boost/fusion/adapted/struct/detail/at_impl.hpp>
22 #include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
23 #include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
24 #include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
25 #include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
26 #include <boost/fusion/adapted/struct/detail/size_impl.hpp>
27 #include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
28 #include <boost/fusion/adapted/struct/detail/end_impl.hpp>
29 #include <boost/fusion/adapted/struct/detail/value_of_impl.hpp>
30 #include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
31
32 #define BOOST_FUSION_ADAPT_STRUCT_FILLER_0(X, Y)                                \
33     ((X, Y)) BOOST_FUSION_ADAPT_STRUCT_FILLER_1
34 #define BOOST_FUSION_ADAPT_STRUCT_FILLER_1(X, Y)                                \
35     ((X, Y)) BOOST_FUSION_ADAPT_STRUCT_FILLER_0
36 #define BOOST_FUSION_ADAPT_STRUCT_FILLER_0_END
37 #define BOOST_FUSION_ADAPT_STRUCT_FILLER_1_END
38
39 #define BOOST_FUSION_ADAPT_STRUCT_C(TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE)\
40     BOOST_FUSION_ADAPT_STRUCT_C_BASE(                                           \
41         TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,BOOST_PP_EMPTY,ATTRIBUTE,2)
42
43 #define BOOST_FUSION_ADAPT_TPL_STRUCT(TEMPLATE_PARAMS_SEQ,NAME_SEQ, ATTRIBUTES) \
44     BOOST_FUSION_ADAPT_STRUCT_BASE(                                             \
45         (1)TEMPLATE_PARAMS_SEQ,                                                 \
46         (1)NAME_SEQ,                                                            \
47         struct_tag,                                                             \
48         0,                                                                      \
49         ((0,0)) BOOST_PP_CAT(                                                   \
50             BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END),                \
51         BOOST_FUSION_ADAPT_STRUCT_C)
52
53 #define BOOST_FUSION_ADAPT_STRUCT(NAME, ATTRIBUTES)                             \
54     BOOST_FUSION_ADAPT_STRUCT_BASE(                                             \
55         (0),                                                                    \
56         (0)(NAME),                                                              \
57         struct_tag,                                                             \
58         0,                                                                      \
59         BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END),   \
60         BOOST_FUSION_ADAPT_STRUCT_C)
61
62 #define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ATTRIBUTES)                     \
63     BOOST_FUSION_ADAPT_STRUCT_BASE(                                             \
64         (0),                                                                    \
65         (0)(NAME),                                                              \
66         struct_tag,                                                             \
67         1,                                                                      \
68         BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END),   \
69         BOOST_FUSION_ADAPT_STRUCT_C)
70
71 #endif