]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/preprocessor/list/to_array.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / preprocessor / list / to_array.hpp
CommitLineData
7c673cae
FG
1# /* **************************************************************************
2# * *
3# * (C) Copyright Paul Mensonides 2011.
4# * (C) Copyright Edward Diener 2011,2014.
5# * Distributed under the Boost Software License, Version 1.0. (See
6# * accompanying file LICENSE_1_0.txt or copy at
7# * http://www.boost.org/LICENSE_1_0.txt)
8# * *
9# ************************************************************************** */
10#
11# /* See http://www.boost.org for most recent version. */
12#
13# ifndef BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP
14# define BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP
15#
16# include <boost/preprocessor/arithmetic/dec.hpp>
17# include <boost/preprocessor/arithmetic/inc.hpp>
18# include <boost/preprocessor/config/config.hpp>
19# include <boost/preprocessor/control/while.hpp>
20# include <boost/preprocessor/list/adt.hpp>
21# include <boost/preprocessor/tuple/elem.hpp>
22# include <boost/preprocessor/tuple/rem.hpp>
20effc67 23# if BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)
7c673cae
FG
24# include <boost/preprocessor/control/iif.hpp>
25# endif
26#
27# /* BOOST_PP_LIST_TO_ARRAY */
28#
20effc67 29# if BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)
7c673cae 30# define BOOST_PP_LIST_TO_ARRAY(list) \
92f5a8d4
TL
31 BOOST_PP_IIF \
32 ( \
33 BOOST_PP_LIST_IS_NIL(list), \
34 BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY, \
35 BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO \
36 ) \
37 (list) \
7c673cae
FG
38/**/
39# define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY(list) (0,())
40# define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list)
41# else
42# define BOOST_PP_LIST_TO_ARRAY(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list)
43# endif
44
45# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
46# define BOOST_PP_LIST_TO_ARRAY_I(w, list) \
47 BOOST_PP_LIST_TO_ARRAY_II(((BOOST_PP_TUPLE_REM_CTOR( \
48 3, \
92f5a8d4 49 w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \
7c673cae
FG
50 )))) \
51 /**/
52# define BOOST_PP_LIST_TO_ARRAY_II(p) BOOST_PP_LIST_TO_ARRAY_II_B(p)
53# define BOOST_PP_LIST_TO_ARRAY_II_B(p) BOOST_PP_LIST_TO_ARRAY_II_C ## p
54# define BOOST_PP_LIST_TO_ARRAY_II_C(p) BOOST_PP_LIST_TO_ARRAY_III p
55# else
56# define BOOST_PP_LIST_TO_ARRAY_I(w, list) \
57 BOOST_PP_LIST_TO_ARRAY_II(BOOST_PP_TUPLE_REM_CTOR( \
58 3, \
92f5a8d4 59 w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \
7c673cae
FG
60 )) \
61 /**/
62# define BOOST_PP_LIST_TO_ARRAY_II(im) BOOST_PP_LIST_TO_ARRAY_III(im)
63# endif
20effc67
TL
64# define BOOST_PP_LIST_TO_ARRAY_III(list, size, tuple) (BOOST_PP_DEC(size), BOOST_PP_LIST_TO_ARRAY_IV tuple)
65# define BOOST_PP_LIST_TO_ARRAY_IV(_, ...) (__VA_ARGS__)
7c673cae
FG
66# define BOOST_PP_LIST_TO_ARRAY_P(d, state) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(3, 0, state))
67# define BOOST_PP_LIST_TO_ARRAY_O(d, state) BOOST_PP_LIST_TO_ARRAY_O_I state
68# define BOOST_PP_LIST_TO_ARRAY_O_I(list, size, tuple) (BOOST_PP_LIST_REST(list), BOOST_PP_INC(size), (BOOST_PP_TUPLE_REM(size) tuple, BOOST_PP_LIST_FIRST(list)))
69#
70# /* BOOST_PP_LIST_TO_ARRAY_D */
71#
20effc67 72# if BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)
7c673cae 73# define BOOST_PP_LIST_TO_ARRAY_D(d, list) \
92f5a8d4
TL
74 BOOST_PP_IIF \
75 ( \
76 BOOST_PP_LIST_IS_NIL(list), \
77 BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY, \
78 BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO \
79 ) \
80 (d, list) \
7c673cae
FG
81/**/
82# define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY(d, list) (0,())
83# define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list)
84# else
85# define BOOST_PP_LIST_TO_ARRAY_D(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list)
86# endif
87#
88# endif /* BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP */