tmp improvements

This commit is contained in:
3lswear
2022-02-15 07:33:57 +03:00
parent eaaa126e97
commit f719502237
3 changed files with 37 additions and 26 deletions

View File

@@ -37,6 +37,7 @@ void Server::print_epoll_events(unsigned int events)
void Server::readConfig(char *filename) void Server::readConfig(char *filename)
{ {
TOMLMap *root = NULL; TOMLMap *root = NULL;
// root = parse(filename);
try try
{ {
root = parse(filename); root = parse(filename);
@@ -49,7 +50,7 @@ void Server::readConfig(char *filename)
// root->clear(); // root->clear();
// delete root; // delete root;
// clean_parsed(root); // clean_parsed(root);
return; exit(-1);
} }
catch (config::Tokenizer::InvalidToken &e) catch (config::Tokenizer::InvalidToken &e)
{ {
@@ -58,7 +59,7 @@ void Server::readConfig(char *filename)
// clean_parsed(root); // clean_parsed(root);
// root->clear(); // root->clear();
delete root; delete root;
return; exit(-1);
} }
/* TOMLMap *map; */ /* TOMLMap *map; */
@@ -430,9 +431,9 @@ void Server::clean_parsed(TOMLMap *root)
DBOUT << ">>> cleaning up: <<<" << std::endl; DBOUT << ">>> cleaning up: <<<" << std::endl;
for (it = root->begin(); it != root->end(); ++it) for (it = root->begin(); it != root->end(); ++it)
{ {
DBOUT << RED << it->first // DBOUT << RED << it->first
<< ": " << GREEN // << ": " << GREEN
<< *(it->second->toString()); // << *(it->second->toString());
clean_generic(it->second); clean_generic(it->second);
/* delete it->second; */ /* delete it->second; */

View File

@@ -37,7 +37,7 @@ namespace config
try { current = tokenizer.getToken(); } try { current = tokenizer.getToken(); }
catch (Tokenizer::NoMoreTokens &e) catch (Tokenizer::NoMoreTokens &e)
{ {
std::cerr << e.what() << std::endl; DBOUT << "got no more tokens" << ENDL;
return; return;
} }
if (current.type == MAP_DECL) if (current.type == MAP_DECL)
@@ -45,7 +45,7 @@ namespace config
if (tokenizer.getToken().type != NEWLINE) if (tokenizer.getToken().type != NEWLINE)
throw ExpectedToken("newline", current.value); throw ExpectedToken("newline", current.value);
// throw std::logic_error("no newline after MAP_DECL"); // throw std::logic_error("no newline after MAP_DECL");
map_node = parseMap(); map_node = parseMap().release();
} }
else else
// throw std::logic_error("unexpected token in processMap"); // throw std::logic_error("unexpected token in processMap");
@@ -57,15 +57,14 @@ namespace config
full_name = split_name(current.value); full_name = split_name(current.value);
put_to_subtable(root, full_name, map_node, toml_node::MAP); put_to_subtable(root.get(), full_name, map_node, toml_node::MAP);
} }
toml_node *TOMLParser::parseMap(void) std::auto_ptr<toml_node> TOMLParser::parseMap(void)
{ {
/* std::cerr << "Parsing map" << std::endl; */ /* std::cerr << "Parsing map" << std::endl; */
toml_node *node = new toml_node; std::auto_ptr<TOMLMap> mapObject(new TOMLMap);
TOMLMap *mapObject = new TOMLMap;
bool completed = false; bool completed = false;
while (!completed) while (!completed)
{ {
@@ -75,7 +74,7 @@ namespace config
try { nextToken = tokenizer.getToken(); } try { nextToken = tokenizer.getToken(); }
catch (Tokenizer::NoMoreTokens &e) catch (Tokenizer::NoMoreTokens &e)
{ {
std::cerr << e.what() << std::endl; DBOUT << "got no more tokens" << ENDL;
break; break;
} }
if (nextToken.type == MAPARRAY_DECL) if (nextToken.type == MAPARRAY_DECL)
@@ -153,7 +152,10 @@ namespace config
// throw std::logic_error("parseMap: no more tokens"); // throw std::logic_error("parseMap: no more tokens");
// } // }
} }
node->setObject(mapObject);
// toml_node *node = new toml_node;
std::auto_ptr<toml_node> node(new toml_node);
node->setObject(mapObject.release());
return (node); return (node);
} }
@@ -161,13 +163,14 @@ namespace config
{ {
/* std::cerr << "Parsing MapArray" << std::endl; */ /* std::cerr << "Parsing MapArray" << std::endl; */
toml_node *map_node; // toml_node *map_node;
std::auto_ptr<toml_node> map_node;
s_token current; s_token current;
try { current = tokenizer.getToken(); } try { current = tokenizer.getToken(); }
catch (Tokenizer::NoMoreTokens &e) catch (Tokenizer::NoMoreTokens &e)
{ {
std::cerr << e.what() << std::endl; DBOUT << "got no more tokens" << ENDL;
return; return;
} }
if (current.type == MAPARRAY_DECL) if (current.type == MAPARRAY_DECL)
@@ -185,19 +188,19 @@ namespace config
full_name = split_name(current.value); full_name = split_name(current.value);
put_to_subtable(root, full_name, map_node, toml_node::MAPARRAY); put_to_subtable(root.get(), full_name, map_node.release(), toml_node::MAPARRAY);
} }
toml_node *TOMLParser::parseString(void) toml_node *TOMLParser::parseString(void)
{ {
/* toml_node *node; */
toml_node *node = new toml_node;
std::string *sValue; std::string *sValue;
/* std::cerr << "Parsing string" << std::endl; */ /* std::cerr << "Parsing string" << std::endl; */
s_token token = tokenizer.getToken(); s_token token = tokenizer.getToken();
sValue = new std::string(token.value); sValue = new std::string(token.value);
toml_node *node = new toml_node;
node->setString(sValue); node->setString(sValue);
return (node); return (node);
@@ -205,12 +208,13 @@ namespace config
toml_node *TOMLParser::parseNumber(void) toml_node *TOMLParser::parseNumber(void)
{ {
toml_node *node = new toml_node;
int value; int value;
/* std::cerr << "Parsing number" << std::endl; */ /* std::cerr << "Parsing number" << std::endl; */
s_token token = tokenizer.getToken(); s_token token = tokenizer.getToken();
value = std::atoi(token.value.c_str()); value = std::atoi(token.value.c_str());
toml_node *node = new toml_node;
node->setNumber(value); node->setNumber(value);
return (node); return (node);
@@ -287,7 +291,6 @@ namespace config
toml_node *TOMLParser::parseBool(void) toml_node *TOMLParser::parseBool(void)
{ {
toml_node *node = new toml_node;
bool value; bool value;
/* std::cerr << "Parsing bool" << std::endl; */ /* std::cerr << "Parsing bool" << std::endl; */
@@ -298,6 +301,8 @@ namespace config
value = false; value = false;
else else
throw std::invalid_argument("Unexpected bool value"); throw std::invalid_argument("Unexpected bool value");
toml_node *node = new toml_node;
node->setBool(value); node->setBool(value);
return (node); return (node);
@@ -315,7 +320,9 @@ namespace config
TOMLMap *TOMLParser::parse(void) TOMLMap *TOMLParser::parse(void)
{ {
/* std::cerr << "Parsing ROOT" << std::endl; */ /* std::cerr << "Parsing ROOT" << std::endl; */
root = new TOMLMap; // root = new TOMLMap;
// std::auto_ptr<TOMLMap> root(new TOMLMap);
root.reset(new TOMLMap);
bool completed = false; bool completed = false;
while (!completed) while (!completed)
{ {
@@ -325,7 +332,7 @@ namespace config
try { current = tokenizer.getToken(); } try { current = tokenizer.getToken(); }
catch (Tokenizer::NoMoreTokens &e) catch (Tokenizer::NoMoreTokens &e)
{ {
std::cerr << e.what() << std::endl; DBOUT << "got no more tokens" << ENDL;
break; break;
} }
if (current.type == MAPARRAY_DECL) if (current.type == MAPARRAY_DECL)
@@ -402,7 +409,7 @@ namespace config
break; break;
} }
} }
return (root); return (root.release());
} }
std::vector<std::string> TOMLParser::split_name(std::string name) std::vector<std::string> TOMLParser::split_name(std::string name)

View File

@@ -6,6 +6,7 @@
#include "Tokenizer.hpp" #include "Tokenizer.hpp"
#include "TOMLNode.hpp" #include "TOMLNode.hpp"
#include <string> #include <string>
#include <memory>
namespace config namespace config
{ {
@@ -13,7 +14,8 @@ namespace config
{ {
private: private:
std::fstream file; std::fstream file;
TOMLMap *root; //root of TOML tree std::auto_ptr<TOMLMap> root;
// TOMLMap *root; //root of TOML tree
/* toml_node *current; //node currently being parsed */ /* toml_node *current; //node currently being parsed */
Tokenizer tokenizer; Tokenizer tokenizer;
@@ -26,7 +28,8 @@ namespace config
TOMLParser(char *filename); TOMLParser(char *filename);
TOMLMap *parse(void); TOMLMap *parse(void);
toml_node *parseMap(void); // toml_node *parseMap(void);
std::auto_ptr<toml_node> parseMap(void);
void processMap(void); void processMap(void);
void processMapArray(void); void processMapArray(void);