41 if (
typeid(A) ==
typeid(
const char *))
return "const char *";
42 else if (
typeid(A) ==
typeid(
int))
return "int";
43 else if (
typeid(A) ==
typeid(
float))
return "float";
44 else if (
typeid(A) ==
typeid(
double))
return "double";
45 else if (
typeid(A) ==
typeid(
unsigned int))
return "unsigned int";
46 else if (
typeid(A) ==
typeid(
bool))
return "bool";
47 else return typeid(A).name();
88 if (line.back() ==
'=') num_args = 0;
92 num_args = int(std::count(line.begin(), line.end(),
',')) + 1;
95 if (num_args != num_args_expected) {
96 throw std::runtime_error(
"Error. Num arguments expected: " + std::to_string(num_args_expected) +
", num arguments found: " + std::to_string(num_args) +
".");
100 std::cout <<
"\tNumber arguments found: " << num_args <<
"\n";
109 auto index_start = line.find(
":=") + 2;
110 auto index_end = line.find(
",");
113 for (
int i=0; i<arg_num; i++) {
114 index_start = line.find(
",",index_start) + 1;
115 index_end = line.find(
",",index_start);
119 if (index_end == index_start) {
120 throw std::runtime_error(
"Error. Argument number " + std::to_string(arg_num) +
" was not found.");
123 std::string arg_as_string = line.substr(index_start, index_end-index_start);
124 std::cout <<
"\t\tArg as string: " << arg_as_string <<
"\n";
127 return arg_as_string;
140 void get_argument(
const std::string &line,
const int arg_num,
unsigned int &arg )
const { arg =
static_cast<unsigned>(std::stoul(
get_arg_as_string(line, arg_num))); }
152 void get_argument(
const std::string &line,
const int arg_num, std::size_t &arg)
const { arg = std::stoul(
get_arg_as_string(line, arg_num)); }
189 std::cout <<
"\tCalling function with no arguments..." << std::flush;
190 (this->
_object.get()->*_function)();
191 std::cout <<
"done." << std::endl;
201 void (Z::*_function)();
211 template<
class Z,
class A>
231 std::cout <<
"\tSetting argument...\n";
233 std::cout <<
"\t\tExpected type: " <<
get_typename(_arg1) <<
"\n";
234 std::cout <<
"\t\tValue: " << _arg1 <<
"\n";
240 std::cout <<
"\tCalling function with one argument..." << std::flush;
241 (this->
_object.get()->*_function)(_arg1);
242 std::cout <<
"done." << std::endl;
251 void (Z::*_function)(A);
263 template<
class Z,
class A,
class B>
283 std::cout <<
"\tSetting first argument...\n";
285 std::cout <<
"\t\tExpected type: " <<
get_typename(_arg1) <<
"\n";
286 std::cout <<
"\t\tValue: " << _arg1 <<
"\n";
289 std::cout <<
"\tSetting second argument...\n";
291 std::cout <<
"\t\tExpected type: " <<
get_typename(_arg2) <<
"\n";
292 std::cout <<
"\t\tValue: " << _arg2 <<
"\n";
298 std::cout <<
"\tCalling function with two arguments..." << std::flush;
299 (this->
_object.get()->*_function)(_arg1,_arg2);
300 std::cout <<
"done." << std::endl;
309 void (Z::*_function)(A,B);
virtual void get_arguments(const std::string &line)
Get arguments.
Definition: ParserKey.h:278
virtual ~ParserKey1Arg()
Destructor.
Definition: ParserKey.h:220
virtual void call_function() const =0
Call function.
virtual ~ParserKey0Arg()
Destructor.
Definition: ParserKey.h:175
virtual void print_num_arguments_expected() const =0
Print number of arguments expected.
virtual void get_arguments(const std::string &line)
Get arguments - don't need to do anything.
Definition: ParserKey.h:181
void get_argument(const std::string &line, const int arg_num, double &arg) const
Get argument - double.
Definition: ParserKey.h:146
void get_argument(const std::string &line, const int arg_num, unsigned long &arg) const
Get argument - unsigned long.
Definition: ParserKey.h:149
A _arg1
Argument.
Definition: ParserKey.h:253
virtual void get_arguments(const std::string &line)=0
Get arguments.
Class for parser keys with 1 argument.
Definition: ParserKey.h:212
ParserKeyBase()
Constructor.
Definition: ParserKey.h:63
void get_argument(const std::string &line, const int arg_num, const char *&arg) const
Get argument - const char *.
Definition: ParserKey.h:131
A _arg1
First argument.
Definition: ParserKey.h:311
virtual void print_num_arguments_expected() const
Print number of arguments expected.
Definition: ParserKey.h:304
virtual ~ParserKeyBase()
Destructor.
Definition: ParserKey.h:66
virtual void get_arguments(const std::string &line)
Get arguments.
Definition: ParserKey.h:226
void set_function(void(Z::*function)(A, B))
Set function.
Definition: ParserKey.h:275
virtual ~ParserKey2Arg()
Destructor.
Definition: ParserKey.h:272
Base for parser keys.
Definition: ParserKey.h:58
void get_argument(const std::string &line, const int arg_num, bool &arg) const
Get argument - bool.
Definition: ParserKey.h:134
Class for parser keys with 0 arguments.
Definition: ParserKey.h:167
void set_object(std::shared_ptr< Z > object)
Set object.
Definition: ParserKey.h:69
void get_argument(const std::string &line, const int arg_num, float &arg) const
Get argument - float.
Definition: ParserKey.h:143
Abstract data container.
Definition: GeometricalInfo.cpp:141
ParserKey0Arg()
Constructor.
Definition: ParserKey.h:172
ParserKey1Arg()
Constructor.
Definition: ParserKey.h:217
void set_function(void(Z::*function)())
Set function.
Definition: ParserKey.h:178
virtual void call_function() const
Call the function.
Definition: ParserKey.h:238
std::shared_ptr< Z > _object
Object to call the function on.
Definition: ParserKey.h:156
Class for parser keys with 2 arguments.
Definition: ParserKey.h:264
std::string get_arg_as_string(const std::string &line, const int arg_num) const
Get the nth argument as a string.
Definition: ParserKey.h:105
ParserKey2Arg()
Constructor.
Definition: ParserKey.h:269
virtual void call_function() const
Call the function.
Definition: ParserKey.h:296
std::string get_typename(A)
Get template type as human-readable name.
Definition: ParserKey.h:39
void get_argument(const std::string &line, const int arg_num, unsigned int &arg) const
Get argument - unsigned int.
Definition: ParserKey.h:140
void get_argument(const std::string &line, const int arg_num, int &arg) const
Get argument - int.
Definition: ParserKey.h:137
virtual void call_function() const
Call the function.
Definition: ParserKey.h:187
void set_function(void(Z::*function)(A))
Set function.
Definition: ParserKey.h:223
virtual void print_num_arguments_expected() const
Print number of arguments expected.
Definition: ParserKey.h:246
B _arg2
Second argument.
Definition: ParserKey.h:313
void check_num_arguments(const std::string &line, const int num_args_expected) const
Check that the number of arguments matches the expected amount.
Definition: ParserKey.h:83
virtual void print_num_arguments_expected() const
Print number of arguments expected.
Definition: ParserKey.h:195