From ecd549857bdfd58aa5d32c37deb7c884ce89b4c8 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 30 Jan 2024 17:16:46 -0800 Subject: [PATCH] Add printTree --- ConflictSet.cpp | 19 ++++++++++++++++++- Internal.h | 26 +++++++------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 3f66d0f..d35a52f 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1083,8 +1083,25 @@ void bench() { } } +void printTree() { + int64_t writeVersion = 0; + ConflictSet::Impl cs{writeVersion}; + ReferenceImpl refImpl{writeVersion}; + Arena arena; + constexpr int kNumKeys = 5; + auto *write = new (arena) ConflictSet::WriteRange[kNumKeys]; + for (int i = 0; i < kNumKeys; ++i) { + write[i].begin = toKey(arena, i); + write[i].end.len = 0; + write[i].writeVersion = ++writeVersion; + } + cs.addWrites(write, kNumKeys); + debugPrintDot(stdout, cs.root); +} + int main(void) { - bench(); + // bench(); + printTree(); return 0; } #endif diff --git a/Internal.h b/Internal.h index 48ba17d..3283b22 100644 --- a/Internal.h +++ b/Internal.h @@ -410,28 +410,16 @@ struct ReferenceImpl { using Key = ConflictSet::Key; [[maybe_unused]] static Key toKey(Arena &arena, int n) { - constexpr int kMaxLength = 8; - int i = kMaxLength; - uint8_t *itoaBuf = new (arena) uint8_t[kMaxLength]; - memset(itoaBuf, '0', kMaxLength); - do { - itoaBuf[--i] = "0123456789abcdef"[n % 16]; - n /= 16; - } while (n); - return Key{itoaBuf, kMaxLength}; + uint8_t *buf = new (arena) uint8_t[sizeof(n)]; + memcpy(buf, &n, sizeof(n)); + return Key{buf, sizeof(n)}; } [[maybe_unused]] static Key toKeyAfter(Arena &arena, int n) { - constexpr int kMaxLength = 8; - int i = kMaxLength; - uint8_t *itoaBuf = new (arena) uint8_t[kMaxLength + 1]; - memset(itoaBuf, '0', kMaxLength); - itoaBuf[kMaxLength] = 0; - do { - itoaBuf[--i] = "0123456789abcdef"[n % 16]; - n /= 16; - } while (n); - return Key{itoaBuf, kMaxLength + 1}; + uint8_t *buf = new (arena) uint8_t[sizeof(n) + 1]; + memcpy(buf, &n, sizeof(n)); + buf[sizeof(n)] = 0; + return Key{buf, sizeof(n) + 1}; } inline std::string printable(std::string_view key) {