\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)

CGAL 4.8 - Handles and Circulators

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Modules | Classes
Handles and Circulators Reference

##

Olivier Devillers, Lutz Kettner, Sylvain Pion, Michael Seel, and Mariette Yvinec
This package descibes handles and circulators. They are related to iterators. Handles allow to dereference but neither to increment nor to decrement. Circulators have no notion of past-the-end, and they are used in CGAL whenever we have cyclic stuctures.

Introduced in: CGAL 1.0
BibTeX: cgal:dksy-hc-16a
License: LGPL

The concept of iterators in the STL is tailored for linear sequences.

CGAL extends this in several directions. First, it supports the notion of `Handle` (also sometimes refered to as the trivial iterator) which is used to document that no traversal operation is needed, only reference to an element. It also uses the `Range` and `ConstRange` concepts which encapsulates the access to both the first and the past-the-end iterators of an iterator range.

Besides linear sequences, circular sequences also occur naturally in many combinatorial and geometric structures. Examples are polyhedral surfaces and planar maps, where the edges emanating from a vertex or the edges around a facet form a circular sequence.

We provide several functions, classes and macros to assist in working with circulators: distance computation, adaptor classes converting between circulators and iterators, base classes to ease the implementation of circulators, and support for generic algorithms that work with circulators as well as with iterators.

## Classified Reference Pages

## Concepts

- `Handle`
- `Range`
- `ConstRange`
- `Circulator`
- `ForwardCirculator`
- `BidirectionalCirculator`
- `RandomAccessCirculator`

## Classes

- `CGAL::Container_from_circulator<C>`
- `CGAL::Circulator_from_iterator<I>`
- `CGAL::Circulator_from_container<C>`
- `CGAL::Const_circulator_from_container<C>`
- `CGAL::Circulator_tag`
- `CGAL::Iterator_tag`
- `CGAL::Forward_circulator_tag`
- `CGAL::Bidirectional_circulator_tag`
- `CGAL::Random_access_circulator_tag`
- `CGAL::Circulator_base`
- `CGAL::Forward_circulator_base`
- `CGAL::Bidirectional_circulator_base`
- `CGAL::Random_access_circulator_base`
- `CGAL::Circulator_traits<C>`

## Modules
| Concepts
| Adapters for Iterators and Containers
| Functions
| Compile Time Tags
| Iterators and circulators as well as different categories of circulators can be distinguished with the use of discriminating functions and the following circulator tags.
| Assertions
| Each of the following assertions, applicable to an iterator or a circulator or both, checks at compile time if its argument is of the kind stated in the assertions name, i.e. a circulator, an iterator, or a particular category of either an iterator or a circulator.
| Base Classes
| Implementation

## Classes
class | CGAL::Circulator_traits< C >
| The circulator traits class distinguishes between circulators and iterators. More...