4#ifndef _Stroika_Foundation_Execution_CommandLine_h_
5#define _Stroika_Foundation_Execution_CommandLine_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#include "Stroika/Foundation/Characters/SDKChar.h"
11#include "Stroika/Foundation/Common/Common.h"
12#include "Stroika/Foundation/Containers/Sequence.h"
13#include "Stroika/Foundation/Execution/Exceptions.h"
21 using Characters::String;
22 using Containers::Iterable;
23 using Containers::Sequence;
91#if qStroika_Foundation_Common_Platform_Windows
138 optional<char> fSingleCharName;
139 optional<String> fLongName;
182 bool operator== (
const Option&)
const =
default;
183#if qCompilerAndStdLib_explicitly_defaulted_threeway_warning_Buggy
184 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdefaulted-function-deleted\"")
186 auto operator<=> (
const Option&)
const =
default;
187#if qCompilerAndStdLib_explicitly_defaulted_threeway_warning_Buggy
188 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdefaulted-function-deleted\"")
191 nonvirtual
String GetArgumentDescription (
bool includeArg =
false)
const;
193 nonvirtual
String ToString ()
const;
220 nonvirtual
String GetAppName (
bool onlyBaseName =
true)
const;
229 nonvirtual tuple<bool, Sequence<String>> Get (
const Option& o)
const;
235 nonvirtual
bool Has (
const Option& o)
const;
270 nonvirtual optional<StringShellQuoting> GetStringShellQuoting ()
const;
271 nonvirtual
void SetStringShellQuoting (
const optional<StringShellQuoting>& s);
290 template <Common::IAnyOf<String> T,
typename... ARGS>
291 nonvirtual T
As (ARGS... args)
const;
297 nonvirtual
String ToString ()
const;
307 optional<StringShellQuoting> fShellStyleQuoting_;
311 String CommandLine::As<String> ()
const;
313 String CommandLine::As<String> (optional<CommandLine::StringShellQuoting> shellStyle)
const;
315 namespace StandardCommandLineOptions {
316 static inline const CommandLine::Option kHelp{.fSingleCharName =
'h', .fLongName =
"help"sv, .fHelpOptionText =
"Print out this help."sv};
317 static inline const CommandLine::Option kVersion{.fSingleCharName =
'v', .fLongName =
"version"sv, .fHelpOptionText =
"Print this application's version."sv};
327#include "CommandLine.inl"
String is like std::u32string, except it is much easier to use, often much more space efficient,...
A generalization of a vector: a container whose elements are keyed by the natural numbers.
nonvirtual Sequence< String > GetArguments() const
nonvirtual T As(ARGS... args) const
nonvirtual optional< String > GetArgument(const Option &o) const
nonvirtual void Validate(Iterable< Option > options) const
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
An Iterator<T> is a copyable object which allows traversing the contents of some container....
optional< String > fHelpOptionText
optional< String > fHelpArgName
Characters::CompareOptions fLongNameCaseSensitive
bool fIfSupportsArgumentThenRequired