solanaceae_util/solanaceae/util/event_provider.hpp

36 lines
676 B
C++
Raw Normal View History

2023-07-21 22:07:23 +02:00
#pragma once
#include <array>
#include <vector>
2023-07-25 16:21:53 +02:00
#include <cstdint>
2023-07-21 22:07:23 +02:00
template<typename EventI>
struct EventProviderI {
using enumType = typename EventI::enumType;
virtual ~EventProviderI(void) {};
// TODO: unsub
virtual void subscribe(EventI* object, const enumType event_type) {
_subscribers.at(size_t(event_type)).push_back(object);
}
protected:
template<typename T>
bool dispatch(enumType event_type, const T& event) {
for (auto* zei : _subscribers.at(size_t(event_type))) {
if (zei->onEvent(event)) {
return true;
}
}
return false;
}
protected:
std::array<
std::vector<EventI*>,
size_t(enumType::MAX)
> _subscribers;
};