diff options
author | Ilnur Khuziev <ilnur.khuziev@yandex.ru> | 2022-02-10 16:46:13 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:13 +0300 |
commit | 736dcd8ca259457a136f2f9f9168c44643914323 (patch) | |
tree | ddd46a036d68bfa83aa11b892f31243ea6b068a1 /library/cpp/getopt/small/last_getopt_parser.h | |
parent | 9bf2fa2b060c9881d3135c2208c624a1dd546ecc (diff) | |
download | ydb-736dcd8ca259457a136f2f9f9168c44643914323.tar.gz |
Restoring authorship annotation for Ilnur Khuziev <ilnur.khuziev@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/getopt/small/last_getopt_parser.h')
-rw-r--r-- | library/cpp/getopt/small/last_getopt_parser.h | 80 |
1 files changed, 40 insertions, 40 deletions
diff --git a/library/cpp/getopt/small/last_getopt_parser.h b/library/cpp/getopt/small/last_getopt_parser.h index 2cf8a6c308..292fb49d11 100644 --- a/library/cpp/getopt/small/last_getopt_parser.h +++ b/library/cpp/getopt/small/last_getopt_parser.h @@ -1,20 +1,20 @@ -#pragma once - -#include "last_getopt_opts.h" - +#pragma once + +#include "last_getopt_opts.h" + #include <library/cpp/colorizer/fwd.h> -#include <util/generic/hash_set.h> -#include <util/generic/list.h> - -namespace NLastGetopt { +#include <util/generic/hash_set.h> +#include <util/generic/list.h> + +namespace NLastGetopt { /** -* NLastGetopt::TOptsParser is an implementation of parsing -* argv/argv into TOptsParseResult by rules of TOpts. -* -* The class allows to make complicated handlers. -* Note, that if PERMUTE mode is on, then data, pointed by argv can be changed. -*/ +* NLastGetopt::TOptsParser is an implementation of parsing +* argv/argv into TOptsParseResult by rules of TOpts. +* +* The class allows to make complicated handlers. +* Note, that if PERMUTE mode is on, then data, pointed by argv can be changed. +*/ class TOptsParser { enum EIsOpt { EIO_NONE, //is not an option name @@ -22,72 +22,72 @@ namespace NLastGetopt { EIO_DDASH, //double-dashed ("--opt") option name EIO_PLUS, //plus prefix ("+opt") option name }; - + public: // TODO: make private const TOpts* Opts_; //rules of parsing - + // argc/argv pair size_t Argc_; const char** Argv_; - + private: //the storage of last unkown options. TODO: can be moved to local-method scope TCopyPtr<TOpt> TempCurrentOpt_; - + public: //storage of argv[0] TString ProgramName_; - + //state of parsing: - + size_t Pos_; // current element withing argv size_t Sop_; // current char within arg bool Stopped_; bool GotMinusMinus_; //true if "--" have been seen in argv - + protected: const TOpt* CurrentOpt_; // ptr on the last meeted option TStringBuf CurrentValue_; // the value of the last met argument (corresponding to CurrentOpt_) - + private: typedef THashSet<const TOpt*> TdOptSet; TdOptSet OptsSeen_; //the set of options that have been met during parsing - + TList<const TOpt*> OptsDefault_; - + private: void Init(const TOpts* options, int argc, const char* argv[]); void Init(const TOpts* options, int argc, char* argv[]); - + bool CommitEndOfOptions(size_t pos); bool Commit(const TOpt* currentOption, const TStringBuf& currentValue, size_t pos, size_t sop); - + bool ParseShortOptArg(size_t pos); bool ParseOptArg(size_t pos); bool ParseOptParam(const TOpt* opt, size_t pos); bool ParseUnknownShortOptWithinArg(size_t pos, size_t sop); bool ParseShortOptWithinArg(size_t pos, size_t sop); bool ParseWithPermutation(); - + bool DoNext(); void Finish(); - + EIsOpt IsOpt(const TStringBuf& arg) const; - + void Swap(TOptsParser& that); - + public: TOptsParser(const TOpts* options, int argc, const char* argv[]) { Init(options, argc, argv); } - + TOptsParser(const TOpts* options, int argc, char* argv[]) { Init(options, argc, argv); } - + /// fetch next argument, false if no more arguments left bool Next(); - + bool Seen(const TOpt* opt) const { return OptsSeen_.contains(opt); } @@ -111,38 +111,38 @@ namespace NLastGetopt { const TOpt* CurOpt() const { return CurrentOpt_; } - + const char* CurVal() const { return CurrentValue_.data(); } - + const TStringBuf& CurValStr() const { return CurrentValue_; } - + TStringBuf CurValOrOpt() const { TStringBuf val(CurValStr()); if (!val.IsInited() && CurOpt()->HasOptionalValue()) val = CurOpt()->GetOptionalValue(); return val; } - + TStringBuf CurValOrDef(bool useDef = true) const { TStringBuf val(CurValOrOpt()); if (!val.IsInited() && useDef && CurOpt()->HasDefaultValue()) val = CurOpt()->GetDefaultValue(); return val; } - + // true if this option was actually specified by the user bool IsExplicit() const { return nullptr == CurrentOpt_ || !OptsSeen_.empty(); } - + bool CurrentIs(const TString& name) const { return CurOpt()->NameIs(name); } - + const TString& ProgramName() const { return ProgramName_; } |