feat(util/buffer): add insert method
This commit is contained in:
parent
b01cf73a91
commit
eb184984c0
2 changed files with 35 additions and 0 deletions
|
@ -58,9 +58,33 @@ static void tst2() {
|
||||||
lean_assert(b2.size() == 1);
|
lean_assert(b2.size() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check(buffer<int> const & b, std::initializer_list<int> const & l) {
|
||||||
|
lean_assert(b.size() == l.size());
|
||||||
|
unsigned i = 0;
|
||||||
|
for (int v : l) {
|
||||||
|
lean_assert(b[i] == v);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tst3() {
|
||||||
|
buffer<int> b;
|
||||||
|
for (unsigned i = 0; i < 5; i++)
|
||||||
|
b.push_back(i);
|
||||||
|
b.insert(0, 1000);
|
||||||
|
check(b, {1000, 0, 1, 2, 3, 4});
|
||||||
|
b.insert(1, 2000);
|
||||||
|
check(b, {1000, 2000, 0, 1, 2, 3, 4});
|
||||||
|
b.insert(6, 100);
|
||||||
|
check(b, {1000, 2000, 0, 1, 2, 3, 100, 4});
|
||||||
|
b.insert(8, 300);
|
||||||
|
check(b, {1000, 2000, 0, 1, 2, 3, 100, 4, 300});
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
loop<buffer<int>>(100);
|
loop<buffer<int>>(100);
|
||||||
tst1();
|
tst1();
|
||||||
tst2();
|
tst2();
|
||||||
|
tst3();
|
||||||
return has_violations() ? 1 : 0;
|
return has_violations() ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,17 @@ public:
|
||||||
m_pos--;
|
m_pos--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void insert(unsigned idx, T const & elem) {
|
||||||
|
using std::swap;
|
||||||
|
lean_assert(idx <= size());
|
||||||
|
push_back(elem);
|
||||||
|
unsigned i = size();
|
||||||
|
while (i > idx + 1) {
|
||||||
|
--i;
|
||||||
|
swap(m_buffer[i], m_buffer[i-1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void shrink(unsigned nsz) {
|
void shrink(unsigned nsz) {
|
||||||
unsigned sz = size();
|
unsigned sz = size();
|
||||||
lean_assert(nsz <= sz);
|
lean_assert(nsz <= sz);
|
||||||
|
|
Loading…
Reference in a new issue