annotate DEPENDENCIES/generic/include/boost/range/detail/any_iterator_wrapper.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +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_WRAPPER_HPP_INCLUDED
Chris@16 11 #define BOOST_RANGE_DETAIL_ANY_ITERATOR_WRAPPER_HPP_INCLUDED
Chris@16 12
Chris@16 13 #include <boost/cast.hpp>
Chris@16 14 #include <boost/range/config.hpp>
Chris@16 15 #include <boost/range/detail/any_iterator_interface.hpp>
Chris@16 16 #include <boost/range/concepts.hpp>
Chris@16 17
Chris@16 18 namespace boost
Chris@16 19 {
Chris@16 20 namespace range_detail
Chris@16 21 {
Chris@101 22 template<typename TargetT, typename SourceT>
Chris@101 23 TargetT& polymorphic_ref_downcast(SourceT& source)
Chris@101 24 {
Chris@101 25 #ifdef BOOST_NO_RTTI
Chris@101 26 return static_cast<TargetT&>(source);
Chris@101 27 #else
Chris@101 28 return *boost::polymorphic_downcast<TargetT*>(&source);
Chris@101 29 #endif
Chris@101 30 }
Chris@101 31
Chris@101 32 template<class Reference, class T>
Chris@101 33 Reference dereference_cast(T& x)
Chris@101 34 {
Chris@101 35 return static_cast<Reference>(x);
Chris@101 36 }
Chris@101 37 template<class Reference, class T>
Chris@101 38 Reference dereference_cast(const T& x)
Chris@101 39 {
Chris@101 40 return static_cast<Reference>(const_cast<T&>(x));
Chris@101 41 }
Chris@101 42
Chris@16 43 template<
Chris@16 44 class WrappedIterator
Chris@16 45 , class Reference
Chris@16 46 , class Buffer
Chris@16 47 >
Chris@16 48 class any_incrementable_iterator_wrapper
Chris@16 49 : public any_incrementable_iterator_interface<
Chris@16 50 Reference
Chris@16 51 , Buffer
Chris@16 52 >
Chris@16 53 {
Chris@16 54 BOOST_RANGE_CONCEPT_ASSERT(( IncrementableIteratorConcept<WrappedIterator> ));
Chris@16 55 public:
Chris@16 56 typedef WrappedIterator wrapped_type;
Chris@16 57
Chris@16 58 BOOST_STATIC_ASSERT(( is_convertible<
Chris@16 59 typename iterator_reference<WrappedIterator>::type
Chris@16 60 , Reference
Chris@16 61 >::value ));
Chris@16 62
Chris@16 63 any_incrementable_iterator_wrapper()
Chris@16 64 : m_it()
Chris@16 65 {}
Chris@16 66
Chris@16 67 explicit any_incrementable_iterator_wrapper(wrapped_type it)
Chris@16 68 : m_it(it)
Chris@16 69 {}
Chris@16 70
Chris@16 71 // any_incrementable_iterator implementation
Chris@16 72 virtual any_incrementable_iterator_wrapper* clone(
Chris@16 73 typename any_incrementable_iterator_wrapper::buffer_type& buffer
Chris@16 74 ) const
Chris@16 75 {
Chris@16 76 return new (buffer.allocate(sizeof(*this)))
Chris@16 77 any_incrementable_iterator_wrapper(m_it);
Chris@16 78 }
Chris@16 79
Chris@16 80 virtual any_incrementable_iterator_wrapper<
Chris@16 81 WrappedIterator
Chris@16 82 , typename any_incrementable_iterator_wrapper::const_reference
Chris@16 83 , Buffer
Chris@16 84 >* clone_const_ref(
Chris@16 85 typename any_incrementable_iterator_wrapper::buffer_type& buffer
Chris@16 86 ) const
Chris@16 87 {
Chris@16 88 typedef any_incrementable_iterator_wrapper<
Chris@16 89 WrappedIterator
Chris@16 90 , typename any_incrementable_iterator_wrapper::const_reference
Chris@16 91 , Buffer
Chris@16 92 > result_type;
Chris@16 93
Chris@16 94 return new (buffer.allocate(sizeof(result_type)))
Chris@16 95 result_type(m_it);
Chris@16 96 }
Chris@16 97
Chris@16 98 virtual any_incrementable_iterator_wrapper<
Chris@16 99 WrappedIterator
Chris@16 100 , typename any_incrementable_iterator_wrapper::reference_as_value_type
Chris@16 101 , Buffer
Chris@16 102 >* clone_reference_as_value(
Chris@16 103 typename any_incrementable_iterator_wrapper::buffer_type& buffer
Chris@16 104 ) const
Chris@16 105 {
Chris@16 106 typedef any_incrementable_iterator_wrapper<
Chris@16 107 WrappedIterator
Chris@16 108 , typename any_incrementable_iterator_wrapper::reference_as_value_type
Chris@16 109 , Buffer
Chris@16 110 > result_type;
Chris@16 111
Chris@16 112 return new (buffer.allocate(sizeof(result_type)))
Chris@16 113 result_type(m_it);
Chris@16 114 }
Chris@16 115
Chris@16 116 virtual void increment()
Chris@16 117 {
Chris@16 118 ++m_it;
Chris@16 119 }
Chris@16 120
Chris@16 121 private:
Chris@16 122 wrapped_type m_it;
Chris@16 123 };
Chris@16 124
Chris@16 125 template<
Chris@16 126 class WrappedIterator
Chris@16 127 , class Reference
Chris@16 128 , class Buffer
Chris@16 129 >
Chris@16 130 class any_single_pass_iterator_wrapper
Chris@16 131 : public any_single_pass_iterator_interface<
Chris@16 132 Reference
Chris@16 133 , Buffer
Chris@16 134 >
Chris@16 135 {
Chris@16 136 struct disabler {};
Chris@16 137 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassIteratorConcept<WrappedIterator> ));
Chris@101 138 typedef any_single_pass_iterator_interface<
Chris@101 139 Reference,
Chris@101 140 Buffer
Chris@101 141 > base_type;
Chris@101 142
Chris@16 143 public:
Chris@101 144 typedef typename base_type::reference reference;
Chris@16 145
Chris@16 146 any_single_pass_iterator_wrapper()
Chris@16 147 : m_it()
Chris@16 148 {}
Chris@16 149
Chris@16 150 explicit any_single_pass_iterator_wrapper(const WrappedIterator& it)
Chris@16 151 : m_it(it)
Chris@16 152 {}
Chris@16 153 // any_single_pass_iterator_interface<Reference> implementation
Chris@16 154 virtual any_single_pass_iterator_wrapper* clone(
Chris@16 155 typename any_single_pass_iterator_wrapper::buffer_type& buffer
Chris@16 156 ) const
Chris@16 157 {
Chris@16 158 return new (buffer.allocate(sizeof(*this)))
Chris@16 159 any_single_pass_iterator_wrapper(m_it);
Chris@16 160 }
Chris@16 161
Chris@16 162 virtual any_single_pass_iterator_wrapper<
Chris@16 163 WrappedIterator
Chris@16 164 , typename any_single_pass_iterator_wrapper::const_reference
Chris@16 165 , Buffer
Chris@16 166 >* clone_const_ref(
Chris@16 167 typename any_single_pass_iterator_wrapper::buffer_type& buffer
Chris@16 168 ) const
Chris@16 169 {
Chris@16 170 typedef any_single_pass_iterator_wrapper<
Chris@16 171 WrappedIterator
Chris@16 172 , typename any_single_pass_iterator_wrapper::const_reference
Chris@16 173 , Buffer
Chris@16 174 > result_type;
Chris@16 175
Chris@16 176 return new (buffer.allocate(sizeof(result_type)))
Chris@16 177 result_type(m_it);
Chris@16 178 }
Chris@16 179
Chris@16 180 virtual any_single_pass_iterator_wrapper<
Chris@16 181 WrappedIterator
Chris@16 182 , typename any_single_pass_iterator_wrapper::reference_as_value_type
Chris@16 183 , Buffer
Chris@16 184 >* clone_reference_as_value(
Chris@16 185 typename any_single_pass_iterator_wrapper::buffer_type& buffer
Chris@16 186 ) const
Chris@16 187 {
Chris@16 188 typedef any_single_pass_iterator_wrapper<
Chris@16 189 WrappedIterator
Chris@16 190 , typename any_single_pass_iterator_wrapper::reference_as_value_type
Chris@16 191 , Buffer
Chris@16 192 > result_type;
Chris@16 193
Chris@16 194 return new (buffer.allocate(sizeof(result_type)))
Chris@16 195 result_type(m_it);
Chris@16 196 }
Chris@16 197
Chris@16 198 virtual void increment()
Chris@16 199 {
Chris@16 200 ++m_it;
Chris@16 201 }
Chris@16 202
Chris@16 203 virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
Chris@16 204 {
Chris@101 205 return m_it == range_detail::polymorphic_ref_downcast<const any_single_pass_iterator_wrapper>(other).m_it;
Chris@16 206 }
Chris@16 207
Chris@101 208 virtual reference dereference() const
Chris@16 209 {
Chris@101 210 return dereference_cast<reference>(*m_it);
Chris@16 211 }
Chris@16 212
Chris@16 213 private:
Chris@16 214 WrappedIterator m_it;
Chris@16 215 };
Chris@16 216
Chris@16 217 template<
Chris@16 218 class WrappedIterator
Chris@16 219 , class Reference
Chris@16 220 , class Buffer
Chris@16 221 >
Chris@16 222 class any_forward_iterator_wrapper
Chris@16 223 : public any_forward_iterator_interface<
Chris@16 224 Reference
Chris@16 225 , Buffer
Chris@16 226 >
Chris@16 227 {
Chris@16 228 BOOST_RANGE_CONCEPT_ASSERT(( ForwardIteratorConcept<WrappedIterator> ));
Chris@101 229 typedef any_forward_iterator_interface<
Chris@101 230 Reference,
Chris@101 231 Buffer
Chris@101 232 > base_type;
Chris@101 233
Chris@16 234 public:
Chris@101 235 typedef typename base_type::reference reference;
Chris@101 236
Chris@16 237 any_forward_iterator_wrapper()
Chris@16 238 : m_it()
Chris@16 239 {}
Chris@16 240
Chris@16 241 explicit any_forward_iterator_wrapper(const WrappedIterator& it)
Chris@16 242 : m_it(it)
Chris@16 243 {}
Chris@16 244
Chris@16 245 // any_forward_iterator_interface<Reference> implementation
Chris@16 246 virtual any_forward_iterator_wrapper* clone(
Chris@16 247 typename any_forward_iterator_wrapper::buffer_type& buffer
Chris@16 248 ) const
Chris@16 249 {
Chris@16 250 return new (buffer.allocate(sizeof(*this)))
Chris@16 251 any_forward_iterator_wrapper(m_it);
Chris@16 252 }
Chris@16 253
Chris@16 254 virtual any_forward_iterator_wrapper<
Chris@16 255 WrappedIterator
Chris@16 256 , typename any_forward_iterator_wrapper::const_reference
Chris@16 257 , Buffer
Chris@16 258 >* clone_const_ref(
Chris@16 259 typename any_forward_iterator_wrapper::buffer_type& buffer
Chris@16 260 ) const
Chris@16 261 {
Chris@16 262 typedef any_forward_iterator_wrapper<
Chris@16 263 WrappedIterator
Chris@16 264 , typename any_forward_iterator_wrapper::const_reference
Chris@16 265 , Buffer
Chris@16 266 > result_type;
Chris@16 267
Chris@16 268 return new (buffer.allocate(sizeof(result_type)))
Chris@16 269 result_type(m_it);
Chris@16 270 }
Chris@16 271
Chris@16 272 virtual any_forward_iterator_wrapper<
Chris@16 273 WrappedIterator
Chris@16 274 , typename any_forward_iterator_wrapper::reference_as_value_type
Chris@16 275 , Buffer
Chris@16 276 >* clone_reference_as_value(
Chris@16 277 typename any_forward_iterator_wrapper::buffer_type& buffer
Chris@16 278 ) const
Chris@16 279 {
Chris@16 280 typedef any_forward_iterator_wrapper<
Chris@16 281 WrappedIterator
Chris@16 282 , typename any_forward_iterator_wrapper::reference_as_value_type
Chris@16 283 , Buffer
Chris@16 284 > result_type;
Chris@16 285
Chris@16 286 return new (buffer.allocate(sizeof(result_type)))
Chris@16 287 result_type(m_it);
Chris@16 288 }
Chris@16 289
Chris@16 290 virtual void increment()
Chris@16 291 {
Chris@16 292 ++m_it;
Chris@16 293 }
Chris@16 294
Chris@16 295 virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
Chris@16 296 {
Chris@101 297 return m_it == range_detail::polymorphic_ref_downcast<const any_forward_iterator_wrapper>(other).m_it;
Chris@16 298 }
Chris@16 299
Chris@101 300 virtual reference dereference() const
Chris@16 301 {
Chris@101 302 return dereference_cast<reference>(*m_it);
Chris@16 303 }
Chris@16 304 private:
Chris@16 305 WrappedIterator m_it;
Chris@16 306 };
Chris@16 307
Chris@16 308 template<
Chris@16 309 class WrappedIterator
Chris@16 310 , class Reference
Chris@16 311 , class Buffer
Chris@16 312 >
Chris@16 313 class any_bidirectional_iterator_wrapper
Chris@16 314 : public any_bidirectional_iterator_interface<
Chris@16 315 Reference
Chris@16 316 , Buffer
Chris@16 317 >
Chris@16 318 {
Chris@16 319 BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalIteratorConcept<WrappedIterator> ));
Chris@101 320 typedef any_bidirectional_iterator_interface<
Chris@101 321 Reference,
Chris@101 322 Buffer
Chris@101 323 > base_type;
Chris@101 324
Chris@16 325 public:
Chris@101 326 typedef typename base_type::reference reference;
Chris@101 327
Chris@16 328 any_bidirectional_iterator_wrapper()
Chris@16 329 : m_it()
Chris@16 330 {
Chris@16 331 }
Chris@16 332
Chris@16 333 explicit any_bidirectional_iterator_wrapper(const WrappedIterator& it)
Chris@16 334 : m_it(it)
Chris@16 335 {
Chris@16 336 }
Chris@16 337
Chris@16 338 virtual any_bidirectional_iterator_wrapper* clone(
Chris@16 339 typename any_bidirectional_iterator_wrapper::buffer_type& buffer
Chris@16 340 ) const
Chris@16 341 {
Chris@16 342 return new (buffer.allocate(sizeof(*this)))
Chris@16 343 any_bidirectional_iterator_wrapper(*this);
Chris@16 344 }
Chris@16 345
Chris@16 346 virtual any_bidirectional_iterator_wrapper<
Chris@16 347 WrappedIterator
Chris@16 348 , typename any_bidirectional_iterator_wrapper::const_reference
Chris@16 349 , Buffer
Chris@16 350 >* clone_const_ref(
Chris@16 351 typename any_bidirectional_iterator_wrapper::buffer_type& buffer
Chris@16 352 ) const
Chris@16 353 {
Chris@16 354 typedef any_bidirectional_iterator_wrapper<
Chris@16 355 WrappedIterator
Chris@16 356 , typename any_bidirectional_iterator_wrapper::const_reference
Chris@16 357 , Buffer
Chris@16 358 > result_type;
Chris@16 359
Chris@16 360 return new (buffer.allocate(sizeof(result_type)))
Chris@16 361 result_type(m_it);
Chris@16 362 }
Chris@16 363
Chris@16 364 virtual any_bidirectional_iterator_wrapper<
Chris@16 365 WrappedIterator
Chris@16 366 , typename any_bidirectional_iterator_wrapper::reference_as_value_type
Chris@16 367 , Buffer
Chris@16 368 >* clone_reference_as_value(
Chris@16 369 typename any_bidirectional_iterator_wrapper::buffer_type& buffer
Chris@16 370 ) const
Chris@16 371 {
Chris@16 372 typedef any_bidirectional_iterator_wrapper<
Chris@16 373 WrappedIterator
Chris@16 374 , typename any_bidirectional_iterator_wrapper::reference_as_value_type
Chris@16 375 , Buffer
Chris@16 376 > result_type;
Chris@16 377
Chris@16 378 return new (buffer.allocate(sizeof(result_type)))
Chris@16 379 result_type(m_it);
Chris@16 380 }
Chris@16 381
Chris@16 382 virtual void increment()
Chris@16 383 {
Chris@16 384 ++m_it;
Chris@16 385 }
Chris@16 386
Chris@16 387 virtual void decrement()
Chris@16 388 {
Chris@16 389 --m_it;
Chris@16 390 }
Chris@16 391
Chris@16 392 virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
Chris@16 393 {
Chris@101 394 return m_it == range_detail::polymorphic_ref_downcast<const any_bidirectional_iterator_wrapper>(other).m_it;
Chris@16 395 }
Chris@16 396
Chris@101 397 virtual reference dereference() const
Chris@16 398 {
Chris@101 399 return dereference_cast<reference>(*m_it);
Chris@16 400 }
Chris@16 401
Chris@16 402 private:
Chris@16 403 WrappedIterator m_it;
Chris@16 404 };
Chris@16 405
Chris@16 406 template<
Chris@16 407 class WrappedIterator
Chris@16 408 , class Reference
Chris@16 409 , class Difference
Chris@16 410 , class Buffer
Chris@16 411 >
Chris@16 412 class any_random_access_iterator_wrapper
Chris@16 413 : public any_random_access_iterator_interface<
Chris@16 414 Reference
Chris@16 415 , Difference
Chris@16 416 , Buffer
Chris@16 417 >
Chris@16 418 {
Chris@16 419 BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessIteratorConcept<WrappedIterator> ));
Chris@101 420 typedef any_random_access_iterator_interface<
Chris@101 421 Reference,
Chris@101 422 Difference,
Chris@101 423 Buffer
Chris@101 424 > base_type;
Chris@101 425
Chris@16 426 public:
Chris@101 427 typedef typename base_type::reference reference;
Chris@16 428 typedef Difference difference_type;
Chris@16 429
Chris@16 430 any_random_access_iterator_wrapper()
Chris@16 431 : m_it()
Chris@16 432 {
Chris@16 433 }
Chris@16 434
Chris@16 435 explicit any_random_access_iterator_wrapper(const WrappedIterator& other)
Chris@16 436 : m_it(other)
Chris@16 437 {
Chris@16 438 }
Chris@16 439
Chris@16 440 virtual any_random_access_iterator_wrapper* clone(
Chris@16 441 typename any_random_access_iterator_wrapper::buffer_type& buffer
Chris@16 442 ) const
Chris@16 443 {
Chris@16 444 return new (buffer.allocate(sizeof(*this)))
Chris@16 445 any_random_access_iterator_wrapper(*this);
Chris@16 446 }
Chris@16 447
Chris@16 448 virtual any_random_access_iterator_wrapper<
Chris@16 449 WrappedIterator
Chris@16 450 , typename any_random_access_iterator_wrapper::const_reference
Chris@16 451 , Difference
Chris@16 452 , Buffer
Chris@16 453 >* clone_const_ref(
Chris@16 454 typename any_random_access_iterator_wrapper::buffer_type& buffer
Chris@16 455 ) const
Chris@16 456 {
Chris@16 457 typedef any_random_access_iterator_wrapper<
Chris@16 458 WrappedIterator
Chris@16 459 , typename any_random_access_iterator_wrapper::const_reference
Chris@16 460 , Difference
Chris@16 461 , Buffer
Chris@16 462 > result_type;
Chris@16 463
Chris@16 464 return new (buffer.allocate(sizeof(result_type)))
Chris@16 465 result_type(m_it);
Chris@16 466 }
Chris@16 467
Chris@16 468 virtual any_random_access_iterator_wrapper<
Chris@16 469 WrappedIterator
Chris@16 470 , typename any_random_access_iterator_wrapper::reference_as_value_type
Chris@16 471 , Difference
Chris@16 472 , Buffer
Chris@16 473 >* clone_reference_as_value(
Chris@16 474 typename any_random_access_iterator_wrapper::buffer_type& buffer
Chris@16 475 ) const
Chris@16 476 {
Chris@16 477 typedef any_random_access_iterator_wrapper<
Chris@16 478 WrappedIterator
Chris@16 479 , typename any_random_access_iterator_wrapper::reference_as_value_type
Chris@16 480 , Difference
Chris@16 481 , Buffer
Chris@16 482 > result_type;
Chris@16 483
Chris@16 484 return new (buffer.allocate(sizeof(result_type)))
Chris@16 485 result_type(m_it);
Chris@16 486 }
Chris@16 487
Chris@16 488 virtual void increment()
Chris@16 489 {
Chris@16 490 ++m_it;
Chris@16 491 }
Chris@16 492
Chris@16 493 virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const
Chris@16 494 {
Chris@101 495 return m_it == range_detail::polymorphic_ref_downcast<const any_random_access_iterator_wrapper>(other).m_it;
Chris@16 496 }
Chris@16 497
Chris@16 498 virtual void decrement()
Chris@16 499 {
Chris@16 500 --m_it;
Chris@16 501 }
Chris@16 502
Chris@16 503 virtual void advance(Difference offset)
Chris@16 504 {
Chris@16 505 m_it += offset;
Chris@16 506 }
Chris@16 507
Chris@101 508 virtual reference dereference() const
Chris@16 509 {
Chris@101 510 return dereference_cast<reference>(*m_it);
Chris@16 511 }
Chris@16 512
Chris@16 513 virtual Difference distance_to(const any_random_access_iterator_interface<Reference, Difference, Buffer>& other) const
Chris@16 514 {
Chris@101 515 return range_detail::polymorphic_ref_downcast<const any_random_access_iterator_wrapper>(other).m_it - m_it;
Chris@16 516 }
Chris@16 517
Chris@16 518 private:
Chris@16 519 WrappedIterator m_it;
Chris@16 520 };
Chris@16 521
Chris@16 522 template<
Chris@16 523 class WrappedIterator
Chris@16 524 , class Traversal
Chris@16 525 , class Reference
Chris@16 526 , class Difference
Chris@16 527 , class Buffer
Chris@16 528 >
Chris@16 529 struct any_iterator_wrapper_type_generator;
Chris@16 530
Chris@16 531 template<
Chris@16 532 class WrappedIterator
Chris@16 533 , class Reference
Chris@16 534 , class Difference
Chris@16 535 , class Buffer
Chris@16 536 >
Chris@16 537 struct any_iterator_wrapper_type_generator<
Chris@16 538 WrappedIterator
Chris@16 539 , incrementable_traversal_tag
Chris@16 540 , Reference
Chris@16 541 , Difference
Chris@16 542 , Buffer
Chris@16 543 >
Chris@16 544 {
Chris@16 545 typedef any_incrementable_iterator_wrapper<
Chris@16 546 WrappedIterator
Chris@16 547 , Reference
Chris@16 548 , Buffer
Chris@16 549 > type;
Chris@16 550 };
Chris@16 551
Chris@16 552 template<
Chris@16 553 class WrappedIterator
Chris@16 554 , class Reference
Chris@16 555 , class Difference
Chris@16 556 , class Buffer
Chris@16 557 >
Chris@16 558 struct any_iterator_wrapper_type_generator<
Chris@16 559 WrappedIterator
Chris@16 560 , single_pass_traversal_tag
Chris@16 561 , Reference
Chris@16 562 , Difference
Chris@16 563 , Buffer
Chris@16 564 >
Chris@16 565 {
Chris@16 566 typedef any_single_pass_iterator_wrapper<
Chris@16 567 WrappedIterator
Chris@16 568 , Reference
Chris@16 569 , Buffer
Chris@16 570 > type;
Chris@16 571 };
Chris@16 572
Chris@16 573 template<
Chris@16 574 class WrappedIterator
Chris@16 575 , class Reference
Chris@16 576 , class Difference
Chris@16 577 , class Buffer
Chris@16 578 >
Chris@16 579 struct any_iterator_wrapper_type_generator<
Chris@16 580 WrappedIterator
Chris@16 581 , forward_traversal_tag
Chris@16 582 , Reference
Chris@16 583 , Difference
Chris@16 584 , Buffer
Chris@16 585 >
Chris@16 586 {
Chris@16 587 typedef any_forward_iterator_wrapper<
Chris@16 588 WrappedIterator
Chris@16 589 , Reference
Chris@16 590 , Buffer
Chris@16 591 > type;
Chris@16 592 };
Chris@16 593
Chris@16 594 template<
Chris@16 595 class WrappedIterator
Chris@16 596 , class Reference
Chris@16 597 , class Difference
Chris@16 598 , class Buffer
Chris@16 599 >
Chris@16 600 struct any_iterator_wrapper_type_generator<
Chris@16 601 WrappedIterator
Chris@16 602 , bidirectional_traversal_tag
Chris@16 603 , Reference
Chris@16 604 , Difference
Chris@16 605 , Buffer
Chris@16 606 >
Chris@16 607 {
Chris@16 608 typedef any_bidirectional_iterator_wrapper<
Chris@16 609 WrappedIterator
Chris@16 610 , Reference
Chris@16 611 , Buffer
Chris@16 612 > type;
Chris@16 613 };
Chris@16 614
Chris@16 615 template<
Chris@16 616 class WrappedIterator
Chris@16 617 , class Reference
Chris@16 618 , class Difference
Chris@16 619 , class Buffer
Chris@16 620 >
Chris@16 621 struct any_iterator_wrapper_type_generator<
Chris@16 622 WrappedIterator
Chris@16 623 , random_access_traversal_tag
Chris@16 624 , Reference
Chris@16 625 , Difference
Chris@16 626 , Buffer
Chris@16 627 >
Chris@16 628 {
Chris@16 629 typedef any_random_access_iterator_wrapper<
Chris@16 630 WrappedIterator
Chris@16 631 , Reference
Chris@16 632 , Difference
Chris@16 633 , Buffer
Chris@16 634 > type;
Chris@16 635 };
Chris@16 636
Chris@16 637 } // namespace range_detail
Chris@16 638 } // namespace boost
Chris@16 639
Chris@16 640 #endif // include guard