mirror of
https://github.com/3lswear/webserv.git
synced 2025-10-29 05:17:59 +03:00
intermediate changes
This commit is contained in:
@@ -26,7 +26,7 @@ class toml_node;
|
|||||||
/* typedef std::vector<TOMLMap *> TOMLArray; */
|
/* typedef std::vector<TOMLMap *> TOMLArray; */
|
||||||
/* typedef std::vector<TOMLArray *> TOMLArrayOfMap; */
|
/* typedef std::vector<TOMLArray *> TOMLArrayOfMap; */
|
||||||
typedef std::map<std::string, toml_node *> TOMLMap; // = JSONObject
|
typedef std::map<std::string, toml_node *> TOMLMap; // = JSONObject
|
||||||
typedef std::vector<TOMLMap *> TOMLMapArray;
|
typedef std::pair<std::string, std::vector<TOMLMap *> *> TOMLMapArray;
|
||||||
typedef std::vector<toml_node *> TOMLArray;
|
typedef std::vector<toml_node *> TOMLArray;
|
||||||
|
|
||||||
void display(TOMLMap *config);
|
void display(TOMLMap *config);
|
||||||
|
|||||||
@@ -16,10 +16,6 @@
|
|||||||
|
|
||||||
class toml_node
|
class toml_node
|
||||||
{
|
{
|
||||||
enum e_type
|
|
||||||
{
|
|
||||||
STRING, NUM, BOOL, ARRAY, MAP, MAPARRAY, NIL
|
|
||||||
} type;
|
|
||||||
|
|
||||||
union u_value
|
union u_value
|
||||||
{
|
{
|
||||||
@@ -35,6 +31,11 @@ class toml_node
|
|||||||
} value;
|
} value;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
enum e_type
|
||||||
|
{
|
||||||
|
STRING, NUM, BOOL, ARRAY, MAP, MAPARRAY, NIL
|
||||||
|
} type;
|
||||||
|
|
||||||
enum e_type get_type(void)
|
enum e_type get_type(void)
|
||||||
{
|
{
|
||||||
@@ -45,6 +46,12 @@ class toml_node
|
|||||||
{
|
{
|
||||||
return (value.map);
|
return (value.map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TOMLMapArray *getMapArray(void)
|
||||||
|
{
|
||||||
|
return (value.map_array);
|
||||||
|
}
|
||||||
|
|
||||||
void setString(std::string *str)
|
void setString(std::string *str)
|
||||||
{
|
{
|
||||||
value.str = str;
|
value.str = str;
|
||||||
|
|||||||
@@ -101,10 +101,10 @@ namespace config
|
|||||||
std::cerr << "Parsing MapArray" << std::endl;
|
std::cerr << "Parsing MapArray" << std::endl;
|
||||||
toml_node *node = new toml_node;
|
toml_node *node = new toml_node;
|
||||||
TOMLMapArray *servers = new TOMLMapArray;
|
TOMLMapArray *servers = new TOMLMapArray;
|
||||||
|
s_token current;
|
||||||
|
|
||||||
while (tokenizer.hasMoreTokens())
|
while (tokenizer.hasMoreTokens())
|
||||||
{
|
{
|
||||||
s_token current;
|
|
||||||
try { current = tokenizer.getToken(); }
|
try { current = tokenizer.getToken(); }
|
||||||
catch (std::logic_error e)
|
catch (std::logic_error e)
|
||||||
{
|
{
|
||||||
@@ -112,9 +112,21 @@ namespace config
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (current.type == MAPARRAY_DECL)
|
if (current.type == MAPARRAY_DECL)
|
||||||
servers->push_back(parseMap()->getMap());
|
{
|
||||||
|
if (tokenizer.getToken().type != NEWLINE)
|
||||||
|
throw std::logic_error("no newline after map_array declaration");
|
||||||
|
servers->second->push_back(parseMap()->getMap());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
throw std::logic_error("unexpected token in parseMapArray");
|
throw std::logic_error("unexpected token in parseMapArray");
|
||||||
|
if (tokenizer.hasMoreTokens())
|
||||||
|
current = tokenizer.getToken();
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
if (current.type != NEWLINE)
|
||||||
|
{
|
||||||
|
throw std::logic_error("EXPECTED newline");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
node->setMapArray(servers);
|
node->setMapArray(servers);
|
||||||
return (node);
|
return (node);
|
||||||
@@ -245,72 +257,73 @@ namespace config
|
|||||||
std::string key;
|
std::string key;
|
||||||
key = "";
|
key = "";
|
||||||
|
|
||||||
root = parseMap();
|
/* root = parseMap(); */
|
||||||
|
root = parseMapArray();
|
||||||
return (root);
|
return (root);
|
||||||
|
|
||||||
while (tokenizer.hasMoreTokens())
|
/* while (tokenizer.hasMoreTokens()) */
|
||||||
{
|
/* { */
|
||||||
s_token token;
|
/* s_token token; */
|
||||||
try
|
/* try */
|
||||||
{
|
/* { */
|
||||||
token = tokenizer.getToken();
|
/* token = tokenizer.getToken(); */
|
||||||
/* std::cout << token.to_string() << std::endl; */
|
/* /1* std::cout << token.to_string() << std::endl; *1/ */
|
||||||
switch (token.type)
|
/* switch (token.type) */
|
||||||
{
|
/* { */
|
||||||
case KEY:
|
/* case KEY: */
|
||||||
{
|
/* { */
|
||||||
toml_node *parsedObject = parseString();
|
/* toml_node *parsedObject = parseString(); */
|
||||||
if (!root)
|
/* if (!root) */
|
||||||
root = parsedObject;
|
/* root = parsedObject; */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
case ARR_OPEN:
|
/* case ARR_OPEN: */
|
||||||
{
|
/* { */
|
||||||
toml_node *parsedObject = parseMap();
|
/* toml_node *parsedObject = parseMap(); */
|
||||||
/* parsedObject->printNode(0); */
|
/* /1* parsedObject->printNode(0); *1/ */
|
||||||
if (!root)
|
/* if (!root) */
|
||||||
root = parsedObject;
|
/* root = parsedObject; */
|
||||||
}
|
/* } */
|
||||||
break;
|
/* break; */
|
||||||
case NUMBER:
|
/* case NUMBER: */
|
||||||
{
|
/* { */
|
||||||
tokenizer.rollBackToken();
|
/* tokenizer.rollBackToken(); */
|
||||||
toml_node *parsedNumber = parseNumber();
|
/* toml_node *parsedNumber = parseNumber(); */
|
||||||
if (!root)
|
/* if (!root) */
|
||||||
root = parsedNumber;
|
/* root = parsedNumber; */
|
||||||
}
|
/* } */
|
||||||
break;
|
/* break; */
|
||||||
case STRING:
|
/* case STRING: */
|
||||||
{
|
/* { */
|
||||||
tokenizer.rollBackToken();
|
/* tokenizer.rollBackToken(); */
|
||||||
toml_node *parsedString = parseString();
|
/* toml_node *parsedString = parseString(); */
|
||||||
if (!root)
|
/* if (!root) */
|
||||||
root = parsedString;
|
/* root = parsedString; */
|
||||||
}
|
/* } */
|
||||||
break;
|
/* break; */
|
||||||
case BOOL:
|
/* case BOOL: */
|
||||||
{
|
/* { */
|
||||||
tokenizer.rollBackToken();
|
/* tokenizer.rollBackToken(); */
|
||||||
toml_node *parsedBool = parseBool();
|
/* toml_node *parsedBool = parseBool(); */
|
||||||
if (!root)
|
/* if (!root) */
|
||||||
root = parsedBool;
|
/* root = parsedBool; */
|
||||||
}
|
/* } */
|
||||||
break;
|
/* break; */
|
||||||
case MAPARRAY_DECL:
|
/* case MAPARRAY_DECL: */
|
||||||
{
|
/* { */
|
||||||
|
|
||||||
}
|
/* } */
|
||||||
default:
|
/* default: */
|
||||||
{
|
/* { */
|
||||||
throw std::logic_error("JOPA :(");
|
/* throw std::logic_error("JOPA :("); */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
catch (std::logic_error err)
|
/* catch (std::logic_error err) */
|
||||||
{
|
/* { */
|
||||||
break;
|
/* break; */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
return (root);
|
return (root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,14 @@ namespace config
|
|||||||
/* std::string to_string(void); */
|
/* std::string to_string(void); */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool isspace(char c)
|
||||||
|
{
|
||||||
|
if (c == ' ' || c == '\t')
|
||||||
|
return (true);
|
||||||
|
else
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
bool istomlkey(char c)
|
bool istomlkey(char c)
|
||||||
{
|
{
|
||||||
if (isalnum(c) || c == '-' || c == '_')
|
if (isalnum(c) || c == '-' || c == '_')
|
||||||
@@ -75,7 +83,7 @@ namespace config
|
|||||||
char Tokenizer::getWithoutWhiteSpace(void)
|
char Tokenizer::getWithoutWhiteSpace(void)
|
||||||
{
|
{
|
||||||
char c = ' ';
|
char c = ' ';
|
||||||
while (c == ' ')
|
while (config::isspace(c))
|
||||||
{
|
{
|
||||||
file.get(c);
|
file.get(c);
|
||||||
if ((c == ' ') && !file.good())
|
if ((c == ' ') && !file.good())
|
||||||
|
|||||||
@@ -23,19 +23,27 @@
|
|||||||
/* } */
|
/* } */
|
||||||
namespace config
|
namespace config
|
||||||
{
|
{
|
||||||
void display(TOMLMap *config)
|
void display(toml_node *config)
|
||||||
{
|
{
|
||||||
std::cout << ">>> printing config: <<<" << std::endl;
|
std::cout << ">>> printing config: <<<" << std::endl;
|
||||||
|
if (config->get_type() != toml_node::MAPARRAY)
|
||||||
|
throw std::logic_error("Attempting to display not map_array");
|
||||||
|
|
||||||
|
TOMLMapArray *root_map_array = config->getMapArray();
|
||||||
|
TOMLMapArray::iterator root_it;
|
||||||
TOMLMap::iterator it;
|
TOMLMap::iterator it;
|
||||||
for (it = config->begin(); it != config->end(); ++it)
|
|
||||||
{
|
|
||||||
std::cout << it->first
|
|
||||||
<< ": "
|
|
||||||
<< *(it->second->toString())
|
|
||||||
<< std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
for (root_it = root_map_array->begin(); root_it != root_map_array->end(); ++root_it)
|
||||||
|
{
|
||||||
|
for (it = (*root_it)->begin(); it != (*root_it)->end(); ++it)
|
||||||
|
{
|
||||||
|
std::cout << it->first
|
||||||
|
<< ": "
|
||||||
|
<< *(it->second->toString())
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
std::cout << "-------" << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,5 +52,5 @@ void parse(void)
|
|||||||
std::string filename = "config/simple.toml";
|
std::string filename = "config/simple.toml";
|
||||||
config::TOMLParser parser(filename);
|
config::TOMLParser parser(filename);
|
||||||
toml_node *root = parser.parse();
|
toml_node *root = parser.parse();
|
||||||
config::display(root->getMap());
|
config::display(root);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user