Navigation: Up, Table of Contents, Bibliography, Index, Title Page

Definition

The adaptor CGAL_Forward_container_from_circulator<C> is a class that converts any circulator type C to a kind of containerclass, i.e. a class that provides an iterator and a const_iterator type and two member functions - begin() and end() - that return the appropriate forward iterators. By analogy with \stl container classes, these member functions return a const iterator in the case that the container itself is constant, and a mutable iterator otherwise.

For CGAL_Forward_container_from_circulator<C> the circulator has to fulfill at least the requirements for a forward circulator. The similar adaptor CGAL_Bidirectional_container_from_circulator<C> requires a bidirectional circulator to provide bidirectional iterators. Likewise, the adaptor CGAL_Random_access_container_from_circulator<C> requires a random access circulator to provide random access iterators. In this case the adaptor implements a total ordering relation that is currently not required for random access circulators.

#include < CGAL/circulator.h>

Types

CGAL_Forward_container_from_circulator<C>::Circulator
the template argument C.

CGAL_Forward_container_from_circulator<C>::iterator
CGAL_Forward_container_from_circulator<C>::const_iterator

Creation

CGAL_Forward_container_from_circulator<C> container;
the resulting iterators will have a singular value.

CGAL_Forward_container_from_circulator<C> container ( C c);
the resulting iterators will have a singular value if the circulator c is singular.

CGAL_Bidirectional_container_from_circulator<C> container;
the resulting iterators will have a singular value.

CGAL_Bidirectional_container_from_circulator<C> container ( C c);
the resulting iterators will have a singular value if the circulator c is singular.

CGAL_Random_access_container_from_circulator<C> container;
the resulting iterators will have a singular value.

CGAL_Random_access_container_from_circulator<C> container ( C c);
the resulting iterators will have a singular value if the circulator c is singular.

Operations

iterator container.begin () the start iterator.
const_iterator container.begin () const the start const iterator.
iterator container.end () the past-the-end iterator.
const_iterator container.end () const the past-the-end const iterator.

The iterator and const_iterator types are of the appropriate iterator category. In addition to the operations required for their category, they have a member function current_circulator() that returns a circulator pointing to the same position as the iterator does.

Example

The generic reverse() algorithm from the \stl can be used with an adaptor when at least a bidirectional circulator c is given.

Circulator c;  /* c is assumed to be a bidirectional circulator. */
CGAL_Bidirectional_container_from_circulator<Circulator> container( c);
reverse( container.begin(), container.end());

Implementation

The forward and bidirectional iterator adaptors keep track of the number of rounds a circulator has done around the ring-like data structure. This is a kind of winding number. It is used to distinguish between the start position and the end position which will be denoted by the same circulator. This winding number is zero for the begin()-iterator and one for the end()-iterator. It is incremented whenever a circulator passes the begin() position. Two iterators are equal if their internally used circulators and winding numbers are equal. This is more general than necessary since the end()-iterator is not supposed to move any more.

The random access iterator has to be able to compute the size of the data structure. It is needed for the difference of a past-the-end iterator and the begin iterator. Therefore, the constructor for the random access iterator choose the minimal circulator for the internal anchor position. The minimal circulator is part of the random access circulator requirements, see Section reference arrow.


Next: Class declaration of CGAL_..._circulator_from_iterator<I,T,Size,Dist>
Navigation: Up, Table of Contents, Bibliography, Index, Title Page
The CGAL Project. Mon, June 30, 1997.