diff options
| author | jacqueline <me@jacqueline.id.au> | 2025-01-24 11:44:36 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2025-01-24 11:44:36 +1100 |
| commit | b4b43ca3eb011b0b69db39821ac310229e1b37ad (patch) | |
| tree | b53e5f14926e03ff5c5399b3be95c827a255c83b /src/tangara/database/records.cpp | |
| parent | 337f62669bb0b3ab35333ee4bbd46a9b46fde386 (diff) | |
| parent | 580712acd11d5afdacd51c2e8d29313efc93d520 (diff) | |
| download | tangara-fw-b4b43ca3eb011b0b69db39821ac310229e1b37ad.tar.gz | |
Merge branch 'main' of codeberg.org:cool-tech-zone/tangara-fw
Diffstat (limited to 'src/tangara/database/records.cpp')
| -rw-r--r-- | src/tangara/database/records.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/tangara/database/records.cpp b/src/tangara/database/records.cpp index addcc13d..852eb131 100644 --- a/src/tangara/database/records.cpp +++ b/src/tangara/database/records.cpp @@ -181,11 +181,13 @@ auto EncodeAllIndexesPrefix() -> std::string { auto EncodeIndexPrefix(const IndexKey::Header& header) -> std::string { std::ostringstream out; out << makePrefix(kIndexPrefix); - cppbor::Array val{ - cppbor::Uint{header.id}, - cppbor::Uint{header.depth}, - cppbor::Uint{header.components_hash}, - }; + + cppbor::Array components{}; + for (auto hash : header.components_hash) { + components.add(cppbor::Uint{hash}); + } + + cppbor::Array val{cppbor::Uint{header.id}, std::move(components)}; out << val.toString() << kFieldSeparator; return out.str(); } @@ -210,8 +212,8 @@ auto EncodeIndexKey(const IndexKey& key) -> std::string { out << EncodeIndexPrefix(key.header); // The component should already be UTF-8 encoded, so just write it. - if (key.item) { - out << *key.item << kFieldSeparator; + if (!key.item.empty()) { + out << key.item << kFieldSeparator; } if (key.track) { @@ -236,14 +238,16 @@ auto ParseIndexKey(const leveldb::Slice& slice) -> std::optional<IndexKey> { return {}; } auto as_array = key->asArray(); - if (as_array->size() != 3 || as_array->get(0)->type() != cppbor::UINT || - as_array->get(1)->type() != cppbor::UINT || - as_array->get(2)->type() != cppbor::UINT) { + if (as_array->size() != 2 || as_array->get(0)->type() != cppbor::UINT || + as_array->get(1)->type() != cppbor::ARRAY) { return {}; } result.header.id = as_array->get(0)->asUint()->unsignedValue(); - result.header.depth = as_array->get(1)->asUint()->unsignedValue(); - result.header.components_hash = as_array->get(2)->asUint()->unsignedValue(); + auto components_array = as_array->get(1)->asArray(); + for (int i = 0; i < components_array->size(); i++) { + result.header.components_hash.push_back( + components_array->get(i)->asUint()->unsignedValue()); + } size_t header_length = reinterpret_cast<const char*>(end_of_key) - key_data.data(); |
