diff options
author | Stijn Buys <ingar@osirion.org> | 2008-02-17 18:59:52 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-02-17 18:59:52 +0000 |
commit | 982562fa19bb87a3dab352e562f386f61c171b7b (patch) | |
tree | aeade8d5b7d3c68f5c222af1d8ecc6a734e1b43f /src/core/func.cc | |
parent | d198b7b8d9ff713d891f35ab173d1f428f610e7d (diff) |
major rewrite of Cvar, Func and Entity
Diffstat (limited to 'src/core/func.cc')
-rw-r--r-- | src/core/func.cc | 111 |
1 files changed, 68 insertions, 43 deletions
diff --git a/src/core/func.cc b/src/core/func.cc index 06aa5b6..0215ddf 100644 --- a/src/core/func.cc +++ b/src/core/func.cc @@ -4,100 +4,125 @@ the terms of the GNU General Public License version 2 */ -#include "core/func.h" #include <map> #include <string> +#include <iomanip> -namespace core -{ - -Func_t::Func_t(unsigned int funcflags) -{ - func_flags = funcflags; -} +#include "sys/sys.h" +#include "core/func.h" -unsigned int Func_t::flags() +namespace core { - return func_flags; -} -namespace func -{ +/* ---- Static functions for the Func registry -------------------- */ -std::map<std::string, Func> registry; +std::map<std::string, Func*> Func::registry; -void add(const char * functionname, FuncPtr functionptr, unsigned int flags) +void Func::add(const char *name, FuncPtr functionptr, unsigned int flags) { - std::map<std::string, Func>::iterator it = registry.find(functionname); + std::map<std::string, Func*>::iterator it = registry.find(name); if (it == registry.end()) { - // function does not yet exist in the registry - Func f = new Func_t(flags); - //f->name = functionname; - f->ptr = (void *)functionptr; - registry[std::string(functionname)] = f; + registry[std::string(name)] = new Func(name, (void *)functionptr, flags & ~Func::Game); } else { - con_warn << "Function '" << functionname << "' already registered!" << std::endl; + con_warn << "Function '" << name << "' already registered!" << std::endl; } } -void add(const char * functionname, GameFuncPtr gamefunctionptr, unsigned int flags) +void Func::add(const char *name, GameFuncPtr gamefunctionptr, unsigned int flags) { - std::map<std::string, Func>::iterator it = registry.find(functionname); + std::map<std::string, Func*>::iterator it = registry.find(name); if (it == registry.end()) { - // function does not yet exist in the registry - Func f = new Func_t(flags & func::Game); - //f->name = functionname; - f->ptr = (void *)gamefunctionptr; - registry[std::string(functionname)] = f; + registry[std::string(name)] = new Func(name, (void *)gamefunctionptr, flags | Func::Game); + con_debug << "Function '" << name << "' registered." << std::endl; } else { - con_warn << "Function '" << functionname << "' already registered!" << std::endl; + con_warn << "Function '" << name << "' already registered!" << std::endl; } } -void remove(const char *functionname) +void Func::remove(const char *name) { - std::map<std::string, Func>::iterator it = registry.find(functionname); + std::map<std::string, Func *>::iterator it = registry.find(std::string(name)); if (it != registry.end()) { delete (*it).second; - registry.erase(std::string(functionname)); + registry.erase(it); + con_debug << "Function '" << name << "' unregistered." << std::endl; } } -void remove(const std::string &functionname) +void Func::remove(const std::string &name) { - std::map<std::string, Func>::iterator it = registry.find(functionname); + std::map<std::string, Func *>::iterator it = registry.find(name); if (it != registry.end()) { delete (*it).second; - registry.erase(std::string(functionname)); + registry.erase(it); + con_debug << "Function '" << name << "' unregistered." << std::endl; } } -Func find(const std::string &functionname) +Func *Func::find(const std::string &name) { - std::map<std::string, Func>::iterator it = registry.find(functionname); + std::map<std::string, Func *>::iterator it = registry.find(name); if (it == registry.end()) return 0; else return (*it).second; } -void list() +void Func::list() { - std::map<std::string, Func>::iterator it; + std::map<std::string, Func*>::iterator it; for (it = registry.begin(); it != registry.end(); it++) { std::string typeindicator; - if ((*it).second->flags() & func::Game) + if (((*it).second->flags() & Game) == Game) typeindicator += 'G'; else typeindicator += ' '; - con_print << " " << typeindicator << " " << (*it).first << std::endl; + con_print << std::setw(4) << (*it).second->flags() << " " << typeindicator << + " " << (*it).second->name() << std::endl; } con_print << registry.size() << " registered functions" << std::endl; } -} // namespace func +/* ---- Func ------------------------------------------------------ */ + +Func::Func(char const * funcname, void *ptr, unsigned int funcflags) +{ + if (funcname) + func_name.assign(funcname); + else + func_name.clear(); + + func_flags = funcflags; + func_ptr = ptr; +} + +Func::~Func() +{ + func_name.clear(); + func_ptr = 0; + func_flags = 0; +} + + +void Func::exec(std::string const &args) +{ + if ((flags() & Game)) + return; + + FuncPtr function = (FuncPtr) func_ptr; + function(args); +} + +void Func::exec(Player *player, std::string const &args) +{ + if (!(flags() & Game)) + return; + + GameFuncPtr gamefunction = (GameFuncPtr) func_ptr; + gamefunction(player, args); +} } // namespace core |