feat: move custom exceptions to domain_error

This commit is contained in:
3lswear
2022-02-19 18:44:58 +03:00
parent e9dc59ca98
commit 2beed8da19
3 changed files with 67 additions and 39 deletions

View File

@@ -3,6 +3,7 @@
#include <cassert> #include <cassert>
#include <cstdio> #include <cstdio>
#include <map> #include <map>
// #include "parse.hpp"
#define THREAD_NUM 100 #define THREAD_NUM 100
#define MAX_EVENTS #define MAX_EVENTS
@@ -43,26 +44,26 @@ void Server::readConfig(char *filename)
root = parse(filename); root = parse(filename);
} }
catch (config::Tokenizer::NoMoreTokens &e) catch (std::domain_error &e)
{ {
std::cerr << RED << "FATAL: "; std::cerr << RED << "FATAL: ";
std::cerr << e.what() << RESET << std::endl; std::cerr << e.what() << RESET << std::endl;
// root->clear(); // root->clear();
// delete root;
// clean_parsed(root);
config::clean_parsed(parser.root); config::clean_parsed(parser.root);
// delete parser.root; // delete parser.root;
exit(-1); // exit(-1);
} return;
catch (config::Tokenizer::InvalidToken &e)
{
std::cerr << RED << "FATAL: ";
std::cerr << e.what() << RESET << std::endl;
config::clean_parsed(parser.root);
// root->clear();
delete root;
exit(-1);
} }
// catch (config::Tokenizer::InvalidToken &e)
// {
// std::cerr << RED << "FATAL: ";
// std::cerr << e.what() << RESET << std::endl;
// config::clean_parsed(parser.root);
// // root->clear();
// // delete parser.root;
// exit(-1);
// }
/* TOMLMap *map; */ /* TOMLMap *map; */
TOMLMap::iterator it1; TOMLMap::iterator it1;
@@ -82,6 +83,8 @@ void Server::readConfig(char *filename)
config::clean_parsed(parser.root); config::clean_parsed(parser.root);
} }
void Server::sendData(Client &client, int fd) void Server::sendData(Client &client, int fd)
{ {
/* std::string tmp = client.getStrToSend(); */ /* std::string tmp = client.getStrToSend(); */

View File

@@ -7,6 +7,7 @@
#include "TOMLNode.hpp" #include "TOMLNode.hpp"
#include <string> #include <string>
#include <memory> #include <memory>
#include <stdexcept>
namespace config namespace config
{ {
@@ -14,8 +15,6 @@ namespace config
{ {
private: private:
std::fstream file; std::fstream file;
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,10 +25,12 @@ namespace config
public: public:
TOMLParser(char *filename); TOMLParser(char *filename);
TOMLMap *parse(void); void parse(void);
// toml_node *parseMap(void); TOMLMap *root; //root of TOML tree
std::auto_ptr<toml_node> parseMap(void);
toml_node *parseMap(void);
// TOMLMap *parseMap(void);
void processMap(void); void processMap(void);
void processMapArray(void); void processMapArray(void);
@@ -44,48 +45,48 @@ namespace config
toml_node *parseNil(void); toml_node *parseNil(void);
class ExpectedToken: public std::exception class ExpectedToken: public std::domain_error
{ {
protected: protected:
std::string *msg; std::string msg;
public: public:
ExpectedToken(const std::string &missing, const std::string context) ExpectedToken(const std::string &missing, const std::string context): std::domain_error("ExpectedToken")
{ {
msg = new std::string("Config file: "); msg = std::string("Config file: ");
*msg += ("Expected " + missing + " at " + context); msg += ("Expected " + missing + " at " + context);
} }
virtual const char *what() const throw() virtual const char *what() const throw()
{ {
return (msg->c_str()); return (msg.c_str());
} }
virtual ~ExpectedToken() throw() virtual ~ExpectedToken() throw()
{ {
delete msg; // delete msg;
} }
}; };
class UnexpectedToken: public std::exception class UnexpectedToken: public std::domain_error
{ {
protected: protected:
std::string *msg; std::string msg;
public: public:
UnexpectedToken(const std::string &unexpected, const std::string context) UnexpectedToken(const std::string &unexpected, const std::string context): std::domain_error("ExpectedToken")
{ {
msg = new std::string("Config file: "); msg = std::string("Config file: ");
*msg += ("Unexpected " + unexpected + " " + context); msg += ("Unexpected " + unexpected + " " + context);
} }
virtual const char *what() const throw() virtual const char *what() const throw()
{ {
return (msg->c_str()); return (msg.c_str());
} }
virtual ~UnexpectedToken() throw() virtual ~UnexpectedToken() throw()
{ {
delete msg; // delete msg;
} }
}; };

View File

@@ -61,34 +61,58 @@ namespace config
void rollBackToken(); void rollBackToken();
void set_last(e_token type); void set_last(e_token type);
class NoMoreTokens: public std::exception class NoMoreTokens: public std::domain_error
{ {
public: public:
NoMoreTokens(void): std::domain_error("NoMoreTokens")
{}
virtual const char *what() const throw() virtual const char *what() const throw()
{ {
return ("Config may be incomplete, expected more tokens (check EOL)"); return ("Config may be incomplete, expected more tokens (check EOL)");
} }
}; };
class InvalidToken: public std::exception class InvalidToken: public std::domain_error
{ {
protected: protected:
std::string *msg; std::string msg;
public: public:
InvalidToken(const std::string &token) InvalidToken(const std::string &token): std::domain_error("InvalidToken")
{ {
msg = new std::string("Invalid token: '" + token + "'"); msg = std::string("Invalid token: '" + token + "'");
} }
virtual const char *what() const throw() virtual const char *what() const throw()
{ {
return (msg->c_str()); return (msg.c_str());
} }
virtual ~InvalidToken() throw() virtual ~InvalidToken() throw()
{ {
delete msg; // delete msg;
}
};
class SyntaxErrNear: public std::domain_error
{
protected:
std::string msg;
public:
SyntaxErrNear(const std::string &near): std::domain_error("InvalidToken")
{
msg = std::string("Syntax error near: " + near);
}
virtual const char *what() const throw()
{
return (msg.c_str());
}
virtual ~SyntaxErrNear() throw()
{
// delete msg;
} }
}; };