Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-17 18:59:52 +0000
committerStijn Buys <ingar@osirion.org>2008-02-17 18:59:52 +0000
commit982562fa19bb87a3dab352e562f386f61c171b7b (patch)
treeaeade8d5b7d3c68f5c222af1d8ecc6a734e1b43f /src/core/func.cc
parentd198b7b8d9ff713d891f35ab173d1f428f610e7d (diff)
major rewrite of Cvar, Func and Entity
Diffstat (limited to 'src/core/func.cc')
-rw-r--r--src/core/func.cc111
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