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(d[0] == false);
|
||||
ASL_TEST_EXPECT(d[1] == false);
|
||||
ASL_TEST_EXPECT(d[2] == false); // moved but not destroyed
|
||||
ASL_TEST_EXPECT(d[3] == false); // moved but not destroyed
|
||||
ASL_TEST_EXPECT(d[2] == true);
|
||||
ASL_TEST_EXPECT(d[3] == true);
|
||||
ASL_TEST_EXPECT(d[4] == true);
|
||||
ASL_TEST_EXPECT(d[5] == true);
|
||||
}
|
||||
|
||||
ASL_TEST_EXPECT(d[0] == true);
|
||||
ASL_TEST_EXPECT(d[1] == true);
|
||||
ASL_TEST_EXPECT(d[2] == false); // moved but not destroyed
|
||||
ASL_TEST_EXPECT(d[3] == false); // moved but not destroyed
|
||||
ASL_TEST_EXPECT(d[2] == true);
|
||||
ASL_TEST_EXPECT(d[3] == true);
|
||||
ASL_TEST_EXPECT(d[4] == true);
|
||||
ASL_TEST_EXPECT(d[5] == true);
|
||||
}
|
||||
|
@ -335,6 +335,12 @@ public:
|
||||
resize_uninit_inner(new_size);
|
||||
}
|
||||
|
||||
void pop()
|
||||
{
|
||||
ASL_ASSERT(size() > 0);
|
||||
resize_uninit_inner(size() - 1);
|
||||
}
|
||||
|
||||
template<typename Chunk>
|
||||
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)
|
||||
{
|
||||
bool destroyed[5]{};
|
||||
|
@ -77,7 +77,7 @@ struct DestructorObserver
|
||||
{
|
||||
if (this != &other)
|
||||
{
|
||||
destroyed = asl::exchange(other.destroyed, nullptr);
|
||||
asl::swap(destroyed, other.destroyed);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
Reference in New Issue
Block a user