From 4f5422e906b1d17720592d97bc0d5e82a71b1e5f Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 5 Dec 2023 11:36:34 +1100 Subject: Rewrite the track queue to work directly with database iterators --- src/database/include/database.hpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src/database/include') diff --git a/src/database/include/database.hpp b/src/database/include/database.hpp index 36f734b8..263153fb 100644 --- a/src/database/include/database.hpp +++ b/src/database/include/database.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -168,6 +169,8 @@ class Database { template auto dbGetPage(const Continuation& c) -> Result*; + auto dbCount(const Continuation& c) -> size_t; + template auto ParseRecord(const leveldb::Slice& key, const leveldb::Slice& val) -> std::shared_ptr; @@ -193,7 +196,9 @@ class Iterator { public: Iterator(std::weak_ptr, const IndexInfo&); Iterator(std::weak_ptr, const Continuation&); - Iterator(const Iterator &); + Iterator(const Iterator&); + + Iterator& operator=(const Iterator& other); auto database() const { return db_; } @@ -204,8 +209,13 @@ class Iterator { auto Prev(Callback) -> void; + auto PeekSync() -> std::optional; + + auto Size() const -> size_t; private: + friend class TrackIterator; + auto InvokeNull(Callback) -> void; std::weak_ptr db_; @@ -215,4 +225,21 @@ class Iterator { std::optional prev_pos_; }; +class TrackIterator { + public: + TrackIterator(const Iterator&); + TrackIterator(const TrackIterator&); + + TrackIterator& operator=(TrackIterator&& other); + + auto Next() -> std::optional; + auto Size() const -> size_t; + + private: + auto NextLeaf() -> void; + + std::weak_ptr db_; + std::vector levels_; +}; + } // namespace database -- cgit v1.2.3