/* Copyright 2011 sss * This file is part of evil_core. * * evil_core is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * evil_core is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with evil_core. If not, see .*/ #include "commonheaders.h" extern std::list event_handlers; extern boost::mutex event_handlers_mutex; const int evt_handler::getType() { return evt_type; } evt_handler::evt_handler(int type) { evt_type = type; } void evt_handler::AddHandler(EVENT_HANDLER add_handler) { handler.connect(add_handler); } void* evt_handler::Execute(void* data) { return handler(data); } bool RegisterEventHandler(int type, EVENT_HANDLER func) { if(!event_handlers.empty()) { event_handlers_mutex.lock(); std::list::iterator end = event_handlers.end(); for(std::list::iterator i = event_handlers.begin(); i != end; ++i) { if((*i)->getType() == type) { (*i)->AddHandler(func); } } } return true; } void* RegisterEventType(int type) { if(!event_handlers.empty()) { event_handlers_mutex.lock(); std::list::iterator end = event_handlers.end(); for(std::list::iterator i = event_handlers.begin(); i != end; ++i) { if((*i)->getType() == type) return (void*)-1; } } event_handlers.push_back(new evt_handler(type)); return 0; } void* ExecuteEvent(int type,void* data) { if(!event_handlers.empty()) { event_handlers_mutex.lock(); std::list::iterator end = event_handlers.end(); for(std::list::iterator i = event_handlers.begin(); i != end; ++i) { if((*i)->getType() == type) return (*i)->Execute(data); } } event_handlers.push_back(new evt_handler(type)); // return (void*)&event_handlers.back()->Execute; TODO: }