cgal/Triangulation_2/doc_tex/TDS_2_ref/TriangulationDSVertexBase_2...

131 lines
4.4 KiB
TeX

% +------------------------------------------------------------------------+
% | Reference manual page: TriangulationDSVertexBase_2.tex
% +------------------------------------------------------------------------+
% | 13.08.2003 Author
% | Package: Package
% |
\RCSdef{\RCSTriangulationDSVertexBaseRev}{$Id$}
\RCSdefDate{\RCSTriangulationDSVertexBaseDate}{$Date$}
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{TriangulationDSVertexBase_2}
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[concept]{} %% add further index entries
\ccDefinition
The concept \ccRefName\ describes the requirements for the
vertex base class of a \ccc{Triangulation_data_structure_2<Vb,Fb>}.
Note that if the \ccc{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 \ccc{Face_handle}.
Since the \ccc{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 \ccc{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
\ccc{Triangulation_data_structure_2}
use a \ccc{void} as triangulation
data structure parameter. Then,
the \ccc{Triangulation_data_structure_2}
uses a {\it rebind} mechanism (similar to the one specified in
\ccc{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 \ccc{Rebind_TDS} that
itself provides
the subtype \ccc{Rebind_TDS<TDS2>::Other}
which is the {\it rebound} version of the base class.
This {\it rebound} base class is the class
that the \ccc{Triangulation_data_structure_2}
actually uses as a base class for the class
of \ccc{Triangulation_data_structure_2::Vertex}.
\ccRefines{\ccc{TriangulationDataStructure_2::Vertex}}
\ccTypes
\ccThree{typedef TriangulationDataStructure_2::Vertex_handle}{}{}
\ccThreeToTwo
The concept \ccRefName\ has to provide the following types.
\ccNestedType{
template <typename TDS2>
struct Rebind_TDS;}
{This nested template class has to define a type \ccc{Other} which is the
{\it rebound} vertex base , where the actual
\ccc{Triangulation_data_structure_2} is plugged in.
This type \ccc{Other} will be the actual base
of the class \ccc{Triangulation_data_structure_2::Vertex}.}
\ccTypedef{typedef TriangulationDataStructure_2 Triangulation_data_structure;}{}
\ccGlue
\ccTypedef{typedef TriangulationDataStructure_2::Vertex_handle Vertex_handle;}{}
\ccGlue
\ccTypedef{typedef TriangulationDataStructure_2::Face_handle Face_handle;}{}
\ccCreation
\ccCreationVariable{v} %% choose variable name
\ccThree{Vertex_handle}{Facetxxxxxxxxxxxxxxxxxxxxxxxxx}{}
\ccConstructor{TriangulationDSVertexBase_2();}{default constructor.}
\ccGlue
\ccConstructor{TriangulationDSVertexBase_2(Face_handle f);}
{Constructs a vertex pointing to face \ccc{f}.}
\ccHeading{Various}
\ccMethod{void * for_compact_container() const;}{}
\ccGlue
\ccMethod{void * & for_compact_container();}{}
{ These member functions are required by \ccc{Triangulation_data_structure_2}
because it uses \ccc{Compact_container} to store its faces. See the
documentation of \ccc{Compact_container} for the exact requirements.}
\ccHasModels
\ccc{CGAL::Triangulation_ds_vertex_base_2<Tds>}\\
\ccc{CGAL::Triangulation_vertex_base_2<Traits,Vb>}\\
\ccc{CGAL::Regular_triangulation_vertex_base_2<Traits,Vb>} \\
\ccc{CGAL::Triangulation_hierarchy_vertex_base_2<Vb>} \\
\ccc{CGAL::Triangulation_vertex_base_with_info_2<Info,Traits,vb>}
\ccSeeAlso
\ccc{TriangulationVertexBase_2}\\
\ccc{TriangulationDSFaceBase_2}\\
\ccc{TriangulationFaceBase_2} \\
\ccc{TriangulationDataStructure_2::Vertex} \\
\ccc{Triangulation_data_structure_2<Vb,Fb>} \\
\end{ccRefConcept}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
% EOF
% +------------------------------------------------------------------------+