Simplify and fix bugs
Some checks failed
Tests / Release [gcc] total: 363, failed: 2, passed: 361
Tests / Coverage total: 361, passed: 361
weaselab/conflict-set/pipeline/head There was a failure building this commit

This commit is contained in:
2024-02-09 22:45:38 -08:00
parent 418bab61f5
commit 35a3289ab9
342 changed files with 27 additions and 50 deletions

View File

@@ -27,7 +27,7 @@ int compare(std::span<const uint8_t> lhs, std::span<const uint8_t> rhs) {
if (c != 0) {
return c;
}
return int(rhs.size()) - int(lhs.size());
return int(lhs.size()) - int(rhs.size());
}
std::span<uint8_t> strincMutate(std::span<uint8_t> str, bool &ok) {
@@ -774,74 +774,50 @@ bool checkRangeRead(Node *n, const std::span<const uint8_t> begin,
const std::span<const uint8_t> end, int64_t readVersion,
Arena &arena) {
auto left = FirstGeqStepwise{n, begin};
auto right = FirstGeqStepwise{n, end};
bool leftDone = left.step();
bool rightDone = right.step();
if (!leftDone && !rightDone) {
for (;;) {
if (left.phase == FirstGeqStepwise::Search &&
right.phase == FirstGeqStepwise::Search &&
left.n->maxVersion <= readVersion) {
return true;
}
leftDone = left.step();
rightDone = right.step();
if (leftDone || rightDone) {
break;
}
if (left.n != right.n) {
break;
}
}
}
if (!leftDone) {
while (!left.step())
;
}
if (!rightDone) {
while (!right.step())
;
}
while (!left.step())
;
#if DEBUG_VERBOSE && !defined(NDEBUG)
fprintf(stderr, "firstGeq for `%s' got `%s'\n", printable(begin).c_str(),
getSearchPathPrintable(left.n).c_str());
fprintf(stderr, "firstGeq for `%s' got `%s'\n", printable(end).c_str(),
getSearchPathPrintable(right.n).c_str());
#endif
if (left.n != nullptr && left.cmp != 0 &&
left.n->entry.rangeVersion > readVersion) {
return false;
}
if (left.n == right.n) {
if (left.n == nullptr) {
return true;
}
assert(left.n != nullptr);
if (left.n->entry.pointVersion > readVersion) {
return false;
}
auto searchPath = getSearchPath(arena, left.n);
for (auto *iter = nextPhysical(left.n, searchPath); iter != right.n;) {
assert(searchPath == getSearchPath(arena, iter));
if (iter->entryPresent && iter->entry.rangeVersion > readVersion) {
return false;
if (left.cmp != 0 && left.n->entry.rangeVersion > readVersion) {
return false;
}
bool first = true;
for (auto *iter = left.n; iter != nullptr && compare(searchPath, end) < 0;
first = false) {
if (iter->entryPresent) {
if (!first && iter->entry.rangeVersion > readVersion) {
return false;
}
if (iter->entry.pointVersion > readVersion) {
return false;
}
}
bool ok = true;
assert(searchPath == getSearchPath(arena, iter));
#if DEBUG_VERBOSE && !defined(NDEBUG)
fprintf(stderr, "Max version of keys starting with %s: %" PRId64 "\n",
printable(searchPath).c_str(), iter->maxVersion);
#endif
bool ok = true;
auto rangeEnd = strincMutate(searchPath, ok);
int c;
if (!ok) {
return iter->maxVersion <= readVersion;
goto iterate;
}
int c = compare(rangeEnd, end);
c = compare(rangeEnd, end);
--rangeEnd.back();
if (c == 0) {
return iter->maxVersion <= readVersion;
} else if (c < 0) {
@@ -850,6 +826,7 @@ bool checkRangeRead(Node *n, const std::span<const uint8_t> begin,
}
iter = nextSibling(iter, searchPath);
} else {
iterate:
if (iter->maxVersion <= readVersion) {
return true;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More