annotate DEPENDENCIES/generic/include/boost/range/detail/any_iterator_interface.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // Boost.Range library
Chris@16 2 //
Chris@16 3 // Copyright Neil Groves 2010. Use, modification and
Chris@16 4 // distribution is subject to the Boost Software License, Version
Chris@16 5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //
Chris@16 8 // For more information, see http://www.boost.org/libs/range/
Chris@16 9 //
Chris@16 10 #ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_INTERFACE_HPP_INCLUDED
Chris@16 11 #define BOOST_RANGE_DETAIL_ANY_ITERATOR_INTERFACE_HPP_INCLUDED
Chris@16 12
Chris@16 13 #include <boost/range/detail/any_iterator_buffer.hpp>
Chris@16 14 #include <boost/iterator/iterator_categories.hpp>
Chris@16 15 #include <boost/type_traits/add_const.hpp>
Chris@16 16 #include <boost/type_traits/add_reference.hpp>
Chris@16 17 #include <boost/type_traits/is_reference.hpp>
Chris@16 18 #include <boost/type_traits/remove_const.hpp>
Chris@16 19 #include <boost/type_traits/remove_reference.hpp>
Chris@16 20
Chris@16 21 namespace boost
Chris@16 22 {
Chris@16 23 namespace range_detail
Chris@16 24 {
Chris@16 25 template<class T>
Chris@16 26 struct const_reference_type_generator
Chris@16 27 {
Chris@16 28 typedef typename mpl::if_<
Chris@16 29 typename is_reference<T>::type,
Chris@101 30 typename add_const<
Chris@101 31 typename remove_reference<T>::type
Chris@101 32 >::type&,
Chris@101 33 T
Chris@101 34 >::type type;
Chris@101 35 };
Chris@101 36
Chris@101 37 template<class T>
Chris@101 38 struct mutable_reference_type_generator
Chris@101 39 {
Chris@101 40 typedef typename mpl::if_<
Chris@101 41 typename mpl::and_<
Chris@101 42 typename is_const<T>::type,
Chris@101 43 typename mpl::not_<typename is_reference<T>::type>::type
Chris@16 44 >::type,
Chris@101 45 T,
Chris@101 46 typename add_reference<T>::type
Chris@16 47 >::type type;
Chris@16 48 };
Chris@16 49
Chris@16 50 template<
Chris@16 51 class Reference
Chris@16 52 , class Buffer
Chris@16 53 >
Chris@16 54 struct any_incrementable_iterator_interface
Chris@16 55 {
Chris@101 56 typedef typename mutable_reference_type_generator<
Chris@101 57 Reference
Chris@101 58 >::type reference;
Chris@101 59
Chris@16 60 typedef typename const_reference_type_generator<
Chris@16 61 Reference
Chris@16 62 >::type const_reference;
Chris@101 63
Chris@16 64 typedef typename remove_const<
Chris@16 65 typename remove_reference<Reference>::type
Chris@16 66 >::type reference_as_value_type;
Chris@16 67
Chris@16 68 typedef Buffer buffer_type;
Chris@16 69
Chris@16 70 virtual ~any_incrementable_iterator_interface() {}
Chris@16 71
Chris@16 72 virtual any_incrementable_iterator_interface*
Chris@16 73 clone(buffer_type& buffer) const = 0;
Chris@16 74
Chris@16 75 virtual any_incrementable_iterator_interface<const_reference, Buffer>*
Chris@16 76 clone_const_ref(buffer_type& buffer) const = 0;
Chris@16 77
Chris@16 78 virtual any_incrementable_iterator_interface<reference_as_value_type, Buffer>*
Chris@16 79 clone_reference_as_value(buffer_type& buffer) const = 0;
Chris@16 80
Chris@16 81 virtual void increment() = 0;
Chris@16 82 };
Chris@16 83
Chris@16 84 template<
Chris@16 85 class Reference
Chris@16 86 , class Buffer
Chris@16 87 >
Chris@16 88 struct any_single_pass_iterator_interface
Chris@16 89 : any_incrementable_iterator_interface<Reference, Buffer>
Chris@16 90 {
Chris@16 91 typedef typename any_incrementable_iterator_interface<Reference, Buffer>::reference reference;
Chris@16 92 typedef typename any_incrementable_iterator_interface<Reference, Buffer>::const_reference const_reference;
Chris@16 93 typedef typename any_incrementable_iterator_interface<Reference, Buffer>::buffer_type buffer_type;
Chris@16 94 typedef typename any_incrementable_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;
Chris@16 95
Chris@16 96 virtual any_single_pass_iterator_interface*
Chris@16 97 clone(buffer_type& buffer) const = 0;
Chris@16 98
Chris@16 99 virtual any_single_pass_iterator_interface<const_reference, Buffer>*
Chris@16 100 clone_const_ref(buffer_type& buffer) const = 0;
Chris@16 101
Chris@16 102 virtual any_single_pass_iterator_interface<reference_as_value_type, Buffer>*
Chris@16 103 clone_reference_as_value(buffer_type& buffer) const = 0;
Chris@16 104
Chris@101 105 virtual reference dereference() const = 0;
Chris@16 106
Chris@16 107 virtual bool equal(const any_single_pass_iterator_interface& other) const = 0;
Chris@16 108 };
Chris@16 109
Chris@16 110 template<
Chris@16 111 class Reference
Chris@16 112 , class Buffer
Chris@16 113 >
Chris@16 114 struct any_forward_iterator_interface
Chris@16 115 : any_single_pass_iterator_interface<Reference, Buffer>
Chris@16 116 {
Chris@16 117 typedef typename any_single_pass_iterator_interface<Reference, Buffer>::reference reference;
Chris@16 118 typedef typename any_single_pass_iterator_interface<Reference, Buffer>::const_reference const_reference;
Chris@16 119 typedef typename any_single_pass_iterator_interface<Reference, Buffer>::buffer_type buffer_type;
Chris@16 120 typedef typename any_single_pass_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;
Chris@16 121
Chris@16 122 virtual any_forward_iterator_interface*
Chris@16 123 clone(buffer_type& buffer) const = 0;
Chris@16 124
Chris@16 125 virtual any_forward_iterator_interface<const_reference, Buffer>*
Chris@16 126 clone_const_ref(buffer_type& buffer) const = 0;
Chris@16 127
Chris@16 128 virtual any_forward_iterator_interface<reference_as_value_type, Buffer>*
Chris@16 129 clone_reference_as_value(buffer_type& buffer) const = 0;
Chris@16 130 };
Chris@16 131
Chris@16 132 template<
Chris@16 133 class Reference
Chris@16 134 , class Buffer
Chris@16 135 >
Chris@16 136 struct any_bidirectional_iterator_interface
Chris@16 137 : any_forward_iterator_interface<Reference, Buffer>
Chris@16 138 {
Chris@16 139 typedef typename any_forward_iterator_interface<Reference, Buffer>::reference reference;
Chris@16 140 typedef typename any_forward_iterator_interface<Reference, Buffer>::const_reference const_reference;
Chris@16 141 typedef typename any_forward_iterator_interface<Reference, Buffer>::buffer_type buffer_type;
Chris@16 142 typedef typename any_forward_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;
Chris@16 143
Chris@16 144 virtual any_bidirectional_iterator_interface*
Chris@16 145 clone(buffer_type& buffer) const = 0;
Chris@16 146
Chris@16 147 virtual any_bidirectional_iterator_interface<const_reference, Buffer>*
Chris@16 148 clone_const_ref(buffer_type& buffer) const = 0;
Chris@16 149
Chris@16 150 virtual any_bidirectional_iterator_interface<reference_as_value_type, Buffer>*
Chris@16 151 clone_reference_as_value(buffer_type& buffer) const = 0;
Chris@16 152
Chris@16 153 virtual void decrement() = 0;
Chris@16 154 };
Chris@16 155
Chris@16 156 template<
Chris@16 157 class Reference
Chris@16 158 , class Difference
Chris@16 159 , class Buffer
Chris@16 160 >
Chris@16 161 struct any_random_access_iterator_interface
Chris@16 162 : any_bidirectional_iterator_interface<
Chris@16 163 Reference
Chris@16 164 , Buffer
Chris@16 165 >
Chris@16 166 {
Chris@16 167 typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::reference reference;
Chris@16 168 typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::const_reference const_reference;
Chris@16 169 typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::buffer_type buffer_type;
Chris@16 170 typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;
Chris@16 171 typedef Difference difference_type;
Chris@16 172
Chris@16 173 virtual any_random_access_iterator_interface*
Chris@16 174 clone(buffer_type& buffer) const = 0;
Chris@16 175
Chris@16 176 virtual any_random_access_iterator_interface<const_reference, Difference, Buffer>*
Chris@16 177 clone_const_ref(buffer_type& buffer) const = 0;
Chris@16 178
Chris@16 179 virtual any_random_access_iterator_interface<reference_as_value_type, Difference, Buffer>*
Chris@16 180 clone_reference_as_value(buffer_type& buffer) const = 0;
Chris@16 181
Chris@16 182 virtual void advance(Difference offset) = 0;
Chris@16 183
Chris@16 184 virtual Difference distance_to(const any_random_access_iterator_interface& other) const = 0;
Chris@16 185 };
Chris@16 186
Chris@16 187 template<
Chris@16 188 class Traversal
Chris@16 189 , class Reference
Chris@16 190 , class Difference
Chris@16 191 , class Buffer
Chris@16 192 >
Chris@16 193 struct any_iterator_interface_type_generator;
Chris@16 194
Chris@16 195 template<
Chris@16 196 class Reference
Chris@16 197 , class Difference
Chris@16 198 , class Buffer
Chris@16 199 >
Chris@16 200 struct any_iterator_interface_type_generator<
Chris@16 201 incrementable_traversal_tag
Chris@16 202 , Reference
Chris@16 203 , Difference
Chris@16 204 , Buffer
Chris@16 205 >
Chris@16 206 {
Chris@16 207 typedef any_incrementable_iterator_interface<Reference, Buffer> type;
Chris@16 208 };
Chris@16 209
Chris@16 210 template<
Chris@16 211 class Reference
Chris@16 212 , class Difference
Chris@16 213 , class Buffer
Chris@16 214 >
Chris@16 215 struct any_iterator_interface_type_generator<
Chris@16 216 single_pass_traversal_tag
Chris@16 217 , Reference
Chris@16 218 , Difference
Chris@16 219 , Buffer
Chris@16 220 >
Chris@16 221 {
Chris@16 222 typedef any_single_pass_iterator_interface<Reference, Buffer> type;
Chris@16 223 };
Chris@16 224
Chris@16 225 template<
Chris@16 226 class Reference
Chris@16 227 , class Difference
Chris@16 228 , class Buffer
Chris@16 229 >
Chris@16 230 struct any_iterator_interface_type_generator<
Chris@16 231 forward_traversal_tag
Chris@16 232 , Reference
Chris@16 233 , Difference
Chris@16 234 , Buffer
Chris@16 235 >
Chris@16 236 {
Chris@16 237 typedef any_forward_iterator_interface<Reference, Buffer> type;
Chris@16 238 };
Chris@16 239
Chris@16 240 template<
Chris@16 241 class Reference
Chris@16 242 , class Difference
Chris@16 243 , class Buffer
Chris@16 244 >
Chris@16 245 struct any_iterator_interface_type_generator<
Chris@16 246 bidirectional_traversal_tag
Chris@16 247 , Reference
Chris@16 248 , Difference
Chris@16 249 , Buffer
Chris@16 250 >
Chris@16 251 {
Chris@16 252 typedef any_bidirectional_iterator_interface<Reference, Buffer> type;
Chris@16 253 };
Chris@16 254
Chris@16 255 template<
Chris@16 256 class Reference
Chris@16 257 , class Difference
Chris@16 258 , class Buffer
Chris@16 259 >
Chris@16 260 struct any_iterator_interface_type_generator<
Chris@16 261 random_access_traversal_tag
Chris@16 262 , Reference
Chris@16 263 , Difference
Chris@16 264 , Buffer
Chris@16 265 >
Chris@16 266 {
Chris@16 267 typedef any_random_access_iterator_interface<
Chris@16 268 Reference
Chris@16 269 , Difference
Chris@16 270 , Buffer
Chris@16 271 > type;
Chris@16 272 };
Chris@16 273
Chris@16 274 } // namespace range_detail
Chris@16 275 } // namespace boost
Chris@16 276
Chris@16 277 #endif // include guard