HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
event_queue.hpp
1// Copyright Take Vos 2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "wfree_fifo.hpp"
8#include <concepts>
9
10namespace tt {
11namespace detail {
12
14public:
15 virtual ~event_queue_item_base() = default;
16 virtual void operator()() const noexcept = 0;
17};
18
19template<std::invocable Function>
21public:
22 constexpr event_queue_item(event_queue_item const &) noexcept = default;
23 constexpr event_queue_item(event_queue_item &&) noexcept = default;
24 constexpr event_queue_item &operator=(event_queue_item const &) noexcept = default;
25 constexpr event_queue_item &operator=(event_queue_item &&) noexcept = default;
26
27 constexpr event_queue_item(Function const &function) noexcept : function(function) {}
28 constexpr event_queue_item(Function &&function) noexcept : function(std::move(function)) {}
29
30 virtual void operator()() const noexcept
31 {
32 function();
33 }
34
35private:
36 Function function;
37};
38} // namespace detail
39
41public:
42 void emplace(std::invocable auto &&function) const noexcept
43 {
44 using function_type = std::remove_cvref_t<decltype(function)>;
45
46 return fifo.emplace<detail::event_queue_item<function_type>>(std::forward<decltype(function)>(function));
47 }
48
49 bool take_one(std::invocable<detail::event_queue_item_base const &> auto &&operation) const noexcept
50 {
51 return fifo.take_one(std::forward<decltype(operation)>(operation));
52 }
53
54 void take_all(std::invocable<detail::event_queue_item_base const &> auto &&operation) const noexcept
55 {
56 return fifo.take_all(std::forward<decltype(operation)>(operation));
57 }
58
59private:
61};
62
63} // namespace tt
Definition event_queue.hpp:13
Definition event_queue.hpp:20
Definition event_queue.hpp:40
A wait-free multiple-producer/single-consumer fifo designed for absolute performance.
Definition wfree_fifo.hpp:24
T forward(T... args)
T move(T... args)