Go to the documentation of this file.
7 #ifndef BOOST_ITERATOR_FACADE_23022003THW_HPP
8 #define BOOST_ITERATOR_FACADE_23022003THW_HPP
56 template <
class T,
class U>
64 template<
typename CategoryOrTraversal,
typename Required >
66 public boost::is_convertible< typename iterator_category_to_traversal< CategoryOrTraversal >::type, Required >
79 is_interoperable< Facade1, Facade2 >
95 is_interoperable< Facade1, Facade2 >
96 , is_traversal_at_least< typename iterator_category< Facade1 >::type, random_access_traversal_tag >
97 , is_traversal_at_least< typename iterator_category< Facade2 >::type, random_access_traversal_tag >
109 ,
class CategoryOrTraversal
116 CategoryOrTraversal, ValueParam, Reference
128 # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
129 && (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452)) \
130 || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310))) \
131 || BOOST_WORKAROUND(BOOST_RWSTD_VER, BOOST_TESTED_AT(0x20101)) \
132 || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 310)
138 # define BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE 1
141 iterator<iterator_category, value_type, Difference, pointer, Reference>
152 template <
class Iterator>
178 template <
class Iterator>
221 operator Iterator
const&()
const
231 # ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
233 template <
class Reference,
class Value>
234 struct is_non_proxy_reference_impl
242 , Value
const volatile*
251 template <
class Reference,
class Value>
252 struct is_non_proxy_reference
254 is_non_proxy_reference_impl<Reference, Value>::value
258 template <
class Reference,
class Value>
261 typename remove_reference<Reference>::type
263 , Value const volatile*
283 template <
class Iterator,
class Value,
class Reference,
class CategoryOrTraversal>
295 , typename add_lvalue_reference<Value const>::type
302 typename iterator_category_to_traversal<CategoryOrTraversal>::type
303 , forward_traversal_tag
308 is_non_proxy_reference<Reference,Value>
309 , postfix_increment_proxy<Iterator>
310 , writable_postfix_increment_proxy<Iterator>
312 , mpl::identity<Iterator>
320 template <
class Reference,
class Po
inter>
339 template <
class T,
class Po
inter>
352 template <
class Iterator>
382 template <
class ValueType,
class Reference>
388 boost::is_POD<ValueType>
389 , iterator_writability_disabled<ValueType,Reference>
394 template <
class Iterator,
class Value,
class Reference>
404 template <
class Iterator>
410 template <
class Iterator>
418 template <
class I1,
class I2>
421 # ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
425 is_convertible<I2,I1>
426 , iterator_difference<I1>
427 , iterator_difference<I2>
437 ,
class CategoryOrTraversal
440 ,
bool IsBidirectionalTraversal
441 ,
bool IsRandomAccessTraversal
449 # ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
450 # define BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, enabler) \
452 class Derived1, class V1, class TC1, class Reference1, class Difference1 \
453 , class Derived2, class V2, class TC2, class Reference2, class Difference2 \
455 prefix typename mpl::apply2<result_type,Derived1,Derived2>::type \
457 iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs \
458 , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)
460 # define BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, enabler) \
462 class Derived1, class V1, class TC1, class Reference1, class Difference1 \
463 , class Derived2, class V2, class TC2, class Reference2, class Difference2 \
465 prefix typename enabler< \
467 , typename mpl::apply2<result_type,Derived1,Derived2>::type \
470 iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs \
471 , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)
474 # define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \
475 BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, boost::iterators::detail::enable_if_interoperable)
477 # define BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(prefix, op, result_type) \
478 BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, boost::iterators::detail::enable_if_interoperable_and_random_access_traversal)
480 # define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args) \
481 template <class Derived, class V, class TC, class R, class D> \
482 prefix typename boost::iterators::enable_if< \
483 boost::iterators::detail::is_traversal_at_least< TC, boost::iterators::random_access_traversal_tag >, \
485 >::type operator+ args
498 # if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
505 template <
class I,
class V,
class TC,
class R,
class D,
bool IsB
idirectionalTraversal,
bool IsRandomAccessTraversal>
508 # define BOOST_ITERATOR_FACADE_RELATION(op) \
509 BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, boost::iterators::detail::always_bool2);
514 # undef BOOST_ITERATOR_FACADE_RELATION
516 # define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op) \
517 BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(friend,op, boost::iterators::detail::always_bool2);
524 # undef BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION
533 ,
typename Derived::difference_type)
539 , (
typename Derived::difference_type
546 template <
class Facade>
549 return f.dereference();
552 template <
class Facade>
558 template <
class Facade>
564 template <
class Facade1,
class Facade2>
570 template <
class Facade1,
class Facade2>
576 template <
class Facade>
577 static void advance(Facade& f,
typename Facade::difference_type n)
582 template <
class Facade1,
class Facade2>
584 Facade1
const& f1, Facade2
const& f2,
mpl::true_)
586 return -f1.distance_to(f2);
589 template <
class Facade1,
class Facade2>
593 return f2.distance_to(f1);
599 template <
class I,
class V,
class TC,
class R,
class D>
602 return *
static_cast<I*
>(&facade);
605 template <
class I,
class V,
class TC,
class R,
class D>
608 return *
static_cast<I const*
>(&facade);
621 ,
class CategoryOrTraversal
626 # ifdef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE
628 Value, CategoryOrTraversal, Reference, Difference
630 # undef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE
635 Value, CategoryOrTraversal, Reference, Difference
660 return operator_arrow_dispatch_::apply(*this->derived());
666 return this->derived();
675 return *
static_cast<Derived*
>(
this);
680 return *
static_cast<Derived const*
>(
this);
688 ,
class CategoryOrTraversal
693 public iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, false, false >
699 return this->derived();
704 Derived tmp(this->derived());
714 ,
class CategoryOrTraversal
719 public iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false >
734 return boost::iterators::detail::make_operator_brackets_result<Derived>(
743 return this->derived();
749 return this->derived();
754 Derived result(this->derived());
768 ,
class CategoryOrTraversal
769 ,
class Reference = Value&
770 ,
class Difference = std::ptrdiff_t
773 public detail::iterator_facade_base<
779 detail::is_traversal_at_least< CategoryOrTraversal, bidirectional_traversal_tag >::value,
780 detail::is_traversal_at_least< CategoryOrTraversal, random_access_traversal_tag >::value
788 template <
class I,
class V,
class TC,
class R,
class D>
796 tmp(*
static_cast<I*
>(&
i));
871 # ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
872 # define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_()
874 # define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()
877 # define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \
878 BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type) \
881 BOOST_STATIC_ASSERT(( \
882 is_interoperable< Derived1, Derived2 >::value \
884 return_prefix iterator_core_access::base_op( \
885 *static_cast<Derived1 const*>(&lhs) \
886 , *static_cast<Derived2 const*>(&rhs) \
887 , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1) \
891 # define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \
892 BOOST_ITERATOR_FACADE_INTEROP( \
894 , boost::iterators::detail::always_bool2 \
902 # undef BOOST_ITERATOR_FACADE_RELATION
905 # define BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(op, result_type, return_prefix, base_op) \
906 BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(inline, op, result_type) \
909 BOOST_STATIC_ASSERT(( \
910 is_interoperable< Derived1, Derived2 >::value && \
911 boost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived1 >::type, random_access_traversal_tag >::value && \
912 boost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived2 >::type, random_access_traversal_tag >::value \
914 return_prefix iterator_core_access::base_op( \
915 *static_cast<Derived1 const*>(&lhs) \
916 , *static_cast<Derived2 const*>(&rhs) \
917 , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1) \
921 # define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op, return_prefix, base_op) \
922 BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS( \
924 , boost::iterators::detail::always_bool2 \
934 # undef BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION
944 # undef BOOST_ITERATOR_FACADE_INTEROP
945 # undef BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS
947 # define BOOST_ITERATOR_FACADE_PLUS(args) \
948 BOOST_ITERATOR_FACADE_PLUS_HEAD(inline, args) \
950 Derived tmp(static_cast<Derived const&>(i)); \
956 ,
typename Derived::difference_type n
960 typename Derived::difference_type n
964 # undef BOOST_ITERATOR_FACADE_PLUS
965 # undef BOOST_ITERATOR_FACADE_PLUS_HEAD
967 # undef BOOST_ITERATOR_FACADE_INTEROP_HEAD
968 # undef BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD
969 # undef BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL
980 #endif // BOOST_ITERATOR_FACADE_23022003THW_HPP
static bool equal(Facade1 const &f1, Facade2 const &f2, mpl::true_)
#define BOOST_STATIC_CONSTANT(type, assignment)
boost::iterators::detail::iterator_facade_types< Value, CategoryOrTraversal, Reference, Difference > associated_types
BOOST_ITERATOR_FACADE_PLUS_HEAD(friend inline,(iterator_facade< Derived, V, TC, R, D > const &, typename Derived::difference_type))
Derived operator-(difference_type x) const
iterator_facade< Derived, Value, CategoryOrTraversal, Reference, Difference > iterator_facade_
#define BOOST_ITERATOR_FACADE_RELATION(op)
iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false > base_type
static result_type apply(T &x)
static result_type apply(Reference const &x)
T & operator=(T &x) const
facade_iterator_category< CategoryOrTraversal, ValueParam, Reference >::type iterator_category
static I & derived(iterator_facade< I, V, TC, R, D > &facade)
static I const & derived(iterator_facade< I, V, TC, R, D > const &facade)
operator_brackets_proxy(Iterator const &iter)
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
operator_brackets_proxy & operator=(value_type const &val)
BOOST_FORCEINLINE T * addressof(T &v)
operator_arrow_dispatch_::result_type pointer
base_type::difference_type difference_type
boost::iterators::detail::operator_brackets_result< Derived, Value, reference >::type operator[](difference_type n) const
#define BOOST_ITERATOR_FACADE_PLUS(args)
mpl::eval_if< boost::iterators::detail::iterator_writability_disabled< ValueParam, Reference >, add_pointer< const value_type >, add_pointer< value_type > >::type pointer
proxy(Reference const &x)
mpl::if_< use_operator_brackets_proxy< Value, Reference >, operator_brackets_proxy< Iterator >, Value >::type type
operator_brackets_proxy< Iterator > make_operator_brackets_result(Iterator const &iter, mpl::true_)
BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(-, boost::iterators::detail::choose_difference_type, return, distance_from) BOOST_ITERATOR_FACADE_PLUS((iterator_facade< Derived
Difference difference_type
T const & operator=(T const &x) const
associated_types::iterator_category iterator_category
iterator_value< Iterator >::type value_type
boost::iterators::detail::postfix_increment_result< I, V, R, TC >::type operator++(iterator_facade< I, V, TC, R, D > &i, int)
boost::iterators::detail::operator_arrow_dispatch< Reference, typename associated_types::pointer > operator_arrow_dispatch_
remove_const< ValueParam >::type value_type
pointer operator->() const
static Facade::reference dereference(Facade const &f)
BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(friend, -, boost::iterators::detail::choose_difference_type)
Derived & operator-=(difference_type n)
iterator_value< Iterator >::type value_type
Iterator::reference reference
Derived const & derived() const
static Facade2::difference_type distance_from(Facade1 const &f1, Facade2 const &f2, mpl::false_)
#define BOOST_DELETED_FUNCTION(fun)
static void increment(Facade &f)
writable_postfix_increment_proxy(Iterator const &x)
value_type & operator*() const
static bool equal(Facade1 const &f1, Facade2 const &f2, mpl::false_)
associated_types::value_type value_type
base_type::reference reference
postfix_increment_proxy(Iterator const &x)
#define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op)
static Facade1::difference_type distance_from(Facade1 const &f1, Facade2 const &f2, mpl::true_)
static void advance(Facade &f, typename Facade::difference_type n)
reference operator*() const
static void decrement(Facade &f)
Iterator::value_type value_type
boost::detail::iterator_traits< Iterator >::value_type type
writable_postfix_increment_proxy const & operator*() const
Derived & operator+=(difference_type n)
sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:40:43