summaryrefslogtreecommitdiff
path: root/src/args.cc
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2025-09-15 21:15:53 +0200
committerJoel Klinghed <the_jk@spawned.biz>2025-09-15 21:15:53 +0200
commitaa49abdf239bae6065fddd0839ec67a404c9748c (patch)
tree631fbb2df58aa35df3d60c65c037ef74b1807114 /src/args.cc
parentbf41a601fd0447bcf3a2937a595a1cd8ca5c1633 (diff)
Add .clang-format
Make it easier to keep a consistent style
Diffstat (limited to 'src/args.cc')
-rw-r--r--src/args.cc93
1 files changed, 50 insertions, 43 deletions
diff --git a/src/args.cc b/src/args.cc
index 078db1a..1794941 100644
--- a/src/args.cc
+++ b/src/args.cc
@@ -26,10 +26,13 @@ class OptionImpl : public Args::OptionArgument {
OptionalArgument,
};
- OptionImpl(Type type, char shortname, std::string longname,
- std::string arg, std::string help)
- : type(type), shortname(shortname), longname(std::move(longname)),
- arg(std::move(arg)), help(std::move(help)) {}
+ OptionImpl(Type type, char shortname, std::string longname, std::string arg,
+ std::string help)
+ : type(type),
+ shortname(shortname),
+ longname(std::move(longname)),
+ arg(std::move(arg)),
+ help(std::move(help)) {}
const Type type;
const char shortname;
@@ -57,13 +60,13 @@ class OptionImpl : public Args::OptionArgument {
void set_argument(std::string value) {
assert(type == Type::RequiredArgument || type == Type::OptionalArgument);
- is_set_= true;
+ is_set_ = true;
value_ = std::move(value);
}
void set_no_argument() {
assert(type == Type::NoArgument || type == Type::OptionalArgument);
- is_set_= true;
+ is_set_ = true;
value_.reset();
}
@@ -74,11 +77,10 @@ class OptionImpl : public Args::OptionArgument {
class ArgsImpl : public Args {
public:
- explicit ArgsImpl(std::string prgname)
- : prgname_(std::move(prgname)) {}
+ explicit ArgsImpl(std::string prgname) : prgname_(std::move(prgname)) {}
- std::shared_ptr<Option> option(
- char shortname, std::string longname, std::string help) override {
+ std::shared_ptr<Option> option(char shortname, std::string longname,
+ std::string help) override {
auto opt = std::make_shared<OptionImpl>(
OptionImpl::Type::NoArgument, shortname, std::move(longname),
/* arg */ std::string(), std::move(help));
@@ -86,13 +88,15 @@ class ArgsImpl : public Args {
return opt;
}
- std::shared_ptr<OptionArgument> option_argument(
- char shortname, std::string longname, std::string arg,
- std::string help, bool required) override {
+ std::shared_ptr<OptionArgument> option_argument(char shortname,
+ std::string longname,
+ std::string arg,
+ std::string help,
+ bool required) override {
auto opt = std::make_shared<OptionImpl>(
- required ? OptionImpl::Type::RequiredArgument :
- OptionImpl::Type::OptionalArgument, shortname, std::move(longname),
- std::move(arg), std::move(help));
+ required ? OptionImpl::Type::RequiredArgument
+ : OptionImpl::Type::OptionalArgument,
+ shortname, std::move(longname), std::move(arg), std::move(help));
add(opt);
return opt;
}
@@ -118,9 +122,11 @@ class ArgsImpl : public Args {
if (argv[a][1] == '-') {
// long option
size_t eq = 2;
- while (argv[a][eq] != '=' && argv[a][eq] != '\0') ++eq;
+ while (argv[a][eq] != '=' && argv[a][eq] != '\0')
+ ++eq;
size_t end = eq;
- while (argv[a][end] != '\0') ++end;
+ while (argv[a][end] != '\0')
+ ++end;
if (end == 2) {
// "--", no more options signal
@@ -134,8 +140,8 @@ class ArgsImpl : public Args {
auto name = std::string_view(argv[a] + 2, eq - 2);
auto it = long_.find(name);
if (it == long_.end()) {
- last_error_ = std::format("{}: unrecognized option '--{}'",
- prgname, name);
+ last_error_ =
+ std::format("{}: unrecognized option '--{}'", prgname, name);
return false;
}
auto& opt = options_[it->second];
@@ -144,9 +150,9 @@ class ArgsImpl : public Args {
// long option with argument after equal sign
switch (opt->type) {
case OptionImpl::Type::NoArgument:
- last_error_ = std::format(
- "{}: option '--{}' doesn't allow an argument",
- prgname, name);
+ last_error_ =
+ std::format("{}: option '--{}' doesn't allow an argument",
+ prgname, name);
return false;
case OptionImpl::Type::RequiredArgument:
case OptionImpl::Type::OptionalArgument:
@@ -163,8 +169,7 @@ class ArgsImpl : public Args {
case OptionImpl::Type::RequiredArgument:
if (++a >= argc) {
last_error_ = std::format(
- "{}: option '--{}' requires an argument",
- prgname, name);
+ "{}: option '--{}' requires an argument", prgname, name);
return false;
}
opt->set_argument(argv[a]);
@@ -177,8 +182,8 @@ class ArgsImpl : public Args {
for (; *current; ++current) {
auto it = short_.find(*current);
if (it == short_.end()) {
- last_error_ = std::format("{}: invalid option -- '{}'",
- prgname, *current);
+ last_error_ =
+ std::format("{}: invalid option -- '{}'", prgname, *current);
return false;
}
@@ -190,9 +195,9 @@ class ArgsImpl : public Args {
break;
case OptionImpl::Type::RequiredArgument:
if (++a >= argc) {
- last_error_ = std::format(
- "{}: option requires an argument -- '{}'",
- prgname, *current);
+ last_error_ =
+ std::format("{}: option requires an argument -- '{}'",
+ prgname, *current);
return false;
}
opt->set_argument(argv[a]);
@@ -209,13 +214,15 @@ class ArgsImpl : public Args {
}
void print_error(std::ostream& out) const override {
- if (last_error_.empty()) return;
+ if (last_error_.empty())
+ return;
out << last_error_ << '\n';
}
void print_help(std::ostream& out, uint32_t width = 79) const override {
- if (options_.empty()) return;
+ if (options_.empty())
+ return;
uint32_t indent = 0;
const uint32_t max_need = width / 2;
@@ -223,7 +230,7 @@ class ArgsImpl : public Args {
for (auto const& opt : options_) {
uint32_t need;
if (opt->longname.empty()) {
- need = 4; // -O
+ need = 4; // -O
switch (opt->type) {
case OptionImpl::Type::NoArgument:
case OptionImpl::Type::OptionalArgument:
@@ -233,7 +240,7 @@ class ArgsImpl : public Args {
break;
}
} else {
- need = 8 + opt->longname.size(); // -O, --option
+ need = 8 + opt->longname.size(); // -O, --option
switch (opt->type) {
case OptionImpl::Type::NoArgument:
break;
@@ -247,7 +254,7 @@ class ArgsImpl : public Args {
break;
}
}
- need += 2; // margin
+ need += 2; // margin
option_need.emplace_back(need);
if (need <= max_need) {
@@ -255,7 +262,8 @@ class ArgsImpl : public Args {
}
}
- print_wrap(out, width, /* indent */ 0, "Mandatory arguments to long options"
+ print_wrap(out, width, /* indent */ 0,
+ "Mandatory arguments to long options"
" are mandatory for short options too.");
auto need_it = option_need.begin();
for (auto const& opt : options_) {
@@ -321,12 +329,10 @@ class ArgsImpl : public Args {
options_.emplace_back(std::move(opt));
}
- static inline bool is_whitespace(char c) {
- return c == ' ' || c == '\t';
- }
+ static inline bool is_whitespace(char c) { return c == ' ' || c == '\t'; }
static void print_wrap(std::ostream& out, uint32_t width, uint32_t indent,
- const std::string& str) {
+ const std::string& str) {
if (indent + str.size() <= width) {
out << str << '\n';
return;
@@ -341,7 +347,8 @@ class ArgsImpl : public Args {
size_t offset = 0;
while (offset + avail < str.size()) {
uint32_t i = avail;
- while (i > 0 && !is_whitespace(str[offset + i])) --i;
+ while (i > 0 && !is_whitespace(str[offset + i]))
+ --i;
if (i == 0) {
out << str.substr(offset, avail - 1);
out << "-\n";
@@ -366,8 +373,8 @@ class ArgsImpl : public Args {
} // namespace
-std::shared_ptr<Args::Option> Args::option(
- std::string longname, std::string help) {
+std::shared_ptr<Args::Option> Args::option(std::string longname,
+ std::string help) {
return option(/* shortname */ '\0', std::move(longname), std::move(help));
}