#include "Swiften/EventLoop/EventLoop.h" #include #include #include "Swiften/EventLoop/MainEventLoop.h" namespace Swift { EventLoop::EventLoop() : nextEventID_(0) { MainEventLoop::setInstance(this); } EventLoop::~EventLoop() { MainEventLoop::resetInstance(); } void EventLoop::handleEvent(const Event& event) { bool doCallback = false; { boost::lock_guard lock(eventsMutex_); std::list::iterator i = std::find(events_.begin(), events_.end(), event); if (i != events_.end()) { doCallback = true; events_.erase(i); } } if (doCallback) { event.callback(); } } void EventLoop::postEvent(boost::function callback, void* owner) { Event event(owner, callback); { boost::lock_guard lock(eventsMutex_); event.id = nextEventID_; nextEventID_++; events_.push_back(event); } post(event); } void EventLoop::removeEventsFromOwner(void* owner) { boost::lock_guard lock(eventsMutex_); events_.remove_if(HasOwner(owner)); } }