File indexing completed on 2025-01-18 09:34:43
0001
0002
0003
0004
0005
0006
0007 #if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED)
0008 #define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED
0009
0010 #include <boost/fusion/support/config.hpp>
0011 #include <boost/type_traits/is_const.hpp>
0012 #include <boost/utility/enable_if.hpp>
0013 #include <boost/fusion/support/is_sequence.hpp>
0014
0015 namespace boost { namespace fusion
0016 {
0017 namespace extension
0018 {
0019 template <typename Tag>
0020 struct at_impl;
0021
0022 template <typename Tag>
0023 struct begin_impl;
0024
0025 template <typename Tag>
0026 struct empty_impl;
0027
0028 template <typename Tag>
0029 struct end_impl;
0030
0031 template <typename Tag>
0032 struct has_key_impl;
0033
0034 template <typename Tag>
0035 struct segments_impl;
0036
0037 template <typename Tag>
0038 struct size_impl;
0039
0040 template <typename Tag>
0041 struct value_at_impl;
0042
0043 template <typename Tag>
0044 struct at_key_impl;
0045
0046 template <typename Tag>
0047 struct value_at_key_impl;
0048 }
0049
0050 namespace result_of
0051 {
0052 template <typename Sequence, typename N>
0053 struct at;
0054
0055 template <typename Sequence, int N>
0056 struct at_c;
0057
0058 template <typename Sequence>
0059 struct back;
0060
0061 template <typename Sequence>
0062 struct begin;
0063
0064 template <typename Sequence>
0065 struct empty;
0066
0067 template <typename Sequence>
0068 struct end;
0069
0070 template <typename Sequence>
0071 struct front;
0072
0073 template <typename Sequence, typename Key>
0074 struct has_key;
0075
0076 template <typename Sequence>
0077 struct segments;
0078
0079 template <typename Sequence>
0080 struct size;
0081
0082 template <typename Sequence, typename N>
0083 struct value_at;
0084
0085 template <typename Sequence, int N>
0086 struct value_at_c;
0087
0088 template <typename Sequence, typename Key>
0089 struct at_key;
0090
0091 template <typename Sequence, typename N>
0092 struct value_at_key;
0093 }
0094
0095 template <typename N, typename Sequence>
0096 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0097 typename
0098 lazy_disable_if<
0099 is_const<Sequence>
0100 , result_of::at<Sequence, N>
0101 >::type
0102 at(Sequence& seq);
0103
0104 template <typename N, typename Sequence>
0105 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0106 typename result_of::at<Sequence const, N>::type
0107 at(Sequence const& seq);
0108
0109 template <int N, typename Sequence>
0110 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0111 typename
0112 lazy_disable_if<
0113 is_const<Sequence>
0114 , result_of::at_c<Sequence, N>
0115 >::type
0116 at_c(Sequence& seq);
0117
0118 template <int N, typename Sequence>
0119 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0120 typename result_of::at_c<Sequence const, N>::type
0121 at_c(Sequence const& seq);
0122
0123 template <typename Sequence>
0124 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0125 typename result_of::back<Sequence>::type
0126 back(Sequence& seq);
0127
0128 template <typename Sequence>
0129 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0130 typename result_of::back<Sequence const>::type
0131 back(Sequence const& seq);
0132
0133 template <typename Sequence>
0134 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0135 typename
0136 lazy_enable_if<
0137 traits::is_sequence<Sequence>
0138 , result_of::begin<Sequence>
0139 >::type const
0140 begin(Sequence& seq);
0141
0142 template <typename Sequence>
0143 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0144 typename
0145 lazy_enable_if<
0146 traits::is_sequence<Sequence>
0147 , result_of::begin<Sequence const>
0148 >::type const
0149 begin(Sequence const& seq);
0150
0151 template <typename Sequence>
0152 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0153 typename result_of::empty<Sequence>::type
0154 empty(Sequence const&);
0155
0156 template <typename Sequence>
0157 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0158 typename
0159 lazy_enable_if<
0160 traits::is_sequence<Sequence>
0161 , result_of::end<Sequence>
0162 >::type const
0163 end(Sequence& seq);
0164
0165 template <typename Sequence>
0166 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0167 typename
0168 lazy_enable_if<
0169 traits::is_sequence<Sequence>
0170 , result_of::end<Sequence const>
0171 >::type const
0172 end(Sequence const& seq);
0173
0174 template <typename Sequence>
0175 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0176 typename result_of::front<Sequence>::type
0177 front(Sequence& seq);
0178
0179 template <typename Sequence>
0180 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0181 typename result_of::front<Sequence const>::type
0182 front(Sequence const& seq);
0183
0184 template <typename Key, typename Sequence>
0185 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0186 typename result_of::has_key<Sequence, Key>::type
0187 has_key(Sequence const& seq);
0188
0189 template <typename Sequence>
0190 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0191 typename
0192 lazy_disable_if<
0193 is_const<Sequence>
0194 , result_of::segments<Sequence>
0195 >::type
0196 segments(Sequence& seq);
0197
0198 template <typename Sequence>
0199 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0200 typename result_of::segments<Sequence const>::type
0201 segments(Sequence const& seq);
0202
0203 template <typename Sequence>
0204 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0205 typename result_of::size<Sequence>::type
0206 size(Sequence const&);
0207
0208 template <typename Key, typename Sequence>
0209 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0210 typename
0211 lazy_disable_if<
0212 is_const<Sequence>
0213 , result_of::at_key<Sequence, Key>
0214 >::type
0215 at_key(Sequence& seq);
0216
0217 template <typename Key, typename Sequence>
0218 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0219 typename result_of::at_key<Sequence const, Key>::type
0220 at_key(Sequence const& seq);
0221 }}
0222
0223 #endif