Add pop method to chunked_buffer
This commit is contained in:
@ -442,16 +442,16 @@ ASL_TEST(move_assign_inline_to_heap)
|
|||||||
ASL_TEST_EXPECT(buf2.size() == 2);
|
ASL_TEST_EXPECT(buf2.size() == 2);
|
||||||
ASL_TEST_EXPECT(d[0] == false);
|
ASL_TEST_EXPECT(d[0] == false);
|
||||||
ASL_TEST_EXPECT(d[1] == false);
|
ASL_TEST_EXPECT(d[1] == false);
|
||||||
ASL_TEST_EXPECT(d[2] == false); // moved but not destroyed
|
ASL_TEST_EXPECT(d[2] == true);
|
||||||
ASL_TEST_EXPECT(d[3] == false); // moved but not destroyed
|
ASL_TEST_EXPECT(d[3] == true);
|
||||||
ASL_TEST_EXPECT(d[4] == true);
|
ASL_TEST_EXPECT(d[4] == true);
|
||||||
ASL_TEST_EXPECT(d[5] == true);
|
ASL_TEST_EXPECT(d[5] == true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASL_TEST_EXPECT(d[0] == true);
|
ASL_TEST_EXPECT(d[0] == true);
|
||||||
ASL_TEST_EXPECT(d[1] == true);
|
ASL_TEST_EXPECT(d[1] == true);
|
||||||
ASL_TEST_EXPECT(d[2] == false); // moved but not destroyed
|
ASL_TEST_EXPECT(d[2] == true);
|
||||||
ASL_TEST_EXPECT(d[3] == false); // moved but not destroyed
|
ASL_TEST_EXPECT(d[3] == true);
|
||||||
ASL_TEST_EXPECT(d[4] == true);
|
ASL_TEST_EXPECT(d[4] == true);
|
||||||
ASL_TEST_EXPECT(d[5] == true);
|
ASL_TEST_EXPECT(d[5] == true);
|
||||||
}
|
}
|
||||||
|
@ -335,6 +335,12 @@ public:
|
|||||||
resize_uninit_inner(new_size);
|
resize_uninit_inner(new_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pop()
|
||||||
|
{
|
||||||
|
ASL_ASSERT(size() > 0);
|
||||||
|
resize_uninit_inner(size() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename Chunk>
|
template<typename Chunk>
|
||||||
class generic_iterator
|
class generic_iterator
|
||||||
{
|
{
|
||||||
|
@ -135,6 +135,48 @@ ASL_TEST(push)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASL_TEST(pop)
|
||||||
|
{
|
||||||
|
asl::chunked_buffer<int, 2> b;
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i)
|
||||||
|
{
|
||||||
|
b.push(i);
|
||||||
|
}
|
||||||
|
ASL_TEST_EXPECT(b.size() == 8);
|
||||||
|
|
||||||
|
b.pop();
|
||||||
|
ASL_TEST_EXPECT(b.size() == 7);
|
||||||
|
for (int i = 0; i < 7; ++i)
|
||||||
|
{
|
||||||
|
ASL_TEST_EXPECT(b[i] == i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ASL_TEST(pop_destruct)
|
||||||
|
{
|
||||||
|
asl::chunked_buffer<DestructorObserver, 16> b;
|
||||||
|
bool d[3];
|
||||||
|
|
||||||
|
b.push(&d[0]);
|
||||||
|
b.push(&d[1]);
|
||||||
|
b.push(&d[2]);
|
||||||
|
|
||||||
|
ASL_TEST_EXPECT(!d[0]);
|
||||||
|
ASL_TEST_EXPECT(!d[1]);
|
||||||
|
ASL_TEST_EXPECT(!d[2]);
|
||||||
|
|
||||||
|
b.pop();
|
||||||
|
ASL_TEST_EXPECT(!d[0]);
|
||||||
|
ASL_TEST_EXPECT(!d[1]);
|
||||||
|
ASL_TEST_EXPECT(d[2]);
|
||||||
|
|
||||||
|
b.pop();
|
||||||
|
ASL_TEST_EXPECT(!d[0]);
|
||||||
|
ASL_TEST_EXPECT(d[1]);
|
||||||
|
ASL_TEST_EXPECT(d[2]);
|
||||||
|
}
|
||||||
|
|
||||||
ASL_TEST(clear_destroy)
|
ASL_TEST(clear_destroy)
|
||||||
{
|
{
|
||||||
bool destroyed[5]{};
|
bool destroyed[5]{};
|
||||||
|
@ -77,7 +77,7 @@ struct DestructorObserver
|
|||||||
{
|
{
|
||||||
if (this != &other)
|
if (this != &other)
|
||||||
{
|
{
|
||||||
destroyed = asl::exchange(other.destroyed, nullptr);
|
asl::swap(destroyed, other.destroyed);
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user