123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Copyright (c) 2009-2011 Christopher Schmidt
- Copyright (c) 2013-2014 Damien Buhl
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ==============================================================================*/
- #ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
- #define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
- #include <boost/fusion/support/config.hpp>
- #include <boost/preprocessor/config/config.hpp>
- #include <boost/preprocessor/cat.hpp>
- #include <boost/preprocessor/empty.hpp>
- #include <boost/preprocessor/control/iif.hpp>
- #include <boost/preprocessor/comparison/less.hpp>
- #include <boost/preprocessor/seq/seq.hpp>
- #include <boost/preprocessor/variadic/to_seq.hpp>
- #include <boost/fusion/adapted/struct/detail/extension.hpp>
- #include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
- #include <boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp>
- #include <boost/fusion/adapted/struct/detail/at_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/size_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/end_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/value_of_impl.hpp>
- #include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
- #define BOOST_FUSION_ADAPT_STRUCT_C( \
- TEMPLATE_PARAMS_SEQ, NAME_SEQ, IS_VIEW, I, ATTRIBUTE) \
- BOOST_FUSION_ADAPT_STRUCT_C_BASE( \
- TEMPLATE_PARAMS_SEQ, \
- NAME_SEQ, \
- IS_VIEW, \
- I, \
- BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
- BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR(ATTRIBUTE), \
- BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
- BOOST_PP_LESS( \
- BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), 2))
- #if BOOST_PP_VARIADICS
- # define BOOST_FUSION_ADAPT_TPL_STRUCT(TEMPLATE_PARAMS_SEQ,NAME_SEQ, ...) \
- BOOST_FUSION_ADAPT_STRUCT_BASE( \
- (1)TEMPLATE_PARAMS_SEQ, \
- (1)NAME_SEQ, \
- struct_tag, \
- 0, \
- BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER( \
- BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)), \
- BOOST_FUSION_ADAPT_STRUCT_C)
- # define BOOST_FUSION_ADAPT_STRUCT(...) \
- BOOST_FUSION_ADAPT_STRUCT_BASE( \
- (0), \
- (0)(BOOST_PP_SEQ_HEAD(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
- struct_tag, \
- 0, \
- BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER( \
- BOOST_PP_SEQ_TAIL(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
- BOOST_FUSION_ADAPT_STRUCT_C)
- # define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(...) \
- BOOST_FUSION_ADAPT_STRUCT_BASE( \
- (0), \
- (0)(BOOST_PP_SEQ_HEAD(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
- struct_tag, \
- 1, \
- BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER( \
- BOOST_PP_SEQ_TAIL(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
- BOOST_FUSION_ADAPT_STRUCT_C)
- #else // BOOST_PP_VARIADICS
- # define BOOST_FUSION_ADAPT_TPL_STRUCT( \
- TEMPLATE_PARAMS_SEQ,NAME_SEQ, ATTRIBUTES) \
- BOOST_FUSION_ADAPT_STRUCT_BASE( \
- (1)TEMPLATE_PARAMS_SEQ, \
- (1)NAME_SEQ, \
- struct_tag, \
- 0, \
- BOOST_PP_CAT( \
- BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
- BOOST_FUSION_ADAPT_STRUCT_C)
- # define BOOST_FUSION_ADAPT_STRUCT(NAME, ATTRIBUTES) \
- BOOST_FUSION_ADAPT_STRUCT_BASE( \
- (0), \
- (0)(NAME), \
- struct_tag, \
- 0, \
- BOOST_PP_CAT( \
- BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES, \
- _END), \
- BOOST_FUSION_ADAPT_STRUCT_C)
- # define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ATTRIBUTES) \
- BOOST_FUSION_ADAPT_STRUCT_BASE( \
- (0), \
- (0)(NAME), \
- struct_tag, \
- 1, \
- BOOST_PP_CAT( \
- BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES, \
- _END), \
- BOOST_FUSION_ADAPT_STRUCT_C)
- #endif // BOOST_PP_VARIADICS
- #endif
|