diff options
Diffstat (limited to 'src/playlist/include/source.hpp')
| -rw-r--r-- | src/playlist/include/source.hpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/playlist/include/source.hpp b/src/playlist/include/source.hpp index aa15e7df..ce12faf3 100644 --- a/src/playlist/include/source.hpp +++ b/src/playlist/include/source.hpp @@ -9,6 +9,7 @@ #include <deque> #include <memory> #include <mutex> +#include <stack> #include <variant> #include <vector> @@ -73,6 +74,24 @@ class IResetableSource : public ISource { virtual auto Reset() -> void = 0; }; +class IteratorSource : public IResetableSource { + public: + IteratorSource(const database::Iterator&); + + auto Current() -> std::optional<database::TrackId> override; + auto Advance() -> std::optional<database::TrackId> override; + auto Peek(std::size_t n, std::vector<database::TrackId>*) + -> std::size_t override; + + auto Previous() -> std::optional<database::TrackId> override; + auto Reset() -> void override; + + private: + const database::Iterator& start_; + std::optional<database::TrackId> current_; + std::stack<database::Iterator, std::vector<database::Iterator>> next_; +}; + auto CreateSourceFromResults( std::weak_ptr<database::Database>, std::shared_ptr<database::Result<database::IndexRecord>>) |
