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

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 may have additional geometric requirements depending on the triangulation class.

At the base level, provides access to one of its incident faces 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 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

◆ Rebind_TDS

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.