117 lines
2.6 KiB
C++
117 lines
2.6 KiB
C++
#include "../include/query.hpp"
|
|
|
|
template <>
|
|
Query<bool>::Query(const std::string &query)
|
|
: _query(std::move(query)) {}
|
|
|
|
template <>
|
|
Query<int>::Query(const std::string &query, char *list)
|
|
: _query(std::move(query)), _list(std::move(list)) {}
|
|
|
|
template <>
|
|
Query<std::string>::Query(const std::string &query, char *list)
|
|
: _query(std::move(query)), _list(std::move(list)) {}
|
|
|
|
/*template <class OUTPUT>
|
|
OUTPUT Query<OUTPUT>::execute()
|
|
{
|
|
switch (_qf)
|
|
{
|
|
case BOOL: return _bool();
|
|
case STRING: return _string();
|
|
case INT: return _int();
|
|
default:
|
|
throw ExceptionHandler(CUSTOM_ERROR, "No flag set for query.");
|
|
}
|
|
}*/
|
|
|
|
template <>
|
|
bool Query<bool>::execute(const rapidjson::Document &cfg) const
|
|
{
|
|
char in;
|
|
|
|
do
|
|
{
|
|
std::cout << _query << " [Y/n] ";
|
|
std::cin.get(in);
|
|
|
|
switch (in)
|
|
{
|
|
case 'N':
|
|
case 'n': std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); return false;
|
|
case 'Y':
|
|
case 'y': std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
|
case '\n': return true;
|
|
default:
|
|
std::cin.clear();
|
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
|
std::cerr << "ERROR: \"" << in << "\" is not a valid input!\n";
|
|
}
|
|
} while (true);
|
|
}
|
|
|
|
template <>
|
|
std::string Query<std::string>::execute(const rapidjson::Document &cfg) const
|
|
{
|
|
std::string input;
|
|
|
|
do
|
|
{
|
|
std::cout << _query << " [enter q to quit]" << "\n";
|
|
std::cin.clear();
|
|
|
|
std::cout << ">>> ";
|
|
std::getline(std::cin, input);
|
|
|
|
if (input == "q" || input == "q\n") { exit(0); }
|
|
|
|
for (rapidjson::SizeType i = 0; i < cfg[_list].Size(); i++)
|
|
{
|
|
if (input == cfg[_list][i].GetString())
|
|
{
|
|
return std::move(input);
|
|
}
|
|
}
|
|
|
|
std::cout << "Error! \"" << input << "\" not found in " << _list << " list!" << "\n";
|
|
} while (true);
|
|
}
|
|
|
|
template <>
|
|
int Query<int>::execute(const rapidjson::Document &cfg) const
|
|
{
|
|
char input;
|
|
int output;
|
|
|
|
do
|
|
{
|
|
std::cout << "\n" << _query;
|
|
|
|
for (rapidjson::SizeType i = 0; i < cfg[_list].Size(); i++)
|
|
{
|
|
std::cout << " [" << (i+1) << "] " << cfg[_list][i]["name"].GetString();
|
|
}
|
|
|
|
std::cout << " [press q to exit]" << "\n";
|
|
|
|
std::cout << ">>> ";
|
|
std::cin.get(input);
|
|
output = input - '0';
|
|
|
|
if (input == 'q')
|
|
{
|
|
exit(0);
|
|
}
|
|
|
|
if (output < 1 || output > static_cast<int>(cfg[_list].Size()))
|
|
{
|
|
std::cout << "Error! \"" << input << "\" is not a valid input." << "\n";
|
|
}
|
|
|
|
std::cin.clear();
|
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
|
} while (output < 1 || output > static_cast<int>(cfg[_list].Size()));
|
|
|
|
return output;
|
|
}
|