| 401 | } |
| 402 | |
| 403 | void BTreeDatabase::IndexNode::shiftRight(ByteArray const& mid, IndexNode& left, size_t count) { |
| 404 | count = std::min(left.pointerCount(), count); |
| 405 | |
| 406 | if (count == 0) |
| 407 | return; |
| 408 | --count; |
| 409 | |
| 410 | pointers.insert(pointers.begin(), Element{mid, *beginPointer}); |
| 411 | |
| 412 | ElementList::iterator s = left.pointers.begin(); |
| 413 | std::advance(s, left.pointers.size() - count); |
| 414 | pointers.insert(pointers.begin(), s, left.pointers.end()); |
| 415 | |
| 416 | left.pointers.erase(s, left.pointers.end()); |
| 417 | if (left.pointers.size() != 0) { |
| 418 | beginPointer = left.pointers.at(left.pointers.size() - 1).pointer; |
| 419 | left.pointers.eraseAt(left.pointers.size() - 1); |
| 420 | } else { |
| 421 | beginPointer = left.beginPointer.take(); |
| 422 | } |
| 423 | } |
| 424 | |
| 425 | ByteArray BTreeDatabase::IndexNode::split(IndexNode& right, size_t i) { |
| 426 | ElementList::iterator s = pointers.begin(); |