#pragma once
#include
#include "List.h"
class InputEventHandler {
struct Subscription {
void *ctx;
size_t id;
void (*callback)(void *ctx, int, InputType);
};
List events;
size_t _id = 0;
public:
InputEventHandler() {
events = List();
}
~InputEventHandler() {
events.deleteData();
events.clear();
}
int subscribe(void *caller, void(*p)(void *, int, InputType)) {
size_t currID=_id;
_id++;
events.push_back(new Subscription{.ctx = caller, .id=currID, .callback=p});
return currID;
}
void unsubscribe(size_t id) {
for(auto item : events){
if (item->id == id) {
events.remove(item);
return;
}
}
}
void Set(int key, InputType type) {
for (auto *evt: events) {
evt->callback(evt->ctx, key, type);
}
}
};