CGAL 4.7 - 2D Triangulation Data Structure: TriangulationDSVertexBase_2 Concept Reference

\( \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.7 - 2D Triangulation Data Structure

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
List of all members
TriangulationDSVertexBase_2 Concept Reference
Concepts

## Definition

The concept `TriangulationDSVertexBase_2` describes the requirements for the vertex base class of a `CGAL::Triangulation_data_structure_2<Vb,Fb>`.

Note that if the `CGAL::Triangulation_data_structure_2` is plugged into a triangulation class, the vertex base class has additional geometric requirements depending on the triangulation class.

At the base level, provides access to one of its incident face through a `Face_handle`.

Since the `CGAL::Triangulation_data_structure_2` is the class which defines the handle types, the vertex base class has to be somehow parameterized by the triangulation data structure. But since the `CGAL::Triangulation_data_structure_2` itself is parameterized by the face and vertex base classes, there is a cycle in the definition of these classes. In order to break the cycle, the base classes for faces and vertices which are plugged in to instantiate a `Triangulation_data_structure_2` use a `void` as triangulation data structure parameter. Then, the `CGAL::Triangulation_data_structure_2` uses a rebind mechanism (similar to the one specified in `std::allocator`) in order to plug itself as parameter in the face and vertex base classes. This mechanism requires that the base class provides a templated nested class `Rebind_TDS` that itself provides the subtype `Rebind_TDS::Other` which is the rebound version of the base class. This rebound base class is the class that the `CGAL::Triangulation_data_structure_2` actually uses as a base class for the class of `CGAL::Triangulation_data_structure_2::Vertex`.

Refines:
  `TriangulationDataStructure_2::Vertex`

Has Models:

  `CGAL::Triangulation_ds_vertex_base_2<Tds>`

  `CGAL::Triangulation_vertex_base_2<Traits,Vb>`

  `CGAL::Regular_triangulation_vertex_base_2<Traits,Vb>`

  `CGAL::Triangulation_hierarchy_vertex_base_2<Vb>`

  `CGAL::Triangulation_vertex_base_with_info_2<Info,Traits,Vb>`

See Also
  `TriangulationVertexBase_2`
  `TriangulationDSFaceBase_2`
  `TriangulationFaceBase_2`
  `TriangulationDataStructure_2::Vertex`
  `CGAL::Triangulation_data_structure_2<Vb,Fb>`

## Types

The concept `TriangulationDSVertexBase_2` has to provide the following types.
template<typename TDS2 >
using | Rebind_TDS = unspecified_type
| This template class has to define a type `Rebind_TDS<TDS2>::Other` which is the rebound vertex base , where the actual `CGAL::Triangulation_data_structure_2` is plugged in. More...
typedef TriangulationDataStructure_2 | Triangulation_data_structure
typedef TriangulationDataStructure_2::Vertex_handle | Vertex_handle
typedef TriangulationDataStructure_2::Face_handle | Face_handle

## Creation

| TriangulationDSVertexBase_2 ()
| default constructor.
| TriangulationDSVertexBase_2 (Face_handle f)
| Constructs a vertex pointing to face `f`.

## Various

These member functions are required by `CGAL::Triangulation_data_structure_2` because it uses `CGAL::Compact_container` to store its faces. See the documentation of `CGAL::Compact_container` for the exact requirements.
void * | for_compact_container () const
void *& | for_compact_container ()

## Member Typedef Documentation

template<typename TDS2 >

using TriangulationDSVertexBase_2::Rebind_TDS = unspecified_type

This template class has to define a type `Rebind_TDS<TDS2>::Other` which is the rebound vertex base , where the actual `CGAL::Triangulation_data_structure_2` is plugged in.

This type `Other` will be the actual base of the class `CGAL::Triangulation_data_structure_2::Vertex`.

Note
  It can be implemented using a nested template class.