summaryrefslogtreecommitdiff
path: root/src/database/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-11-21 16:20:01 +1100
committerjacqueline <me@jacqueline.id.au>2023-11-21 16:20:21 +1100
commitcd46d7bd203b69e6d163fd19e38600d9feae6e56 (patch)
tree0e10f7fbc07ab80a58964f52a229c91cbc706833 /src/database/include
parent5afdb89f9ac63f4892257a4eaf1c65a3b49f3284 (diff)
downloadtangara-fw-cd46d7bd203b69e6d163fd19e38600d9feae6e56.tar.gz
Make lua db iterators async
Diffstat (limited to 'src/database/include')
-rw-r--r--src/database/include/database.hpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/database/include/database.hpp b/src/database/include/database.hpp
index 972871db..63014bed 100644
--- a/src/database/include/database.hpp
+++ b/src/database/include/database.hpp
@@ -129,6 +129,8 @@ class Database {
Database& operator=(const Database&) = delete;
private:
+ friend class Iterator;
+
// Owned. Dumb pointers because destruction needs to be done in an explicit
// order.
leveldb::DB* db_;
@@ -191,13 +193,19 @@ class Iterator {
Iterator(std::weak_ptr<Database>, const IndexInfo&);
Iterator(std::weak_ptr<Database>, const Continuation&);
- auto Prev() -> std::optional<IndexRecord>;
- auto Next() -> std::optional<IndexRecord>;
+ using Callback = std::function<void(std::optional<IndexRecord>)>;
+
+ auto Next(Callback) -> void;
+ auto Prev(Callback) -> void;
private:
+ auto InvokeNull(Callback) -> void;
+
std::weak_ptr<Database> db_;
- std::optional<Continuation> prev_pos_;
+
+ std::mutex pos_mutex_;
std::optional<Continuation> current_pos_;
+ std::optional<Continuation> prev_pos_;
};
} // namespace database