- copy_tds() cleanups.

This commit is contained in:
Sylvain Pion 2001-07-13 09:36:49 +00:00
parent 9addb5b425
commit e758218d3a
3 changed files with 25 additions and 47 deletions

View File

@ -1,3 +1,6 @@
Version 1.74 (13 July 01)
- copy_tds() cleanups.
Version 1.73 (13 July 01)
- print_cells and read_cells small cleanup.
- With VC++, MP_Float.h must be included before Filtered_exact.h.

View File

@ -191,16 +191,6 @@ public:
}
private:
// not documented
// only used by copy_tds in the TDS class
Cell* create_cell(Vertex* v0, Vertex* v1, Vertex* v2, Vertex* v3,
const Cell & old_cell)
{
Cell* cnew = new Cell( v0,v1,v2,v3,old_cell );
cnew->init();
add_cell(cnew);
return cnew;
}
// Used to initialize the lists to empty lists.
void init_cell_list(Cell* c)
@ -2365,11 +2355,6 @@ copy_tds(const Tds & tds, Vertex* vert )
CGAL_triangulation_expensive_precondition( vert == NULL
|| tds.is_vertex(vert) );
std::map< void*, void* > V;
std::map< void*, void* > F;
Vertex* v;
Cell* f;
clear();
int n = tds.number_of_vertices();
@ -2394,39 +2379,39 @@ copy_tds(const Tds & tds, Vertex* vert )
std::sort(TV.begin(), TV.end(),
Vertex_tds_compare_order_of_creation<Vertex*>());
for (i=0; i <= n-1; i++)
V[ TV[i] ] = new Vertex( *TV[i] );
std::map< Vertex*, Vertex* > V;
std::map< Cell*, Cell* > F;
for (i=0; i <= n-1; i++) {
V[ TV[i] ] = create_vertex();
*V[ TV[i] ] = *TV[i];
}
// Create the cells.
for (Cell* cit = tds._list_of_cells._next_cell;
cit != tds.past_end_cell(); cit = cit->_next_cell) {
F[&(*cit)] = create_cell((Vertex*) V[cit->vertex(0)],
(Vertex*) V[cit->vertex(1)],
(Vertex*) V[cit->vertex(2)],
(Vertex*) V[cit->vertex(3)],
*cit);
F[&(*cit)] = create_cell(&*cit);
F[&(*cit)]->set_vertices(V[cit->vertex(0)],
V[cit->vertex(1)],
V[cit->vertex(2)],
V[cit->vertex(3)]);
}
// Link the vertices to a cell.
for (Vertex_iterator vit2 = tds.vertices_begin();
vit2 != tds.vertices_end(); ++vit2) {
v = (Vertex*) V[&(*vit2)];
v->set_cell( (Cell*) F[vit2->cell()] );
}
vit2 != tds.vertices_end(); ++vit2)
V[&(*vit2)]->set_cell( F[vit2->cell()] );
// Hook neighbor pointers of the cells.
for (Cell* cit2 = tds._list_of_cells._next_cell;
cit2 != tds.past_end_cell(); cit2 = cit2->_next_cell) {
for (int j = 0; j < 4; j++) {
f = ((Cell*) F[&(*cit2)]);
f->set_neighbor(j, (Cell*) F[cit2->neighbor(j)] );
}
for (int j = 0; j < 4; j++)
F[&(*cit2)]->set_neighbor(j, F[cit2->neighbor(j)] );
}
CGAL_triangulation_postcondition( is_valid() );
if ( vert != NULL )
return (Vertex*) V[vert];
return NULL;
return (vert != NULL) ? V[vert] : NULL;
}
template <class Vb, class Cb >

View File

@ -79,16 +79,6 @@ public:
: Cb(v0,v1,v2,v3,n0,n1,n2,n3), in_conflict_flag(0)
{}
// not documented
// only used by copy_tds in the TDS class
Triangulation_ds_cell_3(Vertex* v0, Vertex* v1,
Vertex* v2, Vertex* v3,
const Cell& old_cell)
: Cb(old_cell), in_conflict_flag(0)
{
set_vertices(v0,v1,v2,v3);
}
// SETTING
void set_vertex(int i, Vertex* v)
@ -198,14 +188,15 @@ private:
{
std::cerr << "neighbor of c has not c as neighbor" << std::endl;
}
}; // __attribute__((__aligned__(16))); // Memory alignment. For GCC only
};
template <class Vb, class Cb >
bool
Triangulation_ds_cell_3<Vb,Cb>::is_valid
(int dim, bool verbose, int level) const
{
if ( ! Cb::is_valid(verbose,level) ) return false;
if ( ! Cb::is_valid(verbose,level) )
return false;
switch (dim) {
case -2:
@ -218,8 +209,7 @@ Triangulation_ds_cell_3<Vb,Cb>::is_valid
return false;
}
vertex(0)->is_valid(verbose,level);
if ( vertex(1) != NULL ||
vertex(2) != NULL || vertex(3) != NULL ) {
if ( vertex(1) != NULL || vertex(2) != NULL || vertex(3) != NULL ) {
if (verbose)
std::cerr << "vertex 1,2 or 3 != NULL" << std::endl;
CGAL_triangulation_assertion(false);