Sebastien Loriot 2025-04-10 18:07:13 +02:00 committed by GitHub
commit 051f56967b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 0 deletions

View File

@ -177,6 +177,8 @@ namespace internal {
template <typename Element>
static void set_erase_counter(Element &, unsigned int) {}
template <typename Element>
static void restore_erase_counter(Element*, unsigned int) {}
template <typename Element>
static void increment_erase_counter(Element &) {}
};
@ -192,12 +194,24 @@ namespace internal {
return e.erase_counter();
}
template <typename Element>
static unsigned int erase_counter(Element* e)
{
return e->erase_counter();
}
template <typename Element>
static void set_erase_counter(Element &e, unsigned int c)
{
e.set_erase_counter(c);
}
template <typename Element>
static void restore_erase_counter(Element* e, unsigned int c)
{
e->set_erase_counter(c);
}
template <typename Element>
static void increment_erase_counter(Element &e)
{
@ -402,9 +416,11 @@ public:
pointer ret = free_list;
free_list = clean_pointee(ret);
const auto ts = Time_stamper::time_stamp(ret);
const auto ec = EraseCounterStrategy<T>::erase_counter(ret);
new (ret) value_type(std::forward<Args>(args)...);
Time_stamper::restore_timestamp(ret, ts);
Time_stamper::set_time_stamp(ret, time_stamp);
EraseCounterStrategy<T>::restore_erase_counter(ret, ec);
CGAL_assertion(type(ret) == USED);
++size_;
return iterator(ret, 0);
@ -435,8 +451,10 @@ public:
CGAL_precondition(type(ptr) == USED);
EraseCounterStrategy<T>::increment_erase_counter(*x);
const auto ts = Time_stamper::time_stamp(ptr);
const auto ec = EraseCounterStrategy<T>::erase_counter(*x);
std::allocator_traits<allocator_type>::destroy(alloc, ptr);
Time_stamper::restore_timestamp(ptr, ts);
EraseCounterStrategy<T>::restore_erase_counter(ptr, ec);
put_on_free_list(ptr);
--size_;

View File

@ -80,6 +80,8 @@ namespace CCC_internal {
template <typename Element>
static void set_erase_counter(Element &, unsigned int) {}
template <typename Element>
static void restore_erase_counter(Element*, unsigned int) {}
template <typename Element>
static void increment_erase_counter(Element &) {}
};
@ -95,12 +97,24 @@ namespace CCC_internal {
return e.erase_counter();
}
template <typename Element>
static unsigned int erase_counter(Element* e)
{
return e->erase_counter();
}
template <typename Element>
static void set_erase_counter(Element &e, unsigned int c)
{
e.set_erase_counter(c);
}
template <typename Element>
static void restore_erase_counter(Element* e, unsigned int c)
{
e->set_erase_counter(c);
}
template <typename Element>
static void increment_erase_counter(Element &e)
{
@ -353,9 +367,11 @@ public:
pointer ret = init_insert(fl);
auto erase_counter = EraseCounterStrategy<T>::erase_counter(*ret);
const auto ts = Time_stamper::time_stamp(ret);
const auto ec = EraseCounterStrategy<T>::erase_counter(ret);
new (ret) value_type(std::forward<Args>(args)...);
Time_stamper::restore_timestamp(ret, ts);
EraseCounterStrategy<T>::set_erase_counter(*ret, erase_counter);
EraseCounterStrategy<T>::restore_erase_counter(ret, ec);
return finalize_insert(ret, fl);
}
@ -386,8 +402,10 @@ private:
auto ptr = &*x;
const auto ts = Time_stamper::time_stamp(ptr);
const auto ec = EraseCounterStrategy<T>::erase_counter(*x);
std::allocator_traits<allocator_type>::destroy(m_alloc, &*x);
Time_stamper::restore_timestamp(ptr, ts);
EraseCounterStrategy<T>::restore_erase_counter(ptr, ec);
put_on_free_list(&*x, fl);
}