#include "Facade.h" #include "PrintMutation.h" #include "VersionedMap.h" #include inline weaselab::VersionedMap::Key operator""_k(const char *str, size_t size) { return {reinterpret_cast(str), int(size)}; } inline String operator""_s(const char *str, size_t size) { return String{reinterpret_cast(str), size}; } weaselab::VersionedMap::Mutation set(weaselab::VersionedMap::Key k, weaselab::VersionedMap::Key v) { return {k.p, k.len, v.p, v.len, weaselab::VersionedMap::Set}; } weaselab::VersionedMap::Mutation clear(weaselab::VersionedMap::Key k) { return {k.p, k.len, nullptr, 0, weaselab::VersionedMap::Clear}; } weaselab::VersionedMap::Mutation clear(weaselab::VersionedMap::Key begin, weaselab::VersionedMap::Key end) { return {begin.p, begin.len, end.p, end.len, weaselab::VersionedMap::Clear}; } void breakpoint_me() {} int main() { Facade f(0); int64_t version = 1; { weaselab::VersionedMap::Mutation m[] = { set("a"_k, "a"_k), set("b"_k, "b"_k), set("c"_k, "c"_k), set("d"_k, "d"_k), set("e"_k, "e"_k), }; f.addMutations(m, sizeof(m) / sizeof(m[0]), version++); } { weaselab::VersionedMap::Mutation m[] = { clear("b"_k, "d"_k), }; f.addMutations(m, sizeof(m) / sizeof(m[0]), version++); } f.setOldestVersion(1); for (int64_t i = 1; i < version; ++i) { printf("--- version %" PRId64 " ---\n", i); printf("merged:\n"); auto result = f.viewAt(i).rangeRead("a"_s, "e"_s, 100, false); for (const auto &[k, v] : result) { for (auto c : k) { if (isprint(c)) { printf("%c", c); } else { printf("x%02x", c); } } printf(" -> "); for (auto c : v) { if (isprint(c)) { printf("%c", c); } else { printf("x%02x", c); } } printf("\n"); } printf("unversioned:\n"); for (const auto &[k, v] : f.unversioned) { for (auto c : k) { if (isprint(c)) { printf("%c", c); } else { printf("x%02x", c); } } printf(" -> "); for (auto c : v) { if (isprint(c)) { printf("%c", c); } else { printf("x%02x", c); } } printf("\n"); } breakpoint_me(); printf("versioned:\n"); for (auto iter = f.versioned.begin(i), end = f.versioned.end(i); iter != end; ++iter) { printMutation(*iter); } } }