diff options
Diffstat (limited to 'src/core/cvar.cc')
-rw-r--r-- | src/core/cvar.cc | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/core/cvar.cc b/src/core/cvar.cc new file mode 100644 index 0000000..ef3f06c --- /dev/null +++ b/src/core/cvar.cc @@ -0,0 +1,92 @@ +/* + core/cvar.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "cvar.h" +#include <map> + +namespace core { + +Cvar_t::Cvar_t(const char *cvarname, unsigned int cvarflags) +{ + cvar_name.assign(cvarname); + cvar_flags = cvarflags; +} + +Cvar_t::Cvar_t(const std::string &cvarname, unsigned int cvarflags) +{ + cvar_name = cvarname; + cvar_flags = cvarflags; +} + +Cvar_t & Cvar_t::operator=(const std::string &cvarvalue) +{ + cvar_value = cvarvalue; + return (*this); +} + +Cvar_t & Cvar_t::operator=(const char *cvarvalue) +{ + cvar_value.assign(cvarvalue); + return (*this); +} + +Cvar_t & Cvar_t::operator=(int cvarvalue) +{ + std::stringstream s; + s << cvarvalue; + s >> cvar_value; + return (*this); +} + +namespace cvar +{ + +std::map<std::string, Cvar> registry; + +Cvar set(const char *cvarname, const char *value) +{ + Cvar c = registry[std::string(cvarname)]; + if (!c) { + // not found, create a new variable and assign value + c = new Cvar_t(cvarname); + registry[std::string(cvarname)] = c; + (*c) = value; + } + return c; +} + +void unset(const char *cvarname) +{ + Cvar c = registry[std::string(cvarname)]; + if (c) { + registry.erase(std::string(cvarname)); + delete c; + } +} + +void unset(const std::string &cvarname) +{ + Cvar c = registry[cvarname]; + if (c) { + registry.erase(cvarname); + delete c; + } +} + +Cvar find(const std::string &cvarname) +{ + return registry[cvarname]; +} + +Cvar find(const char *cvarname) +{ + return registry[std::string(cvarname)]; +} + +} // namespace cvar + +} // namespace core + |