## TriangulationDSCellBase_3

### Definition

At the base level (see Sections and ), a cell stores handles to its four vertices and to its four neighbor cells. The vertices and neighbors are indexed 0, 1, 2 and 3. Neighbor i lies opposite to vertex i.

Since the Triangulation data structure is the class which defines the handle types, the cell base class has to be somehow parameterized by the Triangulation data structure. But since it is itself parameterized by the cell and vertex base classes, there is a cycle in the definition of these classes. In order to break the cycle, the base classes for vertex and cell which are given as arguments for the Triangulation data structure use void as Triangulation data structure parameter, and the Triangulation data structure then uses a rebind-like mechanism (similar to the one specified in std::allocator) in order to put itself as parameter to the vertex and cell classes. The rebound base classes so obtained are the classes which are used as base classes for the final vertex and cell classes. More information can be found in Section .

### Types

The concept TriangulationDSCellBase_3 has to provide the following types.

template <typename TDS2>
TriangulationDSCellBase_3:: struct Rebind_TDS;
| This nested template class has to define a type Other which is the rebound cell, that is, the one whose Triangulation_data_structure will be the actually used one. The Other type will be the real base class of Triangulation_data_structure_3::Cell.

typedef TriangulationDataStructure_3
| Triangulation_data_structure;
typedef TriangulationDataStructure_3::Vertex_handle
| Vertex_handle;
typedef TriangulationDataStructure_3::Cell_handle
| Cell_handle;

### Creation

TriangulationDSCellBase_3 c;
| Default constructor

TriangulationDSCellBase_3 c ( | Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3);

| Initializes the vertices with v0, v1, v2, v3. Neighbors are initialized to the default constructed handle.

TriangulationDSCellBase_3 c ( | Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3, Cell_handle n0, Cell_handle n1, Cell_handle n2, Cell_handle n3);

| Initializes the vertices with v0, v1, v2, v3 and the neighbors with n0, n1, n2, n3.

### Access Functions

Vertex_handle | c.vertex ( int i) | Returns the vertex i of c. Precondition: i {0, 1, 2, 3}.
int | c.vertex_index ( Vertex_handle v)
|  | Returns the index of v. Precondition: v is a vertex of c
bool | c.has_vertex ( Vertex_handle v)
|  | True iff v is a vertex of c.
bool | c.has_vertex ( Vertex_handle v, int & i)
|  | Returns true if v is a vertex of c, and computes its index i in c.
Cell_handle | c.neighbor ( int i)
|  | Returns the neighbor i of c. Precondition: i {0, 1, 2, 3}.
int | c.cell_index ( Cell_handle n)
|  | Returns the index of cell n in c. Precondition: n is a neighbor of c.
bool | c.has_neighbor ( Cell_handle n)
|  | Returns true if n is a neighbor of c.
bool | c.has_neighbor ( Cell_handle n, int & i)
|  | Returns true if n is a neighbor of c, and computes its index i in c.

### Setting

void | c.set_vertex ( int i, Vertex_handle v)
|  | Sets vertex i to v. Precondition: i {0, 1, 2, 3}.
void | c.set_vertices () | Sets the vertices to the default constructed handle.

void

c.set_vertices ( | Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3)

|  | Sets the vertices.
void | c.set_neighbor ( int i, Cell_handle n)
|  | Sets neighbor i to n. Precondition: i {0, 1, 2, 3}.
void | c.set_neighbors () | Sets the neighbors to the default constructed handle.

void

c.set_neighbors ( | Cell_handle n0, Cell_handle n1, Cell_handle n2, Cell_handle n3)

|  | Sets the neighbors.

### Checking

bool | c.is_valid ( bool verbose = false)
|  | Performs any desired geometric test on a cell. When verbose is set to true, messages are printed to give a precise indication of the kind of invalidity encountered.

### Various

void * | c.for_compact_container ()
void * & | c.for_compact_container ()

These member functions are required by Triangulation_data_structure_3 because it uses Compact_container to store its cells. See the documentation of Compact_container for the exact requirements.

### I/O

istream& | istream& is >> & c
|  | Inputs the possible non combinatorial information given by the cell.
ostream& | ostream& os << c | Outputs the possible non combinatorial information given by the cell.

### Has Models

CGAL::Triangulation_ds_cell_base_3
CGAL::Triangulation_cell_base_3
CGAL::Triangulation_cell_base_with_info_3

### See Also

TriangulationDSVertexBase_3
TriangulationVertexBase_3
TriangulationHierarchyVertexBase_3
TriangulationCellBase_3