1

use arraylist in eventmanager

This commit is contained in:
2022-07-16 18:24:11 +02:00
parent 5d8316c265
commit f807558781
2 changed files with 6 additions and 8 deletions

View File

@ -2,13 +2,12 @@
#include "kernel/Globals.h" #include "kernel/Globals.h"
void KeyEventManager::subscribe(KeyEventListener& listener) { void KeyEventManager::subscribe(KeyEventListener& listener) {
this->listeners[this->num_subscribed] = &listener; this->listeners.insert(&listener);
this->num_subscribed = this->num_subscribed + 1;
} }
void KeyEventManager::broadcast(char c) { void KeyEventManager::broadcast(char c) {
for (unsigned int i = 0; i < this->num_subscribed; ++i) { for (KeyEventListener* listener : this->listeners) {
this->listeners[i]->trigger(c); // Sets lastChar, do this before wakeup listener->trigger(c);
scheduler.deblock(&this->listeners[i]->thread); scheduler.deblock(&listener->thread);
} }
} }

View File

@ -2,6 +2,7 @@
#define __KeyEventManager_Include_H_ #define __KeyEventManager_Include_H_
#include "user/event/KeyEventListener.h" #include "user/event/KeyEventListener.h"
#include "user/lib/ArrayList.h"
// NOTE: Could do this more generally but we only have key events // NOTE: Could do this more generally but we only have key events
@ -9,9 +10,7 @@ class KeyEventManager {
private: private:
KeyEventManager(const KeyEventManager& copy) = delete; KeyEventManager(const KeyEventManager& copy) = delete;
// TODO: Implement some sort of set structure ArrayList<KeyEventListener*> listeners;
KeyEventListener* listeners[16]; // This is pretty limited but should be enough
unsigned int num_subscribed = 0;
public: public:
KeyEventManager() {} KeyEventManager() {}