Re-use existing time stamps

When a `Vertex` or a `Cell` is recycled by the `Compact_container`,
re-use the existing time stamp instead of increment it. That will avoid
that the pointee of a handle has a changing timestamp.
This commit is contained in:
Laurent Rineau 2017-05-05 10:49:39 +02:00
parent 706b53b2c2
commit 0757cfaeb0
5 changed files with 11 additions and 8 deletions

View File

@ -261,7 +261,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif
, time_stamp_(-1)
, surface_center_index_table_()
, sliver_value_(FT(0.))
, subdomain_index_()
@ -298,7 +297,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif
, time_stamp_(-1)
, surface_center_index_table_()
, sliver_value_(FT(0.))
, subdomain_index_()
@ -323,7 +321,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif
, time_stamp_(-1)
, surface_center_index_table_()
, sliver_value_(FT(0.))
, subdomain_index_()

View File

@ -149,7 +149,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif
, time_stamp_(-1)
{}
Mesh_cell_base_3 (Vertex_handle v0,
@ -164,7 +163,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif
, time_stamp_(-1)
{}
Mesh_cell_base_3 (Vertex_handle v0,
@ -183,7 +181,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif
, time_stamp_(-1)
{}
// Default copy constructor and assignment operator are ok

View File

@ -136,7 +136,6 @@ public:
, next_intrusive_()
, previous_intrusive_()
#endif //CGAL_INTRUSIVE_LIST
, time_stamp_(-1)
{}
// Default copy constructor and assignment operator are ok

View File

@ -921,6 +921,7 @@ void Compact_container<T, Allocator, Increment_policy, TimeStamper>::allocate_ne
for (size_type i = block_size; i >= 1; --i)
{
EraseCounterStrategy::set_erase_counter(*(new_block + i), 0);
time_stamper->initialize_time_stamp(new_block + i);
put_on_free_list(new_block + i);
}
// We insert this new block at the end.

View File

@ -32,8 +32,14 @@ struct Time_stamper
Time_stamper(const Time_stamper& ts)
: time_stamp_(ts.time_stamp_) {}
static void initialize_time_stamp(T* pt) {
pt->set_time_stamp(std::size_t(-1));
}
void set_time_stamp(T* pt) {
if(pt->time_stamp() == std::size_t(-1))
pt->set_time_stamp(time_stamp_++);
// else: the time stamp is re-used
}
@ -66,6 +72,9 @@ public:
return p_t1 < p_t2;
}
static void initialize_time_stamp(T*) {
}
static std::size_t hash_value(const T* p) {
return reinterpret_cast<std::size_t>(p)/sizeof(T);
}