Simplify handling of beginNode invalidation if begin is prefix of end
This commit is contained in:
@@ -2944,16 +2944,14 @@ void addWriteRange(Node *&root, std::span<const uint8_t> begin,
|
||||
auto *p = nextLogical(endNode);
|
||||
endNode->entry.pointVersion =
|
||||
p == nullptr ? tls->zero : std::max(p->entry.rangeVersion, tls->zero);
|
||||
if (beginIsPrefix) {
|
||||
// beginNode may have been invalidated when inserting end
|
||||
beginNode = *useAsRoot;
|
||||
assert(beginNode->entryPresent);
|
||||
}
|
||||
}
|
||||
endNode->entry.rangeVersion = writeVersion;
|
||||
|
||||
if (beginIsPrefix && insertedEnd) {
|
||||
// beginNode may have been invalidated when inserting end. TODO can we do
|
||||
// better?
|
||||
beginNode = *insert(useAsRoot, begin, writeVersion, tls, impl);
|
||||
assert(beginNode->entryPresent);
|
||||
}
|
||||
|
||||
for (beginNode = nextLogical(beginNode); beginNode != endNode;
|
||||
beginNode = erase(beginNode, tls, impl, /*logical*/ true, endNode)) {
|
||||
}
|
||||
|
Reference in New Issue
Block a user