mirror of https://github.com/CGAL/cgal
Bug fix for compact container with index, when iterating on empty container.
This commit is contained in:
parent
5190030a73
commit
4a0e20f938
|
|
@ -86,7 +86,8 @@ namespace CGAL {
|
||||||
Tag_true>::value);
|
Tag_true>::value);
|
||||||
CGAL_assertion(amap.is_whole_map_unmarked(mcell_mark_number));
|
CGAL_assertion(amap.is_whole_map_unmarked(mcell_mark_number));
|
||||||
|
|
||||||
mark_cell<Map,i,dim>(amap, adart, mcell_mark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(amap, adart, mcell_mark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
|
|
@ -126,7 +127,8 @@ namespace CGAL {
|
||||||
{
|
{
|
||||||
unmark_treated_darts();
|
unmark_treated_darts();
|
||||||
Ite::rewind();
|
Ite::rewind();
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mcell_mark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mcell_mark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prefix ++ operator.
|
/// Prefix ++ operator.
|
||||||
|
|
@ -199,7 +201,8 @@ namespace CGAL {
|
||||||
static_assert(std::is_same<typename Ite::Basic_iterator,
|
static_assert(std::is_same<typename Ite::Basic_iterator,
|
||||||
Tag_true>::value);
|
Tag_true>::value);
|
||||||
CGAL_assertion(amap.is_whole_map_unmarked(mmark_number));
|
CGAL_assertion(amap.is_whole_map_unmarked(mmark_number));
|
||||||
mark_cell<Map,i,dim>(amap, adart, mmark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(amap, adart, mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
|
|
@ -234,7 +237,8 @@ namespace CGAL {
|
||||||
{
|
{
|
||||||
unmark_treated_darts();
|
unmark_treated_darts();
|
||||||
Ite::rewind();
|
Ite::rewind();
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Postfix ++ operator.
|
/// Postfix ++ operator.
|
||||||
|
|
@ -253,7 +257,7 @@ namespace CGAL {
|
||||||
this->mmap->is_marked((*this), mmark_number));
|
this->mmap->is_marked((*this), mmark_number));
|
||||||
|
|
||||||
if (this->cont())
|
if (this->cont())
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number);
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number); }
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -306,7 +310,8 @@ namespace CGAL {
|
||||||
static_assert(std::is_same<typename Base::Basic_iterator,
|
static_assert(std::is_same<typename Base::Basic_iterator,
|
||||||
Tag_true>::value);
|
Tag_true>::value);
|
||||||
CGAL_assertion(amap.is_whole_map_unmarked(mmark_number));
|
CGAL_assertion(amap.is_whole_map_unmarked(mmark_number));
|
||||||
mark_cell<Map,i,dim>(amap, (*this), mmark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(amap, (*this), mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructor with a dart in parameter (for end iterator).
|
/// Constructor with a dart in parameter (for end iterator).
|
||||||
|
|
@ -314,8 +319,8 @@ namespace CGAL {
|
||||||
Base(amap, adart),
|
Base(amap, adart),
|
||||||
mmark_number(amap.get_new_mark())
|
mmark_number(amap.get_new_mark())
|
||||||
{
|
{
|
||||||
if (adart!=this->mmap->null_descriptor)
|
if (this->cont())
|
||||||
mark_cell<Map,i,dim>(amap, (*this), mmark_number);
|
{ mark_cell<Map,i,dim>(amap, (*this), mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
|
|
@ -350,7 +355,8 @@ namespace CGAL {
|
||||||
{
|
{
|
||||||
unmark_treated_darts();
|
unmark_treated_darts();
|
||||||
Base::rewind();
|
Base::rewind();
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Postfix ++ operator.
|
/// Postfix ++ operator.
|
||||||
|
|
@ -369,7 +375,7 @@ namespace CGAL {
|
||||||
this->mmap->is_marked((*this), mmark_number));
|
this->mmap->is_marked((*this), mmark_number));
|
||||||
|
|
||||||
if (this->cont())
|
if (this->cont())
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number);
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number); }
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -610,16 +610,16 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator begin() { return empty()?end():iterator(this, 0, 0); }
|
iterator begin() { return empty()?end():iterator(this, 0, 0); }
|
||||||
iterator end() { return iterator(this, upper_bound()); }
|
iterator end() { return iterator(this, null_descriptor); }
|
||||||
|
|
||||||
const_iterator begin() const { return empty()?end():const_iterator(this, 0, 0); }
|
const_iterator begin() const { return empty()?end():const_iterator(this, 0, 0); }
|
||||||
const_iterator end() const { return const_iterator(this, upper_bound()); }
|
const_iterator end() const { return const_iterator(this, null_descriptor); }
|
||||||
|
|
||||||
reverse_iterator rbegin() { return reverse_iterator(end()); }
|
reverse_iterator rbegin() { return reverse_iterator(iterator(this, upper_bound())); }
|
||||||
reverse_iterator rend() { return reverse_iterator(begin()); }
|
reverse_iterator rend() { return reverse_iterator(begin()); }
|
||||||
|
|
||||||
const_reverse_iterator
|
const_reverse_iterator
|
||||||
rbegin() const { return const_reverse_iterator(end()); }
|
rbegin() const { return const_reverse_iterator(iterator(this, upper_bound())); }
|
||||||
const_reverse_iterator
|
const_reverse_iterator
|
||||||
rend() const { return const_reverse_iterator(begin()); }
|
rend() const { return const_reverse_iterator(begin()); }
|
||||||
|
|
||||||
|
|
@ -878,7 +878,8 @@ namespace internal {
|
||||||
CC_iterator_with_index(const iterator &it): m_ptr_to_cc(it.m_ptr_to_cc),
|
CC_iterator_with_index(const iterator &it): m_ptr_to_cc(it.m_ptr_to_cc),
|
||||||
m_index(it.m_index)
|
m_index(it.m_index)
|
||||||
{
|
{
|
||||||
CGAL_assertion(m_index<=m_ptr_to_cc->upper_bound());
|
CGAL_assertion(m_index<=m_ptr_to_cc->upper_bound() ||
|
||||||
|
m_index==DSC::null_descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Same for assignment operator
|
// Same for assignment operator
|
||||||
|
|
@ -928,14 +929,16 @@ namespace internal {
|
||||||
// It's either pointing to end(), or valid.
|
// It's either pointing to end(), or valid.
|
||||||
CGAL_assertion_msg(m_ptr_to_cc!=nullptr,
|
CGAL_assertion_msg(m_ptr_to_cc!=nullptr,
|
||||||
"Incrementing a singular iterator or an empty container iterator ?");
|
"Incrementing a singular iterator or an empty container iterator ?");
|
||||||
CGAL_assertion_msg(m_index<m_ptr_to_cc->upper_bound(),
|
CGAL_assertion_msg(m_index<m_ptr_to_cc->upper_bound() &&
|
||||||
"Incrementing end() ?");
|
m_index!=DSC::null_descriptor,
|
||||||
|
"Incrementing end() ?");
|
||||||
|
|
||||||
// If it's not end(), then it's valid, we can do ++.
|
// If it's not end(), then it's valid, we can do ++.
|
||||||
do
|
do
|
||||||
{ ++m_index; }
|
{ ++m_index; }
|
||||||
while(m_index<m_ptr_to_cc->upper_bound() &&
|
while(m_index<m_ptr_to_cc->upper_bound() &&
|
||||||
(!m_ptr_to_cc->is_used(m_index)));
|
(!m_ptr_to_cc->is_used(m_index)));
|
||||||
|
if(m_index==m_ptr_to_cc->upper_bound()) { m_index=DSC::null_descriptor; }
|
||||||
}
|
}
|
||||||
|
|
||||||
void decrement()
|
void decrement()
|
||||||
|
|
@ -969,7 +972,7 @@ namespace internal {
|
||||||
|
|
||||||
pointer operator->() const { return &((*m_ptr_to_cc)[m_index]); }
|
pointer operator->() const { return &((*m_ptr_to_cc)[m_index]); }
|
||||||
|
|
||||||
bool is_end() const { return m_index>=m_ptr_to_cc->upper_bound(); }
|
bool is_end() const { return m_index==DSC::null_descriptor; }
|
||||||
|
|
||||||
// Can itself be used for bit-squatting.
|
// Can itself be used for bit-squatting.
|
||||||
size_type for_compact_container() const
|
size_type for_compact_container() const
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,8 @@ namespace CGAL {
|
||||||
static_assert(std::is_same<typename Base::Basic_iterator,
|
static_assert(std::is_same<typename Base::Basic_iterator,
|
||||||
Tag_true>::value);
|
Tag_true>::value);
|
||||||
CGAL_assertion(amap.is_whole_map_unmarked(mmark_number));
|
CGAL_assertion(amap.is_whole_map_unmarked(mmark_number));
|
||||||
mark_cell<Map,i,dim>(amap, (*this), mmark_number);
|
if(this->cont())
|
||||||
|
{ mark_cell<Map,i,dim>(amap, (*this), mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructor with a dart in parameter (for end iterator).
|
/// Constructor with a dart in parameter (for end iterator).
|
||||||
|
|
@ -81,8 +82,8 @@ namespace CGAL {
|
||||||
Base(amap, adart),
|
Base(amap, adart),
|
||||||
mmark_number(amap.get_new_mark())
|
mmark_number(amap.get_new_mark())
|
||||||
{
|
{
|
||||||
if (adart!=this->mmap->null_descriptor)
|
if (this->cont())
|
||||||
mark_cell<Map,i,dim>(amap, (*this), mmark_number);
|
{ mark_cell<Map,i,dim>(amap, (*this), mmark_number); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
|
|
@ -136,7 +137,7 @@ namespace CGAL {
|
||||||
this->mmap->is_marked((*this), mmark_number));
|
this->mmap->is_marked((*this), mmark_number));
|
||||||
|
|
||||||
if (this->cont())
|
if (this->cont())
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number);
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number); }
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -249,7 +250,7 @@ namespace CGAL {
|
||||||
this->mmap->is_marked((*this), mmark_number));
|
this->mmap->is_marked((*this), mmark_number));
|
||||||
|
|
||||||
if (this->cont())
|
if (this->cont())
|
||||||
mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number);
|
{ mark_cell<Map,i,dim>(*this->mmap, (*this), mmark_number); }
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue