Furrent
queue.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <optional>
14 #include <policy/policy.hpp>
15 #include <util/result.hpp>
16 
17 namespace fur::policy {
18 
22 template <typename T>
23 class Queue {
25  std::list<T> _items;
26 
27  public:
29  enum class Error {
31  Empty,
34  };
35 
38 
39  // Function used to mutate the internal collection
40  // returns false if the element should be kept, true otherwise
41  using MutateFn = std::function<bool(T&)>;
42 
43  public:
46  void insert(T&& item);
47 
50  template <typename... Args>
51  void emplace(Args&&... args);
52 
55  [[nodiscard]] Result extract(const IPolicy<T>& policy);
56 
58  void mutate(MutateFn mutation);
59 
61  std::list<T>& items();
62 
64  [[nodiscard]] int64_t size() const;
65 };
66 
67 } // namespace fur::policy
68 
69 #include <policy/queue.inl>
fur::policy::Queue
Special queue that allows the extraction of item using custom policies.
Definition: queue.hpp:23
fur::policy::Queue::items
std::list< T > & items()
Definition: queue.inl:27
queue.inl
fur::util::Result
Used to handle errors without using exceptions.
Definition: result.hpp:18
fur::policy::Queue::emplace
void emplace(Args &&... args)
Definition: queue.inl:18
policy.hpp
Policies are used to prioritize execution of tasks.
fur::policy::Queue< fur::PieceTask >::Error
Error
All possible error that can occur.
Definition: queue.hpp:29
fur::policy::Queue< fur::PieceTask >::MutateFn
std::function< bool(fur::PieceTask &)> MutateFn
Definition: queue.hpp:41
fur::policy::Queue::extract
Result extract(const IPolicy< T > &policy)
Definition: queue.inl:32
fur::policy::Queue::Error::Empty
@ Empty
There are no more elements.
fur::policy::Queue::Error::PolicyFailure
@ PolicyFailure
Policy returned no element.
fur::policy
Definition: policy.hpp:16
fur::policy::Queue::mutate
void mutate(MutateFn mutation)
Mutate the internal list of items.
Definition: queue.inl:45
fur::policy::IPolicy
Definition: policy.hpp:19
result.hpp
fur::policy::Queue::size
int64_t size() const
Definition: queue.inl:57
fur::policy::Queue::insert
void insert(T &&item)
Definition: queue.inl:8