jubilant-funicular
CallbackManager.h
1 #ifndef CALLBACKMANAGER_H_INCLUDED
2 #define CALLBACKMANAGER_H_INCLUDED
3 
4 #include <map>
5 
6 #include "nta/ThreadPool.h"
7 
8 namespace nta {
13  private:
15  struct event {
17  uint64_t id;
19  uint64_t when;
21  uint64_t period;
23  Thunk thunk;
24  };
25 
28  static void dispatch();
30  static void dequeue(uint64_t id);
31 
33  static std::map<uint64_t, event> m_active;
35  static std::map<uint64_t, std::vector<event*>> m_queue;
36 
40  static std::thread m_dispatcher;
42  static std::atomic<uint64_t> m_next;
43  // It's been a while since I've written parallel code, but am I overusing this?
44  static std::mutex m_mutex;
45  static std::condition_variable_any m_cv;
47  static bool m_working;
49  static uint64_t m_curr_frame;
50  public:
53  static uint64_t setInterval(const Thunk& thunk, uint64_t when, uint64_t period);
55  static uint64_t setTimeout(const Thunk& thunk, uint64_t when);
57  static bool delay(uint64_t id, uint64_t when, bool absolute = true);
59  static void init();
61  static void clear(uint64_t id);
63  static void increment_frame();
65  static void destroy();
66  };
67 }
68 
69 #endif // CALLBACKMANAGER_H_INCLUDED
nta::CallbackManager::event::when
uint64_t when
How many frames to run it in.
Definition: CallbackManager.h:19
nta::CallbackManager
Definition: CallbackManager.h:12
nta::CallbackManager::event
A function to run at a certain time with some regularity.
Definition: CallbackManager.h:15
nta::CallbackManager::increment_frame
static void increment_frame()
Informs CallbackManager that a frame has passed.
Definition: CallbackManager.cpp:123
nta::CallbackManager::event::id
uint64_t id
id of event
Definition: CallbackManager.h:17
nta::CallbackManager::event::thunk
Thunk thunk
Function to execute.
Definition: CallbackManager.h:23
nta::CallbackManager::setTimeout
static uint64_t setTimeout(const Thunk &thunk, uint64_t when)
Schedules a function to be called once after when frames and then repeatedly after.
Definition: CallbackManager.cpp:33
nta::CallbackManager::m_next
static std::atomic< uint64_t > m_next
id given to the next created event
Definition: CallbackManager.h:42
nta::CallbackManager::m_active
static std::map< uint64_t, event > m_active
The events waiting to happen (key is event.id)
Definition: CallbackManager.h:33
nta::CallbackManager::m_queue
static std::map< uint64_t, std::vector< event * > > m_queue
"Priority queue" of events ordered by when they should occur
Definition: CallbackManager.h:35
nta::CallbackManager::clear
static void clear(uint64_t id)
Removes the event with the given id.
Definition: CallbackManager.cpp:98
nta
Definition: Animation2D.h:6
nta::CallbackManager::event::period
uint64_t period
How many frames between consecutive runs.
Definition: CallbackManager.h:21
nta::CallbackManager::delay
static bool delay(uint64_t id, uint64_t when, bool absolute=true)
Changes when an event is next scheduled to run.
Definition: CallbackManager.cpp:36
nta::CallbackManager::dequeue
static void dequeue(uint64_t id)
Removes event from m_queue but not m_active (assumes id is valid)
Definition: CallbackManager.cpp:85
nta::CallbackManager::m_pool
static utils::ThreadPool m_pool
ThreadPool used for scheduling events to happen.
Definition: CallbackManager.h:38
nta::CallbackManager::init
static void init()
Initializes the CallbackManager.
Definition: CallbackManager.cpp:49
nta::CallbackManager::m_curr_frame
static uint64_t m_curr_frame
The current frame.
Definition: CallbackManager.h:49
nta::utils::ThreadPool
Collection of threads for running scheduled functions.
Definition: ThreadPool.h:36
nta::CallbackManager::m_dispatcher
static std::thread m_dispatcher
Thread used to dispatch events.
Definition: CallbackManager.h:40
nta::CallbackManager::dispatch
static void dispatch()
Definition: CallbackManager.cpp:56
nta::CallbackManager::destroy
static void destroy()
Destroys the CallbackManager.
Definition: CallbackManager.cpp:108
nta::CallbackManager::setInterval
static uint64_t setInterval(const Thunk &thunk, uint64_t when, uint64_t period)
Definition: CallbackManager.cpp:15
nta::CallbackManager::m_working
static bool m_working
Global flag saying whether or not the CallbackManager has been destroyed.
Definition: CallbackManager.h:47