\begin{ccRefConcept}{TriangulationDSFace}

\ccDefinition

A \ccRefName\ describes a \ccc{k}-face \ccc{f} in a triangulation.
It gives access to a handle to a full cell \ccc{c} containing the face
\ccc{f} in its boundary, as well as the indices of the vertices of \ccc{f} in
\ccc{c}. It must hold that \ccc{f} is a {\em proper} face of full cell
\ccc{c}, {i.e.}, the dimension of \ccc{f} is strictly less than
the dimension of \ccc{c}.

\ccTypes

\ccNestedType{Full_cell_handle}{Must be the same as the nested type
\ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationDSFace} is
defined/used.}

\ccNestedType{Vertex_handle}{Must be the same as the nested type
\ccc{TriangulationDataStructure::Vertex_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationDSFace} is
defined/used.}

\ccHasModels

\ccc{CGAL::Triangulation_face<TriangulationDataStructure>}.

\ccCreation
\ccCreationVariable{f}

There is no default constructor, since the maximal dimension 
(of the full cells) must be known by the constructors of a \ccRefName.

\ccConstructor{Triangulation_face(Triangulation_face g);}{Copy constructor.}

\ccConstructor{Triangulation_face(Full_cell_handle c);}{Sets the \ccc{Face}'s
full cell to \ccc{c} and the maximal dimension to 
\ccc{c.maximal_dimension()}.
\ccPrecond \ccc{c!=Full_cell_handle()}
}

\ccConstructor{Triangulation_face(const int ad);}{Setup the \ccc{Face} knowing
the maximal dimension \ccc{ad}. Sets the \ccc{Face}'s full cell to the
default-constructed one.}

\ccHeading{Access functions}

\ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a cell that
has the face in its boundary.}

\ccMethod{int face_dimension() const;}{Returns the dimension of the face
(one less than the number of vertices).}

\ccMethod{int index(int i) const;}{Returns the index of the \ccc{i}-th vertex
of the face in the cell \ccVar.\ccc{full_cell()}. \ccPrecond $0\leq i\leq$\ccVar.\ccc{face_dimension()}.}

\ccMethod{Vertex_handle vertex(int i) const;}{Returns a handle to the
\ccc{i}-th \ccc{Vertex} of the face in the cell \ccVar.\ccc{full_cell()}.
\ccPrecond $0\leq i\leq$\ccVar.\ccc{face_dimension()}.}

\ccHeading{Update functions}

\ccMethod{void clear();}{Sets the facet to the empty set. Maximal
  dimension remains unchanged.}

\ccMethod{void set_full_cell(Full_cell_handle c);}{Sets the cell of the face to
\ccc{c}. 
\ccPrecond \ccc{c!=Full_cell_handle()}
}

\ccMethod{void set_index(int i, int j);}{Sets the index of the \ccc{i}-th
vertex of the face to be the \ccc{j}-th vertex of the full cell.
\ccPrecond $0\leq i\leq$\ccVar.\ccc{full_cell()->face_dimension()}.
\ccPrecond $0\leq j\leq$\ccVar.\ccc{full_cell()->maximal_dimension()}.}

\ccSeeAlso


\ccc{TriangulationDataStructure::FullCell} \\
\ccc{TriangulationDataStructure::Vertex} \\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}

\end{ccRefConcept}
