Include mutation's version in Iterator::operator*
This commit is contained in:
@@ -821,7 +821,8 @@ VersionedMap::Iterator::operator=(Iterator &&other) noexcept {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionedMap::Mutation VersionedMap::Iterator::operator*() const {
|
VersionedMap::Iterator::VersionedMutation
|
||||||
|
VersionedMap::Iterator::operator*() const {
|
||||||
assert(impl->finger.backNode() != 0);
|
assert(impl->finger.backNode() != 0);
|
||||||
assert(impl->finger.searchPathSize() != 0);
|
assert(impl->finger.searchPathSize() != 0);
|
||||||
const auto &entry = *impl->map->mm.base[impl->finger.backNode()].entry;
|
const auto &entry = *impl->map->mm.base[impl->finger.backNode()].entry;
|
||||||
@@ -832,12 +833,14 @@ VersionedMap::Mutation VersionedMap::Iterator::operator*() const {
|
|||||||
const auto &prevEntry =
|
const auto &prevEntry =
|
||||||
*prev.impl->map->mm.base[prev.impl->finger.backNode()].entry;
|
*prev.impl->map->mm.base[prev.impl->finger.backNode()].entry;
|
||||||
return {prevEntry.getKey(), entry.getKey(), prevEntry.keyLen + 1,
|
return {prevEntry.getKey(), entry.getKey(), prevEntry.keyLen + 1,
|
||||||
entry.keyLen, Clear};
|
entry.keyLen, Clear, entry.rangeVersion};
|
||||||
}
|
}
|
||||||
if (entry.valLen >= 0) {
|
if (entry.valLen >= 0) {
|
||||||
return {entry.getKey(), entry.getVal(), entry.keyLen, entry.valLen, Set};
|
return {entry.getKey(), entry.getVal(), entry.keyLen, entry.valLen, Set,
|
||||||
|
entry.pointVersion};
|
||||||
} else {
|
} else {
|
||||||
return {entry.getKey(), nullptr, entry.keyLen, -1, Clear};
|
return {entry.getKey(), nullptr, entry.keyLen, -1,
|
||||||
|
Clear, entry.pointVersion};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1021,11 +1024,11 @@ int main() {
|
|||||||
for (int i = 0; i < m.param1Len; ++i) {
|
for (int i = 0; i < m.param1Len; ++i) {
|
||||||
printf("x%02x", m.param1[i]);
|
printf("x%02x", m.param1[i]);
|
||||||
}
|
}
|
||||||
printf(" -> ");
|
printf(" -> '");
|
||||||
for (int i = 0; i < m.param2Len; ++i) {
|
for (int i = 0; i < m.param2Len; ++i) {
|
||||||
printf("x%02x", m.param2[i]);
|
printf("x%02x", m.param2[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("' @ %" PRId64 "\n", m.version);
|
||||||
break;
|
break;
|
||||||
case weaselab::VersionedMap::Clear:
|
case weaselab::VersionedMap::Clear:
|
||||||
printf("clear [");
|
printf("clear [");
|
||||||
@@ -1036,7 +1039,7 @@ int main() {
|
|||||||
for (int i = 0; i < m.param2Len; ++i) {
|
for (int i = 0; i < m.param2Len; ++i) {
|
||||||
printf("x%02x", m.param2[i]);
|
printf("x%02x", m.param2[i]);
|
||||||
}
|
}
|
||||||
printf(")\n");
|
printf(") @ %" PRId64 "\n", m.version);
|
||||||
break;
|
break;
|
||||||
default: // GCOVR_EXCL_LINE
|
default: // GCOVR_EXCL_LINE
|
||||||
__builtin_unreachable(); // GCOVR_EXCL_LINE
|
__builtin_unreachable(); // GCOVR_EXCL_LINE
|
||||||
|
@@ -104,9 +104,13 @@ struct VersionedMap {
|
|||||||
Iterator(Iterator &&) noexcept;
|
Iterator(Iterator &&) noexcept;
|
||||||
Iterator &operator=(Iterator &&) noexcept;
|
Iterator &operator=(Iterator &&) noexcept;
|
||||||
|
|
||||||
|
struct VersionedMutation : Mutation {
|
||||||
|
int64_t version;
|
||||||
|
};
|
||||||
|
|
||||||
/** iter must not be `end()`. Memory pointed-to by return value is valid as
|
/** iter must not be `end()`. Memory pointed-to by return value is valid as
|
||||||
* long as the iterator is valid. */
|
* long as the iterator is valid. */
|
||||||
Mutation operator*() const;
|
VersionedMutation operator*() const;
|
||||||
|
|
||||||
/** iter must not be `end()` */
|
/** iter must not be `end()` */
|
||||||
Iterator &operator++();
|
Iterator &operator++();
|
||||||
|
Reference in New Issue
Block a user