\begin{ccRefConcept}{TriangulationDSVertex}

\ccDefinition

The concept \ccRefName\ describes what a vertex is in a model of the concept
\ccc{TriangulationDataStructure}. It sets requirements of combinatorial nature
only, as geometry is not concerned here. In particular, we only require that
the vertex holds a handle to a full cell incident to it in the triangulation.



\ccHasModels

\ccc{CGAL::Triangulation_ds_vertex<TriangulationDataStructure>}\\
\ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}

\ccTypes
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}
\ccThreeToTwo

\ccNestedType{Full_cell_handle}{A handle to a cell. It must be the same as the
nested type \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the
\ccc{TriangulationDSVertex} is defined/used.}

\ccNestedType{
  template <typename TDS2>
  Rebind_TDS}
{This nested template class has to define a type \ccc{Other} which is the
{\it rebound} vertex, that is, the one whose \ccc{Triangulation_data_structure}
will be the actually used one.  The \ccc{Other} type will be the real base
class of \ccc{Triangulation_data_structure::Vertex}.}


\ccCreation	
\ccCreationVariable{v}

\ccConstructor{TriangulationDSVertex();}{The default constructor (no incident
full cell is set).}
\ccGlue
\ccConstructor{TriangulationDSVertex(Full_cell_handle c);}{Sets the incident
full cell to \ccc{c}. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.}

\ccOperations
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}

\ccMethod{void set_full_cell(Full_cell_handle c);}{Set \ccc{c} as the vertex's
incident full cell. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.}

\ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a
  full cell incident to the vertex.}

\begin{ccDebug}
\ccHeading{Validity check}

\ccMethod{bool is_valid(bool verbose=false) const;}{%
Performs some validity checks on the vertex \ccVar.

It must \emph{at least} check that \ccVar\ has an incident full cell, which in
turn must contain \ccVar\ as one of its vertices.
    
Returns \ccc{true} if all the tests pass, \ccc{false} if any test fails. See
the documentation for the models of this concept to see the additionnal (if
any) validity checks that they implement.%
}

\end{ccDebug}

% \ccHeading{Memory management}

% \ccMethod{void*   for_compact_container() const;}{}
% \ccGlue\ccMethod{void* & for_compact_container();}{}

% These member functions are required by the classes
% \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>} and
% \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} (and its derived classes) because they use
% the \cgal\ container class \ccc{Compact_container} to store their vertices and
% full cells. See the documentation of \ccc{Compact_container} for the exact
% requirements.

\ccHeading{Memory management}

\ccMethod{void * for_compact_container() const;}{}
\ccGlue
\ccMethod{void * & for_compact_container();}{}
{ These member functions are required by \ccc{Triangulation_data_structure}
  because it uses \ccc{Compact_container} to store its cells.  See the
  documentation of \ccc{Compact_container} for the exact requirements.}

\ccHeading{Input/Output}

These operators can be used directly and are called by the I/O
operator of class \ccc{TriangulationDataStructure}.

\ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is,
        Triangulation_ds_vertex<TriangulationDataStructure> & v);}
{Reads (possibly) non-combinatorial information about a vertex from the stream \ccc{is}
into \ccc{v}.}

\ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
        Triangulation_ds_vertex<TriangulationDataStructure> & v);}
{Writes (possibly) non-combinatorial information about vertex \ccc{v} to the stream
    \ccc{os}.}

\ccSeeAlso

\ccc{TriangulationDSFullCell}\\
\ccc{TriangulationDSFace}\\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}

\end{ccRefConcept}
