mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2026-05-13 15:39:11 +00:00
164 lines
4.1 KiB
C++
164 lines
4.1 KiB
C++
#include "ttsargs.h"
|
|
|
|
std::string arg::help_text() {
|
|
std::string htxt = full_name;
|
|
if (abbreviation != "") {
|
|
htxt += " (" + abbreviation + ")";
|
|
}
|
|
htxt += ":\n ";
|
|
if (description != "") {
|
|
htxt += description + "\n";
|
|
} else {
|
|
htxt += "is a " + (std::string)(required ? "required " : "optional ") + "parameter.\n";
|
|
}
|
|
return htxt;
|
|
}
|
|
|
|
int string_arg::parse(int argc, const char ** argv) {
|
|
required = false;
|
|
value.assign(argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
int int_arg::parse(int argc, const char ** argv) {
|
|
if (required) {
|
|
required = false;
|
|
}
|
|
int val = atoi(argv[0]);
|
|
*value = val;
|
|
return 1;
|
|
}
|
|
|
|
int float_arg::parse(int argc, const char ** argv) {
|
|
if (required) {
|
|
required = false;
|
|
}
|
|
float val = strtof(argv[0], nullptr);
|
|
*value = val;
|
|
return 1;
|
|
}
|
|
|
|
void arg_list::help() {
|
|
std::string help_text = "";
|
|
for (auto arg : fargs) {
|
|
help_text += arg.help_text();
|
|
}
|
|
for (auto arg : iargs) {
|
|
help_text += arg.help_text();
|
|
|
|
}
|
|
for (auto arg : bargs) {
|
|
help_text += arg.help_text();
|
|
|
|
}
|
|
for (auto arg : sargs) {
|
|
help_text += arg.help_text();
|
|
|
|
}
|
|
fprintf(stdout, "%s", help_text.c_str());
|
|
}
|
|
|
|
void arg_list::validate() {
|
|
for (auto arg : fargs) {
|
|
if (arg.required) {
|
|
fprintf(stderr, "argument '%s' is required.\n", arg.full_name.c_str());
|
|
exit(1);
|
|
}
|
|
}
|
|
for (auto arg : iargs) {
|
|
if (arg.required) {
|
|
fprintf(stderr, "argument '%s' is required.\n", arg.full_name.c_str());
|
|
exit(1);
|
|
}
|
|
}
|
|
for (auto arg : bargs) {
|
|
if (arg.required) {
|
|
fprintf(stderr, "argument '%s' is required.\n", arg.full_name.c_str());
|
|
exit(1);
|
|
}
|
|
}
|
|
for (auto arg : sargs) {
|
|
if (arg.required) {
|
|
fprintf(stderr, "argument '%s' is required.\n", arg.full_name.c_str());
|
|
exit(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
void arg_list::parse(int argc, const char ** argv) {
|
|
int current_arg = 1;
|
|
while (current_arg < argc) {
|
|
std::string name(argv[current_arg]);
|
|
if (name == "--help") {
|
|
for_help = true;
|
|
return;
|
|
}
|
|
current_arg += 1;
|
|
current_arg += find_and_parse(name, argc - current_arg, argv + current_arg);
|
|
}
|
|
}
|
|
|
|
int arg_list::find_and_parse(std::string name, int argc, const char ** argv) {
|
|
for (int i = 0; i < fargs.size(); i++) {
|
|
if (fargs[i].full_name == name || fargs[i].abbreviation == name) {
|
|
return fargs[i].parse(argc, argv);
|
|
}
|
|
}
|
|
for (int i = 0; i < iargs.size(); i++) {
|
|
if (iargs[i].full_name == name || iargs[i].abbreviation == name) {
|
|
return iargs[i].parse(argc, argv);
|
|
}
|
|
}
|
|
for (int i = 0; i < bargs.size(); i++) {
|
|
if (bargs[i].full_name == name || bargs[i].abbreviation == name) {
|
|
bargs[i].value = !bargs[i].value;
|
|
bargs[i].required = false;
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
for (int i = 0; i < sargs.size(); i++) {
|
|
if (sargs[i].full_name == name || sargs[i].abbreviation == name) {
|
|
return sargs[i].parse(argc, argv);
|
|
}
|
|
}
|
|
fprintf(stderr, "argument '%s' is not a valid argument. Call '--help' for information on all valid arguments.\n", name.c_str());
|
|
exit(1);
|
|
}
|
|
|
|
std::string arg_list::get_string_param(std::string full_name) {
|
|
for (auto arg : sargs) {
|
|
if (arg.full_name == full_name) {
|
|
return arg.value;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
int * arg_list::get_int_param(std::string full_name) {
|
|
for (auto arg : iargs) {
|
|
if (arg.full_name == full_name) {
|
|
return arg.value;
|
|
}
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
float * arg_list::get_float_param(std::string full_name) {
|
|
for (auto arg : fargs) {
|
|
if (arg.full_name == full_name) {
|
|
return arg.value;
|
|
}
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
bool arg_list::get_bool_param(std::string full_name) {
|
|
for (auto arg : bargs) {
|
|
if (arg.full_name == full_name) {
|
|
return arg.value;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|