diff --git a/src/main.cc b/src/main.cc index a215278..74c8ba0 100644 --- a/src/main.cc +++ b/src/main.cc @@ -21,18 +21,19 @@ int main() { vase.insert(100, "gr\ntt", 5); vase.insert(20, "gr\ntt", 5); - vase.type(5, 'k'); - vase.type(6, 'l'); - vase.type(7, 'm'); - vase.type(8, 'n'); + vase.type(5, '1'); + vase.type(6, '2'); + vase.type(7, '3'); + vase.type(8, '4'); + + vase.erase(9, -2); print_shard(vase.root); LineIterator it(vase.root, 3); std::string line; - while (it.next(line)) { + while (it.next(line)) std::cout << line << "\n"; - } std::cout << "\n\n" << vase.to_string(); diff --git a/src/vase/shard.cc b/src/vase/shard.cc index 4a0e218..e949b60 100644 --- a/src/vase/shard.cc +++ b/src/vase/shard.cc @@ -43,10 +43,12 @@ Shard *balance(Shard *node) { if (bf > 1) { Branch *left = (Branch *)b->left; if (balance_factor(left) < 0) { + Shard::retain(left); auto new_left = rotate_left(left); auto rebuilt = new Branch(new_left, b->right); auto result = rotate_right((Branch *)rebuilt); Shard::release(new_left); + Shard::release(b); return result; } return rotate_right(b); @@ -55,10 +57,12 @@ Shard *balance(Shard *node) { if (bf < -1) { Branch *right = (Branch *)b->right; if (balance_factor(right) > 0) { + Shard::retain(right); auto new_right = rotate_right(right); auto rebuilt = new Branch(b->left, new_right); auto result = rotate_left((Branch *)rebuilt); Shard::release(new_right); + Shard::release(b); return result; } return rotate_left(b);