diff options
Diffstat (limited to 'src/MultigroupCodec.cpp')
| -rw-r--r-- | src/MultigroupCodec.cpp | 67 |
1 files changed, 27 insertions, 40 deletions
diff --git a/src/MultigroupCodec.cpp b/src/MultigroupCodec.cpp index 3deaa23..0d0cf14 100644 --- a/src/MultigroupCodec.cpp +++ b/src/MultigroupCodec.cpp @@ -4,81 +4,68 @@ #include <map> -namespace nt::MultigroupCodec -{ +namespace nt::MultigroupCodec { // A relation with zero tuples reports an empty merkle_root externally. // The merkle tree's payload type is fixed-width Hash32, so the codec // maps "" ↔ the all-zero hash. The collision probability with a real // SHA256 hitting all-zero (2^-256) is treated as unreachable. - static nt::Hash32 encode_payload(const std::string& hex) - { - if (hex.empty()) return nt::Hash32{}; + static nt::Hash32 encode_payload(const std::string& hex) { + if (hex.empty()) + return nt::Hash32{}; return nt::hex_to_bin(hex); } - static std::string decode_payload(const nt::Hash32& bin) - { + static std::string decode_payload(const nt::Hash32& bin) { static const nt::Hash32 zero{}; - if (bin == zero) return ""; + if (bin == zero) + return ""; return nt::bin_to_hex(bin); } - std::string Build(IStorageBackend& store, - const std::vector<RelationEntry>& relations) - { + std::string Build(IStorageBackend& store, const std::vector<RelationEntry>& relations) { std::map<std::string, std::string> canonical; for (const auto& [name, root_hex] : relations) canonical[name] = root_hex; std::string root; for (const auto& [name, root_hex] : canonical) - root = nt::Merkle<std::string>::Insert(store, root, name, - encode_payload(root_hex)); + root = nt::Merkle<std::string>::Insert(store, root, name, encode_payload(root_hex)); return root; } - std::vector<RelationEntry> List(IStorageBackend& store, - const std::string& root_hex) - { + std::vector<RelationEntry> List(IStorageBackend& store, const std::string& root_hex) { std::vector<RelationEntry> out; constexpr size_t kPageSize = 1024; size_t offset = 0; - while (true) - { - auto page = nt::Merkle<std::string>::Page(store, root_hex, - offset, kPageSize); - if (page.empty()) break; + while (true) { + auto page = nt::Merkle<std::string>::Page(store, root_hex, offset, kPageSize); + if (page.empty()) + break; for (auto& entry : page) - out.emplace_back(std::move(entry.key), - decode_payload(entry.payload)); - if (page.size() < kPageSize) break; + out.emplace_back(std::move(entry.key), decode_payload(entry.payload)); + if (page.size() < kPageSize) + break; offset += page.size(); } return out; } - std::string InsertOne(IStorageBackend& store, - const std::string& root_hex, - const std::string& relation_name, - const std::string& relation_root_hex) - { + std::string InsertOne(IStorageBackend& store, const std::string& root_hex, + const std::string& relation_name, const std::string& relation_root_hex) { return nt::Merkle<std::string>::Insert(store, root_hex, relation_name, - encode_payload(relation_root_hex)); + encode_payload(relation_root_hex)); } - std::string RemoveOne(IStorageBackend& store, - const std::string& root_hex, - const std::string& relation_name) - { + std::string RemoveOne(IStorageBackend& store, const std::string& root_hex, + const std::string& relation_name) { return nt::Merkle<std::string>::Remove(store, root_hex, relation_name); } - std::string Lookup(IStorageBackend& store, - const std::string& root_hex, - const std::string& relation_name) - { + std::string Lookup(IStorageBackend& store, const std::string& root_hex, + const std::string& relation_name) { auto found = nt::Merkle<std::string>::Get(store, root_hex, relation_name); - if (!found) return ""; + if (!found) + return ""; return decode_payload(*found); } -} +} // namespace nt::MultigroupCodec |
