kaycxx-cli
C++ CLI library
Loading...
Searching...
No Matches
args.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Klaus Reimer <k@ailis.de>
2// SPDX-License-Identifier: MIT
3
9#pragma once
10
11#include <any>
12#include <string>
13#include <unordered_map>
14#include <unordered_set>
15#include <vector>
16
24
25namespace kaycxx::cli {
26
38class args {
39public:
41 args() = default;
42
44 args(args const&) = delete;
45
47 args& operator=(args const&) = delete;
48
54 args(args&& other) noexcept = default;
55
63 args& operator=(args&& other) noexcept = default;
64
72 void validate() const;
73
81 [[nodiscard]] bool get(flag_handle const& flag) const;
82
92 template <parseable_value T>
93 [[nodiscard]] T const& get(option_handle<T> const& option) const {
94 return std::any_cast<T const&>(values_.at(&option.definition()));
95 }
96
106 template <parseable_value T>
107 [[nodiscard]] bool has(option_handle<T> const& option) const {
108 return values_.contains(&option.definition());
109 }
110
119 template <parseable_value T>
120 [[nodiscard]] std::vector<T> const& get(repeatable_option_handle<T> const& option) const {
121 return std::any_cast<std::vector<T> const&>(values_.at(&option.definition()));
122 }
123
132 template <parseable_value T>
133 [[nodiscard]] bool has(repeatable_option_handle<T> const& option) const {
134 return values_.contains(&option.definition());
135 }
136
148 template <parseable_value T>
149 [[nodiscard]] T const& get(parameter_handle<T> const& parameter) const {
150 validate();
151 return std::any_cast<T const&>(parameters_.at(&parameter.definition()));
152 }
153
165 template <parseable_value T>
166 [[nodiscard]] bool has(parameter_handle<T> const& parameter) const {
167 validate();
168 return parameters_.contains(&parameter.definition());
169 }
170
182 template <parseable_value T>
183 [[nodiscard]] std::vector<T> const& get(parameters_handle<T> const& parameters) const {
184 validate();
185 return std::any_cast<std::vector<T> const&>(parameters_.at(&parameters.definition()));
186 }
187
199 template <parseable_value T>
200 [[nodiscard]] bool has(parameters_handle<T> const& parameters) const {
201 validate();
202 return parameters_.contains(&parameters.definition());
203 }
204
205private:
206 friend class command;
207
209 std::unordered_set<switch_base const*> flags_;
210
212 std::unordered_map<switch_base const*, std::any> values_;
213
215 std::vector<parameter_base const*> parameter_definitions_;
216
218 std::vector<std::string> positional_values_;
219
221 mutable std::unordered_map<parameter_base const*, std::any> parameters_;
222
224 mutable bool validated_ = false;
225};
226
227} // namespace kaycxx::cli
Parsed command line arguments.
Definition args.hpp:38
bool has(parameter_handle< T > const &parameter) const
Checks whether a positional parameter value is available.
Definition args.hpp:166
std::vector< T > const & get(repeatable_option_handle< T > const &option) const
Returns all parsed values of a repeatable option.
Definition args.hpp:120
args & operator=(args &&other) noexcept=default
Move-assigns parsed arguments.
T const & get(parameter_handle< T > const &parameter) const
Returns a parsed positional parameter value.
Definition args.hpp:149
bool has(repeatable_option_handle< T > const &option) const
Checks whether values for a repeatable option are available.
Definition args.hpp:133
args & operator=(args const &)=delete
Prevents copy-assigning parsed arguments.
args(args &&other) noexcept=default
Moves parsed arguments.
bool get(flag_handle const &flag) const
Checks whether a flag was set.
args(args const &)=delete
Prevents copying parsed arguments.
std::vector< T > const & get(parameters_handle< T > const &parameters) const
Returns parsed positional parameter list values.
Definition args.hpp:183
void validate() const
Validates and converts all positional parameters.
args()=default
Creates an empty argument collection.
T const & get(option_handle< T > const &option) const
Returns a parsed option value.
Definition args.hpp:93
bool has(parameters_handle< T > const &parameters) const
Checks whether positional parameter list values are available.
Definition args.hpp:200
bool has(option_handle< T > const &option) const
Checks whether an option value is available.
Definition args.hpp:107
Defines and parses a command line interface.
Definition command.hpp:68
Handle for a registered flag.
Definition flag_handle.hpp:22
Command line flag definition.
Definition flag.hpp:22
Handle for a registered option.
Definition option_handle.hpp:25
Typed command line option definition.
Definition option.hpp:93
Handle for a registered positional parameter.
Definition parameter_handle.hpp:25
Typed single positional parameter definition.
Definition parameter.hpp:32
Handle for a registered positional parameter list.
Definition parameters_handle.hpp:28
Typed positional parameter list definition.
Definition parameters.hpp:37
Handle for a registered repeatable option.
Definition repeatable_option_handle.hpp:25
Defines the flag handle type.
Defines the option handle type.
Defines the common base class for positional parameters.
Defines the positional parameter handle type.
Defines the positional parameter list handle type.
Defines the repeatable option handle type.
Defines the common base class for flags and options.