1 # /* Copyright (C) 2001
2 #  * Housemarque Oy
3 #  * http://www.housemarque.com
4 #  *
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 # /* Revised by Paul Mensonides (2002) */
11 # /* Revised by Edward Diener (2020) */
12 #
13 # /* See http://www.boost.org for most recent version. */
14 #
15 # ifndef BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP
16 # define BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP
17 #
18 # include <boost/preprocessor/config/config.hpp>
19 #
20 # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
21 #
22 # include <boost/preprocessor/cat.hpp>
23 # include <boost/preprocessor/control/while.hpp>
24 # include <boost/preprocessor/debug/error.hpp>
25 # include <boost/preprocessor/detail/auto_rec.hpp>
26 #
27 # if 0
28 #    define BOOST_PP_LIST_FOLD_RIGHT(op, state, list)
29 # endif
30 #
31 # define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
32 #
33 # define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004)
34 #
35 # define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l)
36 # define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT
37 # define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D
38 #
39 # if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
40 #    include <boost/preprocessor/list/detail/edg/fold_right.hpp>
41 # else
42 #    include <boost/preprocessor/list/detail/fold_right.hpp>
43 # endif
44 #
45 # else
46 #
47 # include <boost/preprocessor/arithmetic/dec.hpp>
48 # include <boost/preprocessor/cat.hpp>
49 # include <boost/preprocessor/control/while.hpp>
50 # include <boost/preprocessor/debug/error.hpp>
51 # include <boost/preprocessor/detail/auto_rec.hpp>
52 #
53 # if 0
54 #    define BOOST_PP_LIST_FOLD_RIGHT(op, state, list)
55 # endif
56 #
57 # include <boost/preprocessor/config/limits.hpp>
58 #
59 # if BOOST_PP_LIMIT_WHILE == 256
60 # define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)))
61 # define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004)
62 # elif BOOST_PP_LIMIT_WHILE == 512
63 # define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 512)))
64 # define BOOST_PP_LIST_FOLD_RIGHT_513(o, s, l) BOOST_PP_ERROR(0x0004)
65 # elif BOOST_PP_LIMIT_WHILE == 1024
66 # define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_DEC(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 1024)))
67 # define BOOST_PP_LIST_FOLD_RIGHT_1025(o, s, l) BOOST_PP_ERROR(0x0004)
68 # else
69 # error Incorrect value for the BOOST_PP_LIMIT_WHILE limit
70 # endif
71 #
72 # define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l)
73 # define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT
74 # define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D
75 #
76 # if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
77 #    include <boost/preprocessor/list/detail/edg/fold_right.hpp>
78 # else
79 #    include <boost/preprocessor/list/detail/fold_right.hpp>
80 # endif
81 #
82 # endif
83 #
84 # endif
85