MCPcopy Create free account
hub / github.com/catboost/catboost / ParseOptArg

Method ParseOptArg

library/cpp/getopt/small/last_getopt_parser.cpp:138–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

136 }
137
138 bool TOptsParser::ParseOptArg(size_t pos) {
139 Y_ASSERT(pos < Argc_);
140 TStringBuf arg(Argv_[pos]);
141 const EIsOpt eio = IsOpt(arg);
142 Y_ASSERT(EIO_NONE != eio);
143 if (EIO_DDASH == eio || EIO_PLUS == eio || (Opts_->AllowSingleDashForLong_ || !Opts_->HasAnyShortOption())) {
144 // long option
145 bool singleCharPrefix = EIO_DDASH != eio;
146 arg.Skip(singleCharPrefix ? 1 : 2);
147 TStringBuf optionName = arg.NextTok('=');
148 const TOpt* option = Opts_->FindLongOption(optionName);
149 if (!option) {
150 if (singleCharPrefix && !arg.IsInited()) {
151 return ParseShortOptArg(pos);
152 } else if (Opts_->AllowUnknownLongOptions_) {
153 return false;
154 } else {
155 throw TUsageException() << "unknown option '" << optionName
156 << "' in '" << Argv_[pos] << "'";
157 }
158 }
159 if (arg.IsInited()) {
160 if (option->GetHasArg() == NO_ARGUMENT)
161 throw TUsageException() << "option " << optionName << " must have no arg";
162 return Commit(option, arg, pos + 1, 0);
163 }
164 ++pos;
165 return ParseOptParam(option, pos);
166 } else {
167 return ParseShortOptArg(pos);
168 }
169 }
170
171 bool TOptsParser::ParseOptParam(const TOpt* opt, size_t pos) {
172 Y_ASSERT(opt);

Callers

nothing calls this directly

Calls 6

TUsageExceptionClass · 0.85
HasAnyShortOptionMethod · 0.80
FindLongOptionMethod · 0.80
IsInitedMethod · 0.80
SkipMethod · 0.45
NextTokMethod · 0.45

Tested by

no test coverage detected