2023-06-20 04:33:09 +00:00
|
|
|
#include "StarListener.hpp"
|
|
|
|
|
|
|
|
namespace Star {
|
|
|
|
|
|
|
|
Listener::~Listener() {}
|
|
|
|
|
|
|
|
CallbackListener::CallbackListener(function<void()> callback)
|
2024-02-19 15:55:19 +00:00
|
|
|
: callback(std::move(callback)) {}
|
2023-06-20 04:33:09 +00:00
|
|
|
|
|
|
|
void CallbackListener::trigger() {
|
|
|
|
if (callback)
|
|
|
|
callback();
|
|
|
|
}
|
|
|
|
|
|
|
|
TrackerListener::TrackerListener() : triggered(false) {}
|
|
|
|
|
|
|
|
void ListenerGroup::addListener(ListenerWeakPtr listener) {
|
|
|
|
MutexLocker locker(m_mutex);
|
2024-02-19 15:55:19 +00:00
|
|
|
m_listeners.insert(std::move(listener));
|
2023-06-20 04:33:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ListenerGroup::removeListener(ListenerWeakPtr listener) {
|
|
|
|
MutexLocker locker(m_mutex);
|
2024-02-19 15:55:19 +00:00
|
|
|
m_listeners.erase(std::move(listener));
|
2023-06-20 04:33:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ListenerGroup::clearExpiredListeners() {
|
|
|
|
MutexLocker locker(m_mutex);
|
|
|
|
eraseWhere(m_listeners, mem_fn(&ListenerWeakPtr::expired));
|
|
|
|
};
|
|
|
|
|
|
|
|
void ListenerGroup::clearAllListeners() {
|
|
|
|
MutexLocker locker(m_mutex);
|
|
|
|
m_listeners.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ListenerGroup::trigger() {
|
|
|
|
MutexLocker locker(m_mutex);
|
|
|
|
filter(m_listeners, [](ListenerWeakPtr const& wl) {
|
|
|
|
if (auto lock = wl.lock()) {
|
|
|
|
lock->trigger();
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|