summaryrefslogtreecommitdiff
path: root/src/database/records.cpp
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-04-02 11:13:50 +1100
committerailurux <ailuruxx@gmail.com>2024-04-02 11:13:50 +1100
commite20ebe7574db5aedc73f07b7bb3a0a01eae93c84 (patch)
tree34c93ec8a80e282f3ce3e47dd60c41e46de0f8b3 /src/database/records.cpp
parenta750af35aa6afda40aadca8f7cf8db75f41a43b2 (diff)
parent0d0c4b2307cac8436fea7276956f293262b265ed (diff)
downloadtangara-fw-e20ebe7574db5aedc73f07b7bb3a0a01eae93c84.tar.gz
Merge branch 'main' into lua-volume
Diffstat (limited to 'src/database/records.cpp')
-rw-r--r--src/database/records.cpp29
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},