koboldcpp/otherarch/ttscpp/src/ttsargs.cpp
2025-08-17 14:11:30 +08:00

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;
}