mirror of https://github.com/KLayout/klayout.git
Better support for delete-while-iterate on stable vectors
This commit is contained in:
parent
78cdec4d68
commit
d83c420c0a
|
|
@ -148,7 +148,7 @@ public:
|
|||
{
|
||||
do {
|
||||
++m_n;
|
||||
} while (*this != mp_v->end () && ! mp_v->is_used (m_n));
|
||||
} while (! at_end () && ! mp_v->is_used (m_n));
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ public:
|
|||
*/
|
||||
bool at_end () const
|
||||
{
|
||||
return *this == mp_v->end ();
|
||||
return index () >= mp_v->last ();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -317,7 +317,7 @@ public:
|
|||
{
|
||||
do {
|
||||
++m_n;
|
||||
} while (*this != mp_v->end () && ! mp_v->is_used (m_n));
|
||||
} while (! at_end () && ! mp_v->is_used (m_n));
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
@ -326,7 +326,7 @@ public:
|
|||
*/
|
||||
bool at_end () const
|
||||
{
|
||||
return *this == mp_v->end ();
|
||||
return index () >= mp_v->last ();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -287,3 +287,103 @@ TEST(4)
|
|||
EXPECT_EQ (B::ccc, 22);
|
||||
}
|
||||
|
||||
// destroy while iterate
|
||||
TEST(5)
|
||||
{
|
||||
tl::reuse_vector<A> v;
|
||||
v.insert (A (1));
|
||||
v.insert (A (2));
|
||||
v.insert (A (3));
|
||||
|
||||
tl::reuse_vector<A>::iterator i;
|
||||
tl::reuse_vector<A>::iterator ii;
|
||||
|
||||
ii = v.end ();
|
||||
for (i = v.begin (); i != ii; ++i) {
|
||||
if (i->x == 2) {
|
||||
v.erase (i);
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ (v.size (), size_t (2));
|
||||
i = v.begin ();
|
||||
EXPECT_EQ (i->x, 1);
|
||||
++i;
|
||||
EXPECT_EQ (i->x, 3);
|
||||
|
||||
v = tl::reuse_vector<A> ();
|
||||
v.insert (A (1));
|
||||
v.insert (A (2));
|
||||
v.insert (A (3));
|
||||
|
||||
for (i = v.begin (); !i.at_end (); ++i) {
|
||||
if (i->x == 2) {
|
||||
v.erase (i);
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ (v.size (), size_t (2));
|
||||
i = v.begin ();
|
||||
EXPECT_EQ (i->x, 1);
|
||||
++i;
|
||||
EXPECT_EQ (i->x, 3);
|
||||
|
||||
v = tl::reuse_vector<A> ();
|
||||
v.insert (A (1));
|
||||
v.insert (A (2));
|
||||
v.insert (A (3));
|
||||
|
||||
ii = v.end ();
|
||||
for (i = v.begin (); i != ii; ++i) {
|
||||
if (i->x == 3) {
|
||||
v.erase (i);
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ (v.size (), size_t (2));
|
||||
i = v.begin ();
|
||||
EXPECT_EQ (i->x, 1);
|
||||
++i;
|
||||
EXPECT_EQ (i->x, 2);
|
||||
|
||||
v = tl::reuse_vector<A> ();
|
||||
v.insert (A (1));
|
||||
v.insert (A (2));
|
||||
v.insert (A (3));
|
||||
|
||||
for (i = v.begin (); !i.at_end (); ++i) {
|
||||
if (i->x == 3) {
|
||||
v.erase (i);
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ (v.size (), size_t (2));
|
||||
i = v.begin ();
|
||||
EXPECT_EQ (i->x, 1);
|
||||
++i;
|
||||
EXPECT_EQ (i->x, 2);
|
||||
|
||||
v = tl::reuse_vector<A> ();
|
||||
v.insert (A (1));
|
||||
v.insert (A (2));
|
||||
v.insert (A (3));
|
||||
|
||||
ii = v.end ();
|
||||
for (i = v.begin (); i != ii; ++i) {
|
||||
v.erase (i);
|
||||
}
|
||||
EXPECT_EQ (v.size (), size_t (0));
|
||||
EXPECT_EQ (v.empty (), true);
|
||||
|
||||
v = tl::reuse_vector<A> ();
|
||||
v.insert (A (1));
|
||||
v.insert (A (2));
|
||||
v.insert (A (3));
|
||||
|
||||
for (i = v.begin (); !i.at_end (); ++i) {
|
||||
v.erase (i);
|
||||
}
|
||||
EXPECT_EQ (v.size (), size_t (0));
|
||||
EXPECT_EQ (v.empty (), true);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue