From 782e8dc8c25402171fc4724075b998eae4fa2c76 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 18 Oct 2023 14:35:28 +1100 Subject: Add better controls for queue manipulation --- src/playlist/include/source.hpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/playlist/include') diff --git a/src/playlist/include/source.hpp b/src/playlist/include/source.hpp index 069c1e93..aa15e7df 100644 --- a/src/playlist/include/source.hpp +++ b/src/playlist/include/source.hpp @@ -73,6 +73,11 @@ class IResetableSource : public ISource { virtual auto Reset() -> void = 0; }; +auto CreateSourceFromResults( + std::weak_ptr, + std::shared_ptr>) + -> std::shared_ptr; + class IndexRecordSource : public IResetableSource { public: IndexRecordSource(std::weak_ptr db, @@ -102,4 +107,32 @@ class IndexRecordSource : public IResetableSource { ssize_t current_item_; }; +class NestedSource : public IResetableSource { + public: + NestedSource(std::weak_ptr db, + std::shared_ptr>); + + auto Current() -> std::optional override; + auto Advance() -> std::optional override; + auto Peek(std::size_t n, std::vector*) + -> std::size_t override; + + auto Previous() -> std::optional override; + auto Reset() -> void override; + + private: + auto CreateChild(std::shared_ptr page) + -> std::shared_ptr; + + std::weak_ptr db_; + + std::shared_ptr> initial_page_; + ssize_t initial_item_; + + std::shared_ptr> current_page_; + ssize_t current_item_; + + std::shared_ptr current_child_; +}; + } // namespace playlist -- cgit v1.2.3