diff options
| author | ailurux <ailuruxx@gmail.com> | 2024-04-02 11:13:50 +1100 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2024-04-02 11:13:50 +1100 |
| commit | e20ebe7574db5aedc73f07b7bb3a0a01eae93c84 (patch) | |
| tree | 34c93ec8a80e282f3ce3e47dd60c41e46de0f8b3 /src/database/records.cpp | |
| parent | a750af35aa6afda40aadca8f7cf8db75f41a43b2 (diff) | |
| parent | 0d0c4b2307cac8436fea7276956f293262b265ed (diff) | |
| download | tangara-fw-e20ebe7574db5aedc73f07b7bb3a0a01eae93c84.tar.gz | |
Merge branch 'main' into lua-volume
Diffstat (limited to 'src/database/records.cpp')
| -rw-r--r-- | src/database/records.cpp | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/database/records.cpp b/src/database/records.cpp index af81dc5c..a1efb568 100644 --- a/src/database/records.cpp +++ b/src/database/records.cpp @@ -47,15 +47,30 @@ namespace database { [[maybe_unused]] static const char* kTag = "RECORDS"; +static const char kPathPrefix = 'P'; static const char kDataPrefix = 'D'; static const char kHashPrefix = 'H'; -[[maybe_unused]] static const char kTagHashPrefix = 'T'; +static const char kTagHashPrefix = 'T'; static const char kIndexPrefix = 'I'; static const char kFieldSeparator = '\0'; +static constexpr auto makePrefix(char p) -> std::string { + std::string str; + str += p; + str += kFieldSeparator; + return str; +} + +auto EncodePathKey(std::string_view path) -> std::string { + std::stringstream out{}; + out << makePrefix(kPathPrefix); + out << path; + return out.str(); +} + /* 'D/' */ auto EncodeDataPrefix() -> std::string { - return {kDataPrefix, kFieldSeparator}; + return makePrefix(kDataPrefix); } /* 'D/ 0xACAB' */ @@ -116,8 +131,7 @@ auto ParseDataValue(const leveldb::Slice& slice) -> std::shared_ptr<TrackData> { /* 'H/ 0xBEEF' */ auto EncodeHashKey(const uint64_t& hash) -> std::string { - return std::string{kHashPrefix, kFieldSeparator} + - cppbor::Uint{hash}.toString(); + return makePrefix(kHashPrefix) + cppbor::Uint{hash}.toString(); } auto ParseHashValue(const leveldb::Slice& slice) -> std::optional<TrackId> { @@ -130,18 +144,17 @@ auto EncodeHashValue(TrackId id) -> std::string { /* 'T/ 0xBEEF' */ auto EncodeTagHashKey(const uint64_t& hash) -> std::string { - return std::string{kTagHashPrefix, kFieldSeparator} + - cppbor::Uint{hash}.toString(); + return makePrefix(kTagHashPrefix) + cppbor::Uint{hash}.toString(); } /* 'I/' */ auto EncodeAllIndexesPrefix() -> std::string { - return {kIndexPrefix, kFieldSeparator}; + return makePrefix(kIndexPrefix); } auto EncodeIndexPrefix(const IndexKey::Header& header) -> std::string { std::ostringstream out; - out.put(kIndexPrefix).put(kFieldSeparator); + out << makePrefix(kIndexPrefix); cppbor::Array val{ cppbor::Uint{header.id}, cppbor::Uint{header.depth}, |
