diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 299f72c..dcd3100 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2936,36 +2936,23 @@ void addWriteRange(Node *&root, std::span begin, Node **useAsRoot = insert(&root, begin.subspan(0, lcp), writeVersion, tls, impl); - int consumed = lcp; - - begin = begin.subspan(consumed, begin.size() - consumed); - end = end.subspan(consumed, end.size() - consumed); + begin = begin.subspan(lcp, begin.size() - lcp); + end = end.subspan(lcp, end.size() - lcp); auto *beginNode = *insert(useAsRoot, begin, writeVersion, tls, impl); - - const bool insertedBegin = !beginNode->entryPresent; - addKey(beginNode); - beginNode->entryPresent = true; - - if (insertedBegin) { + if (!beginNode->entryPresent) { ++tls->accum.entries_inserted; auto *p = nextLogical(beginNode); beginNode->entry.rangeVersion = p == nullptr ? tls->zero : std::max(p->entry.rangeVersion, tls->zero); - beginNode->entry.pointVersion = writeVersion; + beginNode->entryPresent = true; } - assert(writeVersion >= beginNode->entry.pointVersion); beginNode->entry.pointVersion = writeVersion; auto *endNode = *insert(useAsRoot, end, writeVersion, tls, impl); - - const bool insertedEnd = !endNode->entryPresent; - addKey(endNode); - endNode->entryPresent = true; - - if (insertedEnd) { + if (!endNode->entryPresent) { ++tls->accum.entries_inserted; auto *p = nextLogical(endNode); endNode->entry.pointVersion = @@ -2975,6 +2962,7 @@ void addWriteRange(Node *&root, std::span begin, beginNode = *useAsRoot; assert(beginNode->entryPresent); } + endNode->entryPresent = true; } endNode->entry.rangeVersion = writeVersion;