]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | |
2 | #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES) | |
3 | #ifndef BOOST_PHOENIX_SCOPE_DETAIL_DYNAMIC_HPP | |
4 | #define BOOST_PHOENIX_SCOPE_DETAIL_DYNAMIC_HPP | |
5 | ||
6 | #include <boost/phoenix/support/iterate.hpp> | |
7 | ||
8 | #include <boost/phoenix/scope/detail/cpp03/preprocessed/dynamic.hpp> | |
9 | ||
10 | #endif | |
11 | #else | |
12 | ||
13 | #if !BOOST_PHOENIX_IS_ITERATING | |
14 | ||
15 | #ifndef BOOST_PHOENIX_SCOPE_DETAIL_DYNAMIC_HPP | |
16 | #define BOOST_PHOENIX_SCOPE_DETAIL_DYNAMIC_HPP | |
17 | ||
18 | #include <boost/phoenix/support/iterate.hpp> | |
19 | ||
20 | #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES) | |
21 | #pragma wave option(preserve: 2, line: 0, output: "preprocessed/dynamic_" BOOST_PHOENIX_LIMIT_STR ".hpp") | |
22 | #endif | |
23 | ||
24 | /*============================================================================== | |
25 | Copyright (c) 2005-2010 Joel de Guzman | |
26 | Copyright (c) 2010 Thomas Heller | |
27 | ||
28 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
29 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
30 | ==============================================================================*/ | |
31 | ||
32 | #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES) | |
33 | #pragma wave option(preserve: 1) | |
34 | #endif | |
35 | ||
36 | #define BOOST_PHOENIX_SCOPE_DYNAMIC_MEMBER(_, N, __) \ | |
37 | typedef \ | |
38 | typename expression::dynamic_member< \ | |
39 | mpl::int_<N> \ | |
40 | , self_type * \ | |
41 | >::type const \ | |
42 | BOOST_PP_CAT(member, BOOST_PP_INC(N)); \ | |
43 | /**/ | |
44 | ||
45 | #define BOOST_PHOENIX_ITERATION_PARAMS \ | |
46 | (3, (1, BOOST_PHOENIX_DYNAMIC_LIMIT, \ | |
47 | <boost/phoenix/scope/detail/cpp03/dynamic.hpp>)) | |
48 | #include BOOST_PHOENIX_ITERATE() | |
49 | ||
50 | #undef BOOST_PHOENIX_SCOPE_DYNAMIC_MEMBER | |
51 | ||
52 | #endif | |
53 | ||
54 | #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES) | |
55 | #pragma wave option(output: null) | |
56 | #endif | |
57 | ||
58 | #else | |
59 | ||
60 | template <BOOST_PHOENIX_typename_A> | |
61 | struct dynamic<BOOST_PHOENIX_A> : noncopyable | |
62 | { | |
63 | typedef | |
64 | BOOST_PP_CAT(vector, BOOST_PHOENIX_ITERATION)<BOOST_PHOENIX_A> | |
65 | tuple_type; | |
66 | typedef | |
67 | dynamic<BOOST_PHOENIX_A> | |
68 | self_type; | |
69 | typedef | |
70 | dynamic_frame<self_type> | |
71 | dynamic_frame_type; | |
72 | ||
73 | dynamic() | |
74 | : frame(0) {} | |
75 | ||
76 | template <int N> | |
77 | static | |
78 | typename expression::dynamic_member<mpl::int_<N>, self_type *>::type const | |
79 | init(self_type * scope) | |
80 | { | |
81 | return | |
82 | expression:: | |
83 | dynamic_member<mpl::int_<N>, self_type *>:: | |
84 | make(mpl::int_<N>(), scope); | |
85 | } | |
86 | ||
87 | BOOST_PP_REPEAT( | |
88 | BOOST_PHOENIX_ITERATION | |
89 | , BOOST_PHOENIX_SCOPE_DYNAMIC_MEMBER | |
90 | , _ | |
91 | ) | |
92 | ||
93 | mutable dynamic_frame_type* frame; | |
94 | }; | |
95 | ||
96 | #endif | |
97 | ||
98 | #endif // BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES |