📄 configurator.c
字号:
#include <err.h>#include <str.h>#include <parseopt.h>#include "configurator.h"Configurator::Configurator () : parsed_ (false){}Configurator::~Configurator (){ ConfigPair *c = NULL, *n = NULL; c = conf.first (); while (c) { n = conf.next (c); delete c; c = n; }}Configurator &Configurator::only (){ // store a ptr object so that this will get destructed. static ptr<Configurator> instance = NULL; if (instance == NULL) instance = New refcounted<Configurator> (); return *instance;}boolConfigurator::parse (const char *filename){ bool errors = false; if (parsed_) return false; parseargs pa (filename); int line; vec<str> av; while (pa.getline (&av, &line)) { if ('#' == av[0][0]) continue; if (av.size () < 2) { warn << filename << ":" << line << ": Line too short.\n"; errors = true; continue; } ConfigPair *n = conf.search (av[0]); int vali; bool isint = convertint (av[1], &vali); if (n) { // warn << filename << ":" << line << ": redefines `" << av[0] << "'\n"; if (isint) { n->set_int (vali); } else { n->set_str (av[1]); } } else { if (isint) n = New ConfigPair (av[0], vali); else n = New ConfigPair (av[0], av[1]); conf.insert (n); } } if (errors) fatal ("parse errors in configuration file\n"); return (parsed_ = true);}boolConfigurator::parsed () const{ return parsed_;}boolConfigurator::get_int (const char *field, int &resp) const{ ConfigPair *n = conf.search (field); if (!n || n->type_ != ConfigPair::INT) { warnx << "Configurator::get_int: unknown field " << field << "\n"; return false; } resp = n->vali_; return true;}boolConfigurator::get_str (const char *field, str &resp) const{ ConfigPair *n = conf.search (field); if (!n || n->type_ != ConfigPair::STRING) { warnx << "Configurator::get_str: unknown field " << field << "\n"; return false; } resp = n->vals_; return true;}boolConfigurator::set_str (const char *field, str newv){ ConfigPair *n = conf.search (field); if (n) n->set_str (newv); else { n = New ConfigPair (field, newv); conf.insert (n); } return true;}boolConfigurator::set_int (const char *field, int newv){ ConfigPair *n = conf.search (field); if (n) n->set_int (newv); else { n = New ConfigPair (field, newv); conf.insert (n); } return true;}voidConfigurator::dump (){ ConfigPair *n = conf.first (); warnx << "=== Configurator::dump\n"; while (n) { strbuf x; x << n->var_ << " "; switch (n->type_) { case ConfigPair::INT: x << n->vali_; break; case ConfigPair::STRING: x << "\"" << n->vals_ << "\""; break; default: x << "ERROR"; break; } x << "\n"; warnx << x; n = conf.next (n); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -