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"
13#include "Stroika/Foundation/Containers/Sequence.h"
14#include "Stroika/Foundation/Execution/Exceptions.h"
22 using Characters::String;
23 using Containers::Iterable;
24 using Containers::Sequence;
91#if qStroika_Foundation_Common_Platform_Windows
138 optional<char> fSingleCharName;
139 optional<String> fLongName;
195 bool operator== (
const Option&)
const =
default;
196#if qCompilerAndStdLib_explicitly_defaulted_threeway_warning_Buggy
197 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdefaulted-function-deleted\"")
199 auto operator<=> (
const Option&)
const =
default;
200#if qCompilerAndStdLib_explicitly_defaulted_threeway_warning_Buggy
201 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdefaulted-function-deleted\"")
204 nonvirtual
String GetArgumentDescription (
bool includeArgName =
false)
const;
211 nonvirtual
String ToString ()
const;
253 nonvirtual
String GetAppName (
bool onlyBaseName =
true)
const;
262 nonvirtual tuple<bool, Sequence<String>> Get (
const Option& o)
const;
268 nonvirtual
bool Has (
const Option& o)
const;
304 nonvirtual optional<StringShellQuoting> GetStringShellQuoting ()
const;
305 nonvirtual
void SetStringShellQuoting (
const optional<StringShellQuoting>& s);
324 template <Common::IAnyOf<String> T,
typename... ARGS>
325 nonvirtual T
As (ARGS... args)
const;
331 nonvirtual
String ToString ()
const;
346 optional<StringShellQuoting> fShellStyleQuoting_;
350 String CommandLine::As<String> ()
const;
352 String CommandLine::As<String> (optional<CommandLine::StringShellQuoting> shellStyle)
const;
354 namespace StandardCommandLineOptions {
355 static inline const CommandLine::Option kHelp{.fSingleCharName =
'h', .fLongName =
"help"sv, .fHelpOptionText =
"Print out this help."sv};
356 static inline const CommandLine::Option kVersion{.fSingleCharName =
'v', .fLongName =
"version"sv, .fHelpOptionText =
"Print this application's version."sv};
366#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 optional< InvalidCommandLineArgument > ValidateQuietly(const Iterable< Option > &options) const
like Validate - but return optional< InvalidCommandLineArgument> instead of throwing
nonvirtual Sequence< String > GetArguments() const
nonvirtual T As(ARGS... args) const
nonvirtual optional< String > GetArgument(const Option &o) const
nonvirtual void Validate(const 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....
constexpr bool IsPositionArgument() const
optional< String > fHelpOptionText
optional< String > fHelpArgName
Characters::CompareOptions fLongNameCaseSensitive
bool fIfSupportsArgumentThenRequired
optional< size_t > fSkipFirstNArguments