g2o
Loading...
Searching...
No Matches
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
g2o::CommandArgs Class Reference

Command line parsing of argc and argv. More...

#include <command_args.h>

Classes

struct  CommandArgument
 

Public Member Functions

virtual ~CommandArgs ()
 
bool parseArgs (int argc, char **argv, bool exitOnError=true)
 
void param (const std::string &name, bool &p, bool defValue, const std::string &desc)
 
void param (const std::string &name, int &p, int defValue, const std::string &desc)
 
void param (const std::string &name, float &p, float defValue, const std::string &desc)
 
void param (const std::string &name, double &p, double defValue, const std::string &desc)
 
void param (const std::string &name, std::string &p, const std::string &defValue, const std::string &desc)
 
void param (const std::string &name, std::vector< int > &p, const std::vector< int > &defValue, const std::string &desc)
 
void param (const std::string &name, std::vector< double > &p, const std::vector< double > &defValue, const std::string &desc)
 
void paramLeftOver (const std::string &name, std::string &p, const std::string &defValue, const std::string &desc, bool optional=false)
 
void printParams (std::ostream &os)
 
const std::string & getBanner () const
 return the banner string
 
void setBanner (const std::string &banner)
 
void printHelp (std::ostream &os)
 
bool parsedParam (const std::string &paramFlag) const
 

Protected Member Functions

const char * type2str (int t) const
 
void str2arg (const std::string &input, CommandArgument &ca) const
 
std::string arg2str (const CommandArgument &ca) const
 

Protected Attributes

std::vector< CommandArgument_args
 
std::vector< CommandArgument_leftOvers
 
std::vector< CommandArgument_leftOversOptional
 
std::string _banner
 
std::string _progName
 

Detailed Description

Command line parsing of argc and argv.

Parse the command line to get the program options. Additionally, we can store the config in a file and reload a parameter set from this file.

Definition at line 45 of file command_args.h.

Constructor & Destructor Documentation

◆ ~CommandArgs()

g2o::CommandArgs::~CommandArgs ( )
virtual

Definition at line 104 of file command_args.cpp.

104{}

Member Function Documentation

◆ arg2str()

std::string g2o::CommandArgs::arg2str ( const CommandArgument ca) const
protected

Definition at line 395 of file command_args.cpp.

395 {
396 switch (ca.type) {
397 case CAT_FLOAT:
398 return argument2String<float>(ca);
399 case CAT_DOUBLE:
400 return argument2String<double>(ca);
401 case CAT_INT:
402 return argument2String<int>(ca);
403 case CAT_BOOL:
404 return argument2String<bool>(ca);
405 case CAT_STRING: {
406 string* data = static_cast<string*>(ca.data);
407 return *data;
408 }
409 case CAT_VECTOR_INT: {
410 std::vector<int>* data = static_cast<std::vector<int>*>(ca.data);
411 return writeVectorAsString(*data);
412 }
413 case CAT_VECTOR_DOUBLE: {
414 std::vector<double>* data = static_cast<std::vector<double>*>(ca.data);
415 return writeVectorAsString(*data);
416 }
417 }
418 return "";
419}
@ CAT_VECTOR_DOUBLE
@ CAT_DOUBLE
@ CAT_FLOAT
@ CAT_VECTOR_INT
@ CAT_STRING

References g2o::CAT_BOOL, g2o::CAT_DOUBLE, g2o::CAT_FLOAT, g2o::CAT_INT, g2o::CAT_STRING, g2o::CAT_VECTOR_DOUBLE, g2o::CAT_VECTOR_INT, g2o::CommandArgs::CommandArgument::data, and g2o::CommandArgs::CommandArgument::type.

Referenced by printHelp().

◆ getBanner()

const std::string & g2o::CommandArgs::getBanner ( ) const
inline

return the banner string

Definition at line 108 of file command_args.h.

108{ return _banner; }
std::string _banner

◆ param() [1/7]

void g2o::CommandArgs::param ( const std::string &  name,
bool &  p,
bool  defValue,
const std::string &  desc 
)

add a bool parameter, if found on the command line, will toggle defValue

Definition at line 188 of file command_args.cpp.

189 {
190 CommandArgument ca;
191 ca.name = name;
192 ca.description = desc;
193 ca.type = CAT_BOOL;
194 ca.data = static_cast<void*>(&p);
195 ca.parsed = false;
196 p = defValue;
197 _args.push_back(ca);
198}
std::vector< CommandArgument > _args

References _args, g2o::CAT_BOOL, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

Referenced by main(), parsedParam(), and g2o::RunG2OViewer::run().

◆ param() [2/7]

void g2o::CommandArgs::param ( const std::string &  name,
double &  p,
double  defValue,
const std::string &  desc 
)

add a float parameter

Definition at line 224 of file command_args.cpp.

225 {
226 CommandArgument ca;
227 ca.name = name;
228 ca.description = desc;
229 ca.type = CAT_DOUBLE;
230 ca.data = static_cast<void*>(&p);
231 ca.parsed = false;
232 p = defValue;
233 _args.push_back(ca);
234}

References _args, g2o::CAT_DOUBLE, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

◆ param() [3/7]

void g2o::CommandArgs::param ( const std::string &  name,
float &  p,
float  defValue,
const std::string &  desc 
)

add a float parameter

Definition at line 212 of file command_args.cpp.

213 {
214 CommandArgument ca;
215 ca.name = name;
216 ca.description = desc;
217 ca.type = CAT_FLOAT;
218 ca.data = static_cast<void*>(&p);
219 ca.parsed = false;
220 p = defValue;
221 _args.push_back(ca);
222}

References _args, g2o::CAT_FLOAT, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

◆ param() [4/7]

void g2o::CommandArgs::param ( const std::string &  name,
int &  p,
int  defValue,
const std::string &  desc 
)

add a int parameter

Definition at line 200 of file command_args.cpp.

201 {
202 CommandArgument ca;
203 ca.name = name;
204 ca.description = desc;
205 ca.type = CAT_INT;
206 ca.data = static_cast<void*>(&p);
207 ca.parsed = false;
208 p = defValue;
209 _args.push_back(ca);
210}

References _args, g2o::CAT_INT, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

◆ param() [5/7]

void g2o::CommandArgs::param ( const std::string &  name,
std::string &  p,
const std::string &  defValue,
const std::string &  desc 
)

add a string parameter

Definition at line 236 of file command_args.cpp.

237 {
238 CommandArgument ca;
239 ca.name = name;
240 ca.description = desc;
241 ca.type = CAT_STRING;
242 ca.data = static_cast<void*>(&p);
243 ca.parsed = false;
244 p = defValue;
245 _args.push_back(ca);
246}

References _args, g2o::CAT_STRING, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

◆ param() [6/7]

void g2o::CommandArgs::param ( const std::string &  name,
std::vector< double > &  p,
const std::vector< double > &  defValue,
const std::string &  desc 
)

add an vector of doubles as a parameter

Definition at line 261 of file command_args.cpp.

263 {
264 CommandArgument ca;
265 ca.name = name;
266 ca.description = desc;
267 ca.type = CAT_VECTOR_DOUBLE;
268 ca.data = static_cast<void*>(&p);
269 ca.parsed = false;
270 p = defValue;
271 _args.push_back(ca);
272}

References _args, g2o::CAT_VECTOR_DOUBLE, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

◆ param() [7/7]

void g2o::CommandArgs::param ( const std::string &  name,
std::vector< int > &  p,
const std::vector< int > &  defValue,
const std::string &  desc 
)

add an int vector parameter

Definition at line 248 of file command_args.cpp.

250 {
251 CommandArgument ca;
252 ca.name = name;
253 ca.description = desc;
254 ca.type = CAT_VECTOR_INT;
255 ca.data = static_cast<void*>(&p);
256 ca.parsed = false;
257 p = defValue;
258 _args.push_back(ca);
259}

References _args, g2o::CAT_VECTOR_INT, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

◆ paramLeftOver()

void g2o::CommandArgs::paramLeftOver ( const std::string &  name,
std::string &  p,
const std::string &  defValue,
const std::string &  desc,
bool  optional = false 
)

add a param which is specified as a plain argument

Definition at line 331 of file command_args.cpp.

333 {
334 CommandArgument ca;
335 ca.name = name;
336 ca.description = desc;
337 ca.type = CAT_STRING;
338 ca.data = static_cast<void*>(&p);
339 ca.parsed = false;
340 ca.optional = optional;
341 p = defValue;
342 if (optional)
343 _leftOversOptional.push_back(ca);
344 else
345 _leftOvers.push_back(ca);
346}
std::vector< CommandArgument > _leftOversOptional
std::vector< CommandArgument > _leftOvers

References _leftOvers, _leftOversOptional, g2o::CAT_STRING, g2o::CommandArgs::CommandArgument::data, g2o::CommandArgs::CommandArgument::description, g2o::CommandArgs::CommandArgument::name, g2o::CommandArgs::CommandArgument::optional, g2o::CommandArgs::CommandArgument::parsed, and g2o::CommandArgs::CommandArgument::type.

Referenced by main(), and g2o::RunG2OViewer::run().

◆ parseArgs()

bool g2o::CommandArgs::parseArgs ( int  argc,
char **  argv,
bool  exitOnError = true 
)

parse the command line for the requested parameters.

Parameters
argcthe number of params
argvthe value array
exitOnErrorcall exit() if the parsing fails
Returns
true, if parsing was correct

Definition at line 106 of file command_args.cpp.

106 {
107 _progName = argv[0];
108 int i;
109 for (i = 1; i < argc; i++) {
110 string name = argv[i];
111
112 if (name[0] != '-') { // each param has to start with at least one dash
113 // cerr << "Error: expecting parameter, got " << name << endl;
114 // printHelp(cerr);
115 // if (exitOnError)
116 // exit(1);
117 // return false;
118 break;
119 }
120 /* first check whether it's -- and we should not continue parsing */
121 if (name == "--") {
122 ++i;
123 break;
124 }
125
126 string::size_type dashPos = name.find_first_not_of('-');
127 if (dashPos != string::npos) name = name.substr(dashPos);
128
129 if (name == "help" || name == "h") {
130 printHelp(cout);
131 exit(0);
132 } else {
133 // command line argument parsing
134 std::vector<CommandArgument>::iterator it = _args.begin();
135 for (; it != _args.end(); ++it) {
136 if (it->name == name) {
137 if (it->type == CAT_BOOL) {
138 if (!it->parsed) {
139 bool* data = static_cast<bool*>(it->data);
140 *data = !(*data);
141 }
142 it->parsed = true;
143 } else {
144 if (i >= argc - 1) {
145 cerr << "Argument " << name << "needs value.\n";
146 printHelp(cerr);
147 if (exitOnError) exit(1);
148 return false;
149 }
150 i++;
151 str2arg(argv[i], *it);
152 it->parsed = true;
153 }
154 break;
155 }
156 }
157 if (it == _args.end()) {
158 cerr << "Error: Unknown Option '" << name
159 << "' (use -help to get list of options).\n";
160 if (exitOnError) exit(1);
161 return false;
162 }
163 }
164 } // for argv[i]
165
166 if ((int)_leftOvers.size() > argc - i) {
167 cerr << "Error: program requires parameters" << endl;
168 printHelp(cerr);
169 if (exitOnError) exit(1);
170 return false;
171 }
172 for (size_t j = 0; (i < argc && j < _leftOvers.size()); i++, j++) {
173 string* s = static_cast<string*>(_leftOvers[j].data);
174 *s = argv[i];
175 _leftOvers[j].parsed = true;
176 }
177
178 // the optional leftOvers
179 for (size_t j = 0; (i < argc && j < _leftOversOptional.size()); i++, j++) {
180 string* s = static_cast<string*>(_leftOversOptional[j].data);
181 *s = argv[i];
182 _leftOversOptional[j].parsed = true;
183 }
184
185 return true;
186}
void printHelp(std::ostream &os)
void str2arg(const std::string &input, CommandArgument &ca) const
std::string _progName

References _args, _leftOvers, _leftOversOptional, _progName, g2o::CAT_BOOL, printHelp(), and str2arg().

Referenced by main(), and g2o::RunG2OViewer::run().

◆ parsedParam()

bool g2o::CommandArgs::parsedParam ( const std::string &  paramFlag) const

returns true, if the param was parsed via the command line

Definition at line 421 of file command_args.cpp.

421 {
422 std::vector<CommandArgument>::const_iterator it = _args.begin();
423 for (; it != _args.end(); ++it) {
424 if (it->name == param) {
425 return it->parsed;
426 }
427 }
428 return false;
429}
void param(const std::string &name, bool &p, bool defValue, const std::string &desc)

References _args, and param().

Referenced by main().

◆ printHelp()

void g2o::CommandArgs::printHelp ( std::ostream &  os)

print the help

Definition at line 274 of file command_args.cpp.

274 {
275 if (_banner.size()) os << _banner << endl;
276 os << "Usage: " << _progName << (_args.size() > 0 ? " [options] " : " ");
277 if (_leftOvers.size() > 0) {
278 for (size_t i = 0; i < _leftOvers.size(); ++i) {
279 if (i > 0) os << " ";
280 os << _leftOvers[i].name;
281 }
282 }
283 if (_leftOversOptional.size() > 0) {
284 if (_leftOvers.size() > 0) os << " ";
285 for (size_t i = 0; i < _leftOversOptional.size(); ++i) {
286 if (i > 0) os << " ";
287 os << "[" << _leftOversOptional[i].name << "]";
288 }
289 }
290 os << endl << endl;
291 os << "General options:" << endl;
292 os << "-------------------------------------------" << endl;
293 os << "-help / -h Displays this help." << endl << endl;
294 if (_args.size() > 0) {
295 os << "Program Options:" << endl;
296 os << "-------------------------------------------" << endl;
297 // build up option string to print as table
298 vector<pair<string, string> > tableStrings;
299 tableStrings.reserve(_args.size());
300 size_t maxArgLen = 0;
301 for (size_t i = 0; i < _args.size(); ++i) {
302 if (_args[i].type != CAT_BOOL) {
303 string defaultValueStr = arg2str(_args[i]);
304 if (!defaultValueStr.empty())
305 tableStrings.push_back(make_pair(
306 _args[i].name + " " + type2str(_args[i].type),
307 _args[i].description + " (default: " + defaultValueStr + ")"));
308 else
309 tableStrings.push_back(
310 make_pair(_args[i].name + " " + type2str(_args[i].type),
311 _args[i].description));
312 } else
313 tableStrings.push_back(make_pair(_args[i].name, _args[i].description));
314 maxArgLen = (std::max)(maxArgLen, tableStrings.back().first.size());
315 }
316 sort(tableStrings.begin(), tableStrings.end(),
317 CmpPairFirst<string, string>());
318 maxArgLen += 3;
319 for (size_t i = 0; i < tableStrings.size(); ++i) {
320 os << "-" << tableStrings[i].first;
321 for (size_t l = tableStrings[i].first.size(); l < maxArgLen; ++l)
322 os << " ";
323 os << tableStrings[i].second << endl;
324 }
325 // TODO should output description for leftOver params?
326 }
327}
const char * type2str(int t) const
std::string arg2str(const CommandArgument &ca) const

References _args, _banner, _leftOvers, _leftOversOptional, _progName, arg2str(), g2o::CAT_BOOL, and type2str().

Referenced by parseArgs().

◆ printParams()

void g2o::CommandArgs::printParams ( std::ostream &  os)

print the value of all params to an ostream

◆ setBanner()

void g2o::CommandArgs::setBanner ( const std::string &  banner)

Definition at line 329 of file command_args.cpp.

329{ _banner = banner; }

References _banner.

◆ str2arg()

void g2o::CommandArgs::str2arg ( const std::string &  input,
CommandArgument ca 
) const
protected

Definition at line 368 of file command_args.cpp.

368 {
369 switch (ca.type) {
370 case CAT_FLOAT:
371 parseArgument<float>(input, ca);
372 break;
373 case CAT_DOUBLE:
374 parseArgument<double>(input, ca);
375 break;
376 case CAT_INT:
377 parseArgument<int>(input, ca);
378 break;
379 case CAT_BOOL:
380 parseArgument<bool>(input, ca);
381 break;
382 case CAT_STRING: {
383 string* data = static_cast<string*>(ca.data);
384 *data = input;
385 } break;
386 case CAT_VECTOR_INT: {
387 parseVector<int>(input, ca);
388 } break;
389 case CAT_VECTOR_DOUBLE: {
390 parseVector<double>(input, ca);
391 } break;
392 }
393}

References g2o::CAT_BOOL, g2o::CAT_DOUBLE, g2o::CAT_FLOAT, g2o::CAT_INT, g2o::CAT_STRING, g2o::CAT_VECTOR_DOUBLE, g2o::CAT_VECTOR_INT, g2o::CommandArgs::CommandArgument::data, and g2o::CommandArgs::CommandArgument::type.

Referenced by parseArgs().

◆ type2str()

const char * g2o::CommandArgs::type2str ( int  t) const
protected

Definition at line 348 of file command_args.cpp.

348 {
349 switch (t) {
350 case CAT_DOUBLE:
351 return "<double>";
352 case CAT_FLOAT:
353 return "<float>";
354 case CAT_INT:
355 return "<int>";
356 case CAT_STRING:
357 return "<string>";
358 case CAT_BOOL:
359 return "<bool>";
360 case CAT_VECTOR_INT:
361 return "<vector_int>";
363 return "<vector_double>";
364 }
365 return "";
366}

References g2o::CAT_BOOL, g2o::CAT_DOUBLE, g2o::CAT_FLOAT, g2o::CAT_INT, g2o::CAT_STRING, g2o::CAT_VECTOR_DOUBLE, and g2o::CAT_VECTOR_INT.

Referenced by printHelp().

Member Data Documentation

◆ _args

std::vector<CommandArgument> g2o::CommandArgs::_args
protected

Definition at line 122 of file command_args.h.

Referenced by param(), param(), param(), param(), param(), param(), param(), parseArgs(), parsedParam(), and printHelp().

◆ _banner

std::string g2o::CommandArgs::_banner
protected

Definition at line 125 of file command_args.h.

Referenced by printHelp(), and setBanner().

◆ _leftOvers

std::vector<CommandArgument> g2o::CommandArgs::_leftOvers
protected

Definition at line 123 of file command_args.h.

Referenced by paramLeftOver(), parseArgs(), and printHelp().

◆ _leftOversOptional

std::vector<CommandArgument> g2o::CommandArgs::_leftOversOptional
protected

Definition at line 124 of file command_args.h.

Referenced by paramLeftOver(), parseArgs(), and printHelp().

◆ _progName

std::string g2o::CommandArgs::_progName
protected

Definition at line 126 of file command_args.h.

Referenced by parseArgs(), and printHelp().


The documentation for this class was generated from the following files: