Warning, file /include/boost/range/any_range.hpp was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef BOOST_RANGE_ANY_RANGE_HPP_INCLUDED
0010 #define BOOST_RANGE_ANY_RANGE_HPP_INCLUDED
0011
0012 #include <boost/config.hpp>
0013 #include <boost/mpl/eval_if.hpp>
0014 #include <boost/mpl/identity.hpp>
0015 #include <boost/iterator/iterator_categories.hpp>
0016 #include <boost/iterator/iterator_traits.hpp>
0017 #include <boost/iterator/iterator_facade.hpp>
0018 #include <boost/iterator/iterator_adaptor.hpp>
0019 #include <boost/range/detail/any_iterator.hpp>
0020 #include <boost/range/concepts.hpp>
0021 #include <boost/range/reference.hpp>
0022 #include <boost/range/value_type.hpp>
0023 #include <boost/range/iterator_range_core.hpp>
0024
0025 namespace boost
0026 {
0027 namespace range_detail
0028 {
0029
0030
0031
0032
0033
0034
0035 template<
0036 class T,
0037 class Default
0038 >
0039 struct any_range_default_help
0040 : mpl::eval_if<
0041 is_same<T, use_default>
0042 , Default
0043 , mpl::identity<T>
0044 >
0045 {
0046 };
0047
0048 template<
0049 class WrappedRange
0050 , class Value
0051 , class Reference
0052 >
0053 struct any_range_value_type
0054 {
0055 # ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
0056 typedef typename any_range_default_help<
0057 Value
0058 , mpl::eval_if<
0059 is_same<Reference, use_default>
0060 , range_value<
0061 typename remove_const<WrappedRange>
0062 ::type>
0063 , remove_reference<Reference>
0064 >
0065 >::type type;
0066 # else
0067 typedef typename any_range_default_help<
0068 Value
0069 , range_value<
0070 typename remove_const<WrappedRange>
0071 ::type>
0072 >::type type;
0073 # endif
0074 };
0075
0076 template<
0077 class Value
0078 , class Traversal
0079 , class Reference = Value&
0080 , class Difference = std::ptrdiff_t
0081 , class Buffer = use_default
0082 >
0083 class any_range
0084 : public iterator_range<
0085 any_iterator<
0086 Value
0087 , Traversal
0088 , Reference
0089 , Difference
0090 , typename any_range_default_help<
0091 Buffer
0092 , mpl::identity<any_iterator_default_buffer>
0093 >::type
0094 >
0095 >
0096 {
0097 typedef iterator_range<
0098 any_iterator<
0099 Value
0100 , Traversal
0101 , Reference
0102 , Difference
0103 , typename any_range_default_help<
0104 Buffer
0105 , mpl::identity<any_iterator_default_buffer>
0106 >::type
0107 >
0108 > base_type;
0109
0110 struct enabler {};
0111 struct disabler {};
0112 public:
0113 any_range()
0114 {
0115 }
0116
0117 any_range(const any_range& other)
0118 : base_type(other)
0119 {
0120 }
0121
0122 template<class WrappedRange>
0123 any_range(WrappedRange& wrapped_range)
0124 : base_type(boost::begin(wrapped_range),
0125 boost::end(wrapped_range))
0126 {
0127 }
0128
0129 template<class WrappedRange>
0130 any_range(const WrappedRange& wrapped_range)
0131 : base_type(boost::begin(wrapped_range),
0132 boost::end(wrapped_range))
0133 {
0134 }
0135
0136 template<
0137 class OtherValue
0138 , class OtherTraversal
0139 , class OtherReference
0140 , class OtherDifference
0141 >
0142 any_range(const any_range<
0143 OtherValue
0144 , OtherTraversal
0145 , OtherReference
0146 , OtherDifference
0147 , Buffer
0148 >& other)
0149 : base_type(boost::begin(other), boost::end(other))
0150 {
0151 }
0152
0153 template<class Iterator>
0154 any_range(Iterator first, Iterator last)
0155 : base_type(first, last)
0156 {
0157 }
0158 };
0159
0160 template<
0161 class WrappedRange
0162 , class Value = use_default
0163 , class Traversal = use_default
0164 , class Reference = use_default
0165 , class Difference = use_default
0166 , class Buffer = use_default
0167 >
0168 struct any_range_type_generator
0169 {
0170 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<WrappedRange> ));
0171 typedef any_range<
0172 typename any_range_value_type<
0173 WrappedRange
0174 , Value
0175 , typename any_range_default_help<
0176 Reference
0177 , range_reference<WrappedRange>
0178 >::type
0179 >::type
0180 , typename any_range_default_help<
0181 Traversal
0182 , iterator_traversal<
0183 typename range_iterator<WrappedRange>::type
0184 >
0185 >::type
0186 , typename any_range_default_help<
0187 Reference
0188 , range_reference<WrappedRange>
0189 >::type
0190 , typename any_range_default_help<
0191 Difference
0192 , range_difference<WrappedRange>
0193 >::type
0194 , typename any_range_default_help<
0195 Buffer
0196 , mpl::identity<any_iterator_default_buffer>
0197 >::type
0198 > type;
0199 };
0200 }
0201
0202 using range_detail::any_range;
0203 using range_detail::any_range_type_generator;
0204 }
0205
0206 #endif