Oled implementation (#1)

This commit is contained in:
2026-02-07 15:05:45 -05:00
committed by GitHub
parent 048e39016a
commit 33c3ebad53
46 changed files with 1790 additions and 1260 deletions

View File

@@ -7,44 +7,41 @@
class Event;
class CallbackHandle {
public:
CallbackHandle(Event *evt, int id) : evt(evt), id(id) {
}
~CallbackHandle();
public:
CallbackHandle(Event *evt, int id) : evt(evt), id(id) {}
~CallbackHandle();
private:
Event *evt;
int id;
private:
Event *evt;
int id;
};
class Event {
public:
using Callback = std::function<void()>;
public:
using Callback = std::function<void()>;
CallbackHandle addListener(Callback cb) {
int id = nextId++;
callbacks[id] = std::move(cb);
return CallbackHandle(this, id);
}
CallbackHandle addListener(Callback cb) {
int id = nextId++;
callbacks[id] = std::move(cb);
return CallbackHandle(this, id);
}
void remove(int id) {
callbacks.erase(id);
}
void remove(int id) { callbacks.erase(id); }
void fire() {
for (auto &kv : callbacks)
kv.second();
}
void fire() {
for (auto &kv : callbacks)
kv.second();
}
private:
friend class CallbackHandle;
std::unordered_map<int, Callback> callbacks;
int nextId = 0;
private:
friend class CallbackHandle;
std::unordered_map<int, Callback> callbacks;
int nextId = 0;
};
CallbackHandle::~CallbackHandle() {
if (evt)
evt->remove(id);
if (evt)
evt->remove(id);
}
#endif // CONTROL_EVENT_H