#define TIZEN_CORE_TIZEN_BASE_EVENT_EVENT_BROKER_H_
#include <functional>
+#include <list>
#include <memory>
#include <unordered_map>
#include <utility>
-#include <vector>
#include <shared-queue.hpp>
}
void PrependHandler(std::shared_ptr<EventHandler<T>> handler) {
- handlers_.insert(handlers_.begin(), std::move(handler));
+ handlers_.push_front(std::move(handler));
}
void RemoveHandler(std::shared_ptr<EventHandler<T>> handler) {
- auto iter = handlers_.begin();
- while (iter != handlers_.end()) {
- if (*iter == handler)
- iter = handlers_.erase(iter);
- else
- iter++;
- }
+ handlers_.remove_if([&](const std::shared_ptr<EventHandler<T>>& event) {
+ return event == handler;
+ });
}
void Process() {
auto iter = handlers_.begin();
while (iter != handlers_.end()) {
- auto& handler = *iter;
+ auto handler = *iter;
iter++;
if (!handler->OnEventReceived(object.get()))
break;
bool Empty() const { return queue_.IsEmpty(); }
private:
- std::vector<std::shared_ptr<EventHandler<T>>> handlers_;
+ std::list<std::shared_ptr<EventHandler<T>>> handlers_;
SharedQueue<std::shared_ptr<EventObject<T>>> queue_;
};