Chris@16
|
1 /*=============================================================================
|
Chris@16
|
2 Copyright (c) 2001-2011 Joel de Guzman
|
Chris@16
|
3
|
Chris@16
|
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 ==============================================================================*/
|
Chris@16
|
7 #if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED)
|
Chris@16
|
8 #define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED
|
Chris@16
|
9
|
Chris@101
|
10 #include <boost/fusion/support/config.hpp>
|
Chris@16
|
11 #include <boost/type_traits/is_const.hpp>
|
Chris@16
|
12 #include <boost/utility/enable_if.hpp>
|
Chris@16
|
13 #include <boost/fusion/support/is_sequence.hpp>
|
Chris@16
|
14
|
Chris@16
|
15 namespace boost { namespace fusion
|
Chris@16
|
16 {
|
Chris@16
|
17 namespace extension
|
Chris@16
|
18 {
|
Chris@16
|
19 template <typename Tag>
|
Chris@16
|
20 struct at_impl;
|
Chris@16
|
21
|
Chris@16
|
22 template <typename Tag>
|
Chris@16
|
23 struct begin_impl;
|
Chris@16
|
24
|
Chris@16
|
25 template <typename Tag>
|
Chris@16
|
26 struct empty_impl;
|
Chris@16
|
27
|
Chris@16
|
28 template <typename Tag>
|
Chris@16
|
29 struct end_impl;
|
Chris@16
|
30
|
Chris@16
|
31 template <typename Tag>
|
Chris@16
|
32 struct has_key_impl;
|
Chris@16
|
33
|
Chris@16
|
34 template <typename Tag>
|
Chris@16
|
35 struct segments_impl;
|
Chris@16
|
36
|
Chris@16
|
37 template <typename Tag>
|
Chris@16
|
38 struct size_impl;
|
Chris@16
|
39
|
Chris@16
|
40 template <typename Tag>
|
Chris@16
|
41 struct value_at_impl;
|
Chris@16
|
42
|
Chris@16
|
43 template <typename Tag>
|
Chris@16
|
44 struct at_key_impl;
|
Chris@16
|
45
|
Chris@16
|
46 template <typename Tag>
|
Chris@16
|
47 struct value_at_key_impl;
|
Chris@16
|
48 }
|
Chris@16
|
49
|
Chris@16
|
50 namespace result_of
|
Chris@16
|
51 {
|
Chris@16
|
52 template <typename Sequence, typename N>
|
Chris@16
|
53 struct at;
|
Chris@16
|
54
|
Chris@16
|
55 template <typename Sequence, int N>
|
Chris@16
|
56 struct at_c;
|
Chris@16
|
57
|
Chris@16
|
58 template <typename Sequence>
|
Chris@16
|
59 struct back;
|
Chris@16
|
60
|
Chris@16
|
61 template <typename Sequence>
|
Chris@16
|
62 struct begin;
|
Chris@16
|
63
|
Chris@16
|
64 template <typename Sequence>
|
Chris@16
|
65 struct empty;
|
Chris@16
|
66
|
Chris@16
|
67 template <typename Sequence>
|
Chris@16
|
68 struct end;
|
Chris@16
|
69
|
Chris@16
|
70 template <typename Sequence>
|
Chris@16
|
71 struct front;
|
Chris@16
|
72
|
Chris@16
|
73 template <typename Sequence, typename Key>
|
Chris@16
|
74 struct has_key;
|
Chris@16
|
75
|
Chris@16
|
76 template <typename Sequence>
|
Chris@16
|
77 struct segments;
|
Chris@16
|
78
|
Chris@16
|
79 template <typename Sequence>
|
Chris@16
|
80 struct size;
|
Chris@16
|
81
|
Chris@16
|
82 template <typename Sequence, typename N>
|
Chris@16
|
83 struct value_at;
|
Chris@16
|
84
|
Chris@16
|
85 template <typename Sequence, int N>
|
Chris@16
|
86 struct value_at_c;
|
Chris@16
|
87
|
Chris@16
|
88 template <typename Sequence, typename Key>
|
Chris@16
|
89 struct at_key;
|
Chris@16
|
90
|
Chris@16
|
91 template <typename Sequence, typename N>
|
Chris@16
|
92 struct value_at_key;
|
Chris@16
|
93 }
|
Chris@16
|
94
|
Chris@16
|
95 template <typename N, typename Sequence>
|
Chris@101
|
96 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
97 typename
|
Chris@16
|
98 lazy_disable_if<
|
Chris@16
|
99 is_const<Sequence>
|
Chris@16
|
100 , result_of::at<Sequence, N>
|
Chris@16
|
101 >::type
|
Chris@16
|
102 at(Sequence& seq);
|
Chris@16
|
103
|
Chris@16
|
104 template <typename N, typename Sequence>
|
Chris@101
|
105 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
106 typename result_of::at<Sequence const, N>::type
|
Chris@16
|
107 at(Sequence const& seq);
|
Chris@16
|
108
|
Chris@16
|
109 template <int N, typename Sequence>
|
Chris@101
|
110 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
111 typename
|
Chris@16
|
112 lazy_disable_if<
|
Chris@16
|
113 is_const<Sequence>
|
Chris@16
|
114 , result_of::at_c<Sequence, N>
|
Chris@16
|
115 >::type
|
Chris@16
|
116 at_c(Sequence& seq);
|
Chris@16
|
117
|
Chris@16
|
118 template <int N, typename Sequence>
|
Chris@101
|
119 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
120 typename result_of::at_c<Sequence const, N>::type
|
Chris@16
|
121 at_c(Sequence const& seq);
|
Chris@16
|
122
|
Chris@16
|
123 template <typename Sequence>
|
Chris@101
|
124 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
125 typename result_of::back<Sequence>::type
|
Chris@16
|
126 back(Sequence& seq);
|
Chris@16
|
127
|
Chris@16
|
128 template <typename Sequence>
|
Chris@101
|
129 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
130 typename result_of::back<Sequence const>::type
|
Chris@16
|
131 back(Sequence const& seq);
|
Chris@16
|
132
|
Chris@16
|
133 template <typename Sequence>
|
Chris@101
|
134 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
135 typename
|
Chris@16
|
136 lazy_enable_if<
|
Chris@16
|
137 traits::is_sequence<Sequence>
|
Chris@16
|
138 , result_of::begin<Sequence>
|
Chris@16
|
139 >::type const
|
Chris@16
|
140 begin(Sequence& seq);
|
Chris@16
|
141
|
Chris@16
|
142 template <typename Sequence>
|
Chris@101
|
143 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
144 typename
|
Chris@16
|
145 lazy_enable_if<
|
Chris@16
|
146 traits::is_sequence<Sequence>
|
Chris@16
|
147 , result_of::begin<Sequence const>
|
Chris@16
|
148 >::type const
|
Chris@16
|
149 begin(Sequence const& seq);
|
Chris@16
|
150
|
Chris@16
|
151 template <typename Sequence>
|
Chris@101
|
152 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
153 typename result_of::empty<Sequence>::type
|
Chris@16
|
154 empty(Sequence const&);
|
Chris@16
|
155
|
Chris@16
|
156 template <typename Sequence>
|
Chris@101
|
157 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
158 typename
|
Chris@16
|
159 lazy_enable_if<
|
Chris@16
|
160 traits::is_sequence<Sequence>
|
Chris@16
|
161 , result_of::end<Sequence>
|
Chris@16
|
162 >::type const
|
Chris@16
|
163 end(Sequence& seq);
|
Chris@16
|
164
|
Chris@16
|
165 template <typename Sequence>
|
Chris@101
|
166 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
167 typename
|
Chris@16
|
168 lazy_enable_if<
|
Chris@16
|
169 traits::is_sequence<Sequence>
|
Chris@16
|
170 , result_of::end<Sequence const>
|
Chris@16
|
171 >::type const
|
Chris@16
|
172 end(Sequence const& seq);
|
Chris@16
|
173
|
Chris@16
|
174 template <typename Sequence>
|
Chris@101
|
175 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
176 typename result_of::front<Sequence>::type
|
Chris@16
|
177 front(Sequence& seq);
|
Chris@16
|
178
|
Chris@16
|
179 template <typename Sequence>
|
Chris@101
|
180 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
181 typename result_of::front<Sequence const>::type
|
Chris@16
|
182 front(Sequence const& seq);
|
Chris@16
|
183
|
Chris@16
|
184 template <typename Key, typename Sequence>
|
Chris@101
|
185 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
186 typename result_of::has_key<Sequence, Key>::type
|
Chris@16
|
187 has_key(Sequence const& seq);
|
Chris@16
|
188
|
Chris@16
|
189 template <typename Sequence>
|
Chris@101
|
190 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
191 typename
|
Chris@16
|
192 lazy_disable_if<
|
Chris@16
|
193 is_const<Sequence>
|
Chris@16
|
194 , result_of::segments<Sequence>
|
Chris@16
|
195 >::type
|
Chris@16
|
196 segments(Sequence& seq);
|
Chris@16
|
197
|
Chris@16
|
198 template <typename Sequence>
|
Chris@101
|
199 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
200 typename result_of::segments<Sequence const>::type
|
Chris@16
|
201 segments(Sequence const& seq);
|
Chris@16
|
202
|
Chris@16
|
203 template <typename Sequence>
|
Chris@101
|
204 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
205 typename result_of::size<Sequence>::type
|
Chris@16
|
206 size(Sequence const&);
|
Chris@16
|
207
|
Chris@16
|
208 template <typename Key, typename Sequence>
|
Chris@101
|
209 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
210 typename
|
Chris@16
|
211 lazy_disable_if<
|
Chris@16
|
212 is_const<Sequence>
|
Chris@16
|
213 , result_of::at_key<Sequence, Key>
|
Chris@16
|
214 >::type
|
Chris@16
|
215 at_key(Sequence& seq);
|
Chris@16
|
216
|
Chris@16
|
217 template <typename Key, typename Sequence>
|
Chris@101
|
218 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
219 typename result_of::at_key<Sequence const, Key>::type
|
Chris@16
|
220 at_key(Sequence const& seq);
|
Chris@16
|
221 }}
|
Chris@16
|
222
|
Chris@16
|
223 #endif
|