CGAL 6.1 - Handles and Circulators

Loading...
Searching...
No Matches
Circulator/circulator_prog3.cpp
#include <cassert>
#include <list>
#include <CGAL/circulator.h>
template <class C> inline int foo( C c, std::forward_iterator_tag) {
CGAL::Assert_circulator( c);
CGAL::Assert_forward_category( c);
return 1;
}
template <class C> inline int foo( C c, std::random_access_iterator_tag) {
CGAL::Assert_circulator( c);
CGAL::Assert_random_access_category( c);
return 2;
}
template <class I> inline int foo( I i, CGAL::Iterator_tag) {
CGAL::Assert_iterator( i);
return 3;
}
template <class C> inline int foo( C c, CGAL::Circulator_tag) {
CGAL::Assert_circulator( c);
typedef std::iterator_traits<C> Traits;
typedef typename Traits::iterator_category iterator_category;
return foo( c, iterator_category());
}
template <class IC> inline int foo( IC ic) {
typedef CGAL::Circulator_traits<IC> Traits;
typedef typename Traits::category category;
return foo( ic, category());
}
int main() {
typedef CGAL::Forward_circulator_base<int> F;
typedef CGAL::Random_access_circulator_base<int> R;
F f = F();
R r = R();
std::list<int> l;
assert( foo( f) == 1);
assert( foo( r) == 2);
assert( foo( l.begin()) == 3);
return 0;
}
CGAL::Assert_iterator
void Assert_iterator(const I &i)
checks at compile time if its argument is an iterator.
CGAL::Assert_circulator
void Assert_circulator(const C &c)
checks at compile time if its argument is a circulator.
CGAL::Assert_random_access_category
void Assert_random_access_category(const IC &ic)
CGAL::Assert_forward_category
void Assert_forward_category(const IC &ic)
CGAL::Circulator_tag
A tag for any circulator type.
Definition: circulator_bases.h:53
CGAL::Circulator_traits
The circulator traits class distinguishes between circulators and iterators.
Definition: circulator.h:343
CGAL::Forward_circulator_base
Definition: circulator_bases.h:94
CGAL::Iterator_tag
A tag for any iterator type.
Definition: circulator_bases.h:59
CGAL::Random_access_circulator_base
Definition: circulator_bases.h:106