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);
|
auto *p = nextLogical(endNode);
|
||||||
endNode->entry.pointVersion =
|
endNode->entry.pointVersion =
|
||||||
p == nullptr ? tls->zero : std::max(p->entry.rangeVersion, tls->zero);
|
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;
|
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;
|
for (beginNode = nextLogical(beginNode); beginNode != endNode;
|
||||||
beginNode = erase(beginNode, tls, impl, /*logical*/ true, endNode)) {
|
beginNode = erase(beginNode, tls, impl, /*logical*/ true, endNode)) {
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user