diff --git a/ConflictSet.cpp b/ConflictSet.cpp index b9960c5..26fcf0e 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1763,7 +1763,7 @@ void eraseTree(Node *root, WriteContext *tls) { } void eraseBetween(Node **inTree, Node3 *n, int begin, int end, - WriteContext *tls, ConflictSet::Impl *impl) { + WriteContext *tls) { const unsigned shiftUpperBound = end - begin; const unsigned shiftAmount = begin; auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; }; @@ -1784,14 +1784,13 @@ void eraseBetween(Node **inTree, Node3 *n, int begin, int end, if (n->numChildren == 0) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } } void eraseBetween(Node **inTree, Node16 *n, int begin, int end, - WriteContext *tls, ConflictSet::Impl *impl) { + WriteContext *tls) { const unsigned shiftUpperBound = end - begin; const unsigned shiftAmount = begin; auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; }; @@ -1812,20 +1811,18 @@ void eraseBetween(Node **inTree, Node16 *n, int begin, int end, if (n->numChildren == 0) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } else if (n->numChildren <= Node3::kMaxNodes) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } } void eraseBetween(Node **inTree, Node48 *n, int begin, int end, - WriteContext *tls, ConflictSet::Impl *impl) { + WriteContext *tls) { const unsigned shiftUpperBound = end - begin; const unsigned shiftAmount = begin; auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; }; @@ -1856,26 +1853,23 @@ void eraseBetween(Node **inTree, Node48 *n, int begin, int end, if (n->numChildren == 0) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } else if (n->numChildren <= Node3::kMaxNodes) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } else if (n->numChildren <= Node16::kMaxNodes) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } } void eraseBetween(Node **inTree, Node256 *n, int begin, int end, - WriteContext *tls, ConflictSet::Impl *impl) { + WriteContext *tls) { const unsigned shiftUpperBound = end - begin; const unsigned shiftAmount = begin; auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; }; @@ -1894,25 +1888,21 @@ void eraseBetween(Node **inTree, Node256 *n, int begin, int end, if (n->numChildren == 0) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } else if (n->numChildren <= Node3::kMaxNodes) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } else if (n->numChildren <= Node16::kMaxNodes) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } else if (n->numChildren <= Node48::kMaxNodes) { auto *newNode = tls->allocate(n->partialKeyLen); newNode->copyChildrenAndKeyFrom(*n); - getInTree(n, impl) = newNode; tls->release(n); *inTree = newNode; } @@ -1920,8 +1910,7 @@ void eraseBetween(Node **inTree, Node256 *n, int begin, int end, // Erase all nodes with a search path starting with n + [child], // where child in [begin, end). -void eraseBetween(Node *&n, int begin, int end, WriteContext *tls, - ConflictSet::Impl *impl) { +void eraseBetween(Node *&n, int begin, int end, WriteContext *tls) { #if DEBUG_VERBOSE && !defined(NDEBUG) fprintf(stderr, "eraseBetween: %s + [%d,%d)\n", getSearchPathPrintable(n).c_str(), begin, end); @@ -1930,16 +1919,16 @@ void eraseBetween(Node *&n, int begin, int end, WriteContext *tls, case Type_Node0: break; case Type_Node3: - eraseBetween(&n, (Node3 *)n, begin, end, tls, impl); + eraseBetween(&n, (Node3 *)n, begin, end, tls); break; case Type_Node16: - eraseBetween(&n, (Node16 *)n, begin, end, tls, impl); + eraseBetween(&n, (Node16 *)n, begin, end, tls); break; case Type_Node48: - eraseBetween(&n, (Node48 *)n, begin, end, tls, impl); + eraseBetween(&n, (Node48 *)n, begin, end, tls); break; case Type_Node256: - eraseBetween(&n, (Node256 *)n, begin, end, tls, impl); + eraseBetween(&n, (Node256 *)n, begin, end, tls); break; default: // GCOVR_EXCL_LINE __builtin_unreachable(); // GCOVR_EXCL_LINE @@ -3228,7 +3217,7 @@ void addPrefixWrite(Node *&root, std::span begin, } endNode->entry.rangeVersion = writeVersion; - eraseBetween(beginNode, 0, 256, tls, impl); + eraseBetween(getInTree(beginNode, impl), 0, 256, tls); // Inserting end trashed endNode's maxVersion. Fix that fixupMaxVersion(endNode, impl, tls);