diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2018-03-30 18:32:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-30 18:32:52 +0200 |
commit | ce873108aa91d19104f46c5acd3350385e7a4541 (patch) | |
tree | 58672a3c803469de71c9ae270beb9a052ba5559a /src/event_manager.h | |
parent | 2c490dddc037d7d1cf211bbf28309e31b0abdadd (diff) | |
download | minetest-ce873108aa91d19104f46c5acd3350385e7a4541.tar.gz minetest-ce873108aa91d19104f46c5acd3350385e7a4541.tar.bz2 minetest-ce873108aa91d19104f46c5acd3350385e7a4541.zip |
Client eventmanager refactor (#7179)
* Drop EventManager from GameDef & do some client cleanups
* EventManager is only used by Client. Don't expose it on Server & GameDef for nothing
* Drop Client::event() in favor of direct calls to getEventManager
* Cleanup some event put from new + put to put(new)
* MtEvent: add Type(u8) enum
* This will enhance event performance & ensure stricter type
* Drop MtEvent::checkIs (unused)
* clang-tidy reported fixes
* Code style
* Move event_manager.h to the client directory as it's only used by client
Add EventManager unittests + switch to unordered_map as order is not important here
Drop a unused function
Diffstat (limited to 'src/event_manager.h')
-rw-r--r-- | src/event_manager.h | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/src/event_manager.h b/src/event_manager.h deleted file mode 100644 index f64d05869..000000000 --- a/src/event_manager.h +++ /dev/null @@ -1,108 +0,0 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program 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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#pragma once - -#include "event.h" -#include <list> -#include <map> - -class EventManager: public MtEventManager -{ - static void receiverReceive(MtEvent *e, void *data) - { - MtEventReceiver *r = (MtEventReceiver*)data; - r->onEvent(e); - } - struct FuncSpec{ - event_receive_func f; - void *d; - FuncSpec(event_receive_func f, void *d): - f(f), d(d) - {} - }; - struct Dest{ - std::list<FuncSpec> funcs; - }; - std::map<std::string, Dest> m_dest; - -public: - ~EventManager() = default; - - void put(MtEvent *e) - { - std::map<std::string, Dest>::iterator i = m_dest.find(e->getType()); - if(i != m_dest.end()){ - std::list<FuncSpec> &funcs = i->second.funcs; - for (FuncSpec &func : funcs) { - (*(func.f))(e, func.d); - } - } - delete e; - } - void reg(const char *type, event_receive_func f, void *data) - { - std::map<std::string, Dest>::iterator i = m_dest.find(type); - if(i != m_dest.end()){ - i->second.funcs.emplace_back(f, data); - } else{ - std::list<FuncSpec> funcs; - Dest dest; - dest.funcs.emplace_back(f, data); - m_dest[type] = dest; - } - } - void dereg(const char *type, event_receive_func f, void *data) - { - if(type != NULL){ - std::map<std::string, Dest>::iterator i = m_dest.find(type); - if(i != m_dest.end()){ - std::list<FuncSpec> &funcs = i->second.funcs; - std::list<FuncSpec>::iterator j = funcs.begin(); - while(j != funcs.end()){ - bool remove = (j->f == f && (!data || j->d == data)); - if(remove) - funcs.erase(j++); - else - ++j; - } - } - } else{ - for (auto &dest : m_dest) { - std::list<FuncSpec> &funcs = dest.second.funcs; - std::list<FuncSpec>::iterator j = funcs.begin(); - while(j != funcs.end()){ - bool remove = (j->f == f && (!data || j->d == data)); - if(remove) - funcs.erase(j++); - else - ++j; - } - } - } - } - void reg(MtEventReceiver *r, const char *type) - { - reg(type, EventManager::receiverReceive, r); - } - void dereg(MtEventReceiver *r, const char *type) - { - dereg(type, EventManager::receiverReceive, r); - } -}; |