pktools  2.6.7
Processing Kernel for geospatial data
Public Member Functions | Static Public Member Functions | Friends | List of all members
Optionpk< T > Class Template Reference

#include <Optionpk.h>

Inheritance diagram for Optionpk< T >:
Inheritance graph
[legend]
Collaboration diagram for Optionpk< T >:
Collaboration graph
[legend]

Public Member Functions

 Optionpk ()
 default constructor
 
 Optionpk (const std::string &shortName, const std::string &longName, const std::string &helpInfo)
 constructor for option without default value More...
 
 Optionpk (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const T &defaultValue, short hide=0)
 constructor for option with default value. Option can be hidden for help info More...
 
 ~Optionpk ()
 default destructor
 
void setHelp (const std::string &helpInfo)
 set help information
 
void setHide (short hide)
 hide option from short help -h (1) or make invisible to short and long help –help (2)
 
bool retrieveOption (int argc, const std::vector< std::string > &argv)
 read option from command line (use for all options!), std::string implementation More...
 
bool retrieveOption (int argc, char **argv)
 read option from command line (use for all options!) More...
 
void setAll (const std::string &shortName, const std::string &longName, const std::string &helpInfo)
 set all attributes of the option, except default and hide
 
void setAll (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const T &defaultValue, short hide)
 set all attributes of the option
 
void setDefault (const T &defaultValue)
 set a default value for the option
 
std::string getDefaultValue () const
 
void setShortName (const std::string &shortName)
 set the short name to be used as -shortName
 
void setLongName (const std::string &longName)
 set the long name to be used as –longName
 
std::string getShortName () const
 get the short name to be used as -shortName
 
std::string getLongName () const
 get the long name to be used as –longName
 
std::string getHelp () const
 get help info stored in m_help
 
std::vector< T >::const_iterator findSubstring (const T &argument) const
 
template<>
void setAll (const std::string &shortName, const std::string &longName, const std::string &helpInfo)
 specialization for bool
 
template<>
void setAll (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)
 specialization for bool
 
template<>
 Optionpk (const std::string &shortName, const std::string &longName, const std::string &helpInfo)
 specialization for bool
 
template<>
 Optionpk (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)
 specialization for bool
 
template<>
std::vector< std::string >::const_iterator findSubstring (const std::string &argument) const
 

Static Public Member Functions

static std::string getGPLv3License ()
 get license info
 

Friends

template<class T1 >
std::ostream & operator<< (std::ostream &os, const Optionpk< T1 > &theOption)
 print values for this option
 

Detailed Description

template<class T>
class Optionpk< T >

Class to implement command line options. With the constructor you can define an option, in both short - and long -- format, of a specific type, help information and a default value.
This class inherits from std::vector, so the option variable is a vector, supporting multiple inputs for the same option (e.g., –input file1 [–input file2 ...]. Several command line option formats are supported:

Option names should have regular characters and no white space in them. Some names are reserved and can not be used either:

A call to member function retrieveOption reads the command line arguments and initializes the object (vector). Make sure to call this member function before using the option object in your main program (or a segmentation error due to an un-initialized vector will occur).

All calls to retrieveOption should reside in a try{} block. If one of the reserved options

Similarly, if help is invoked with the short option -h or long option --help, the main program is informed by the return value false of retrieveOption (for any option). An example how to use Optionpk is shown in pktestOption.cc

Definition at line 106 of file Optionpk.h.

Constructor & Destructor Documentation

◆ Optionpk() [1/2]

template<class T >
Optionpk< T >::Optionpk ( const std::string &  shortName,
const std::string &  longName,
const std::string &  helpInfo 
)
inline

constructor for option without default value

constructor without default value
shortName is option invoked with -
longName is option invoked with --
helpInfo is the help message that is shown when option -h or –help is invoked

Definition at line 211 of file Optionpk.h.

212 : m_hasDefault(false)
213 {
214  setAll(shortName,longName,helpInfo);
215 }
void setAll(const std::string &shortName, const std::string &longName, const std::string &helpInfo)
set all attributes of the option, except default and hide
Definition: Optionpk.h:283

◆ Optionpk() [2/2]

template<class T >
Optionpk< T >::Optionpk ( const std::string &  shortName,
const std::string &  longName,
const std::string &  helpInfo,
const T &  defaultValue,
short  hide = 0 
)
inline

constructor for option with default value. Option can be hidden for help info

constructor with default value.
shortName is option invoked with -
longName is option invoked with --
helpInfo is the help message that is shown when option -h or –help is invoked
defaultValue is default value of the option (first value of vector: option[0])
hide=0 : option is visible for in both short (-h). Typical use: mandatory options
hide=1 : option is only visible in long help (--help). Typical use: expert options
hide=2 : option is hidden for user. Typical use: Easter eggs or options only known to author

Definition at line 227 of file Optionpk.h.

228 {
229  setAll(shortName,longName,helpInfo,defaultValue, hide);
230 }
void setAll(const std::string &shortName, const std::string &longName, const std::string &helpInfo)
set all attributes of the option, except default and hide
Definition: Optionpk.h:283

Member Function Documentation

◆ findSubstring()

template<class T>
std::vector<T>::const_iterator Optionpk< T >::findSubstring ( const T &  argument) const
inline

find substring in options of type string (e.g., -co INTERLEAVE=BAND) this template function only makes sense for T=std::string (implemented via a specialization)

Definition at line 162 of file Optionpk.h.

162 {std::string errorString="Error: findSubstring only defined for options of type std::string"; throw(errorString);};

◆ retrieveOption() [1/2]

template<class T >
bool Optionpk< T >::retrieveOption ( int  argc,
const std::vector< std::string > &  argv 
)
inline

read option from command line (use for all options!), std::string implementation

make sure to call this function first before using the option in main program (or segmentation fault will occur...)

Definition at line 311 of file Optionpk.h.

311  {
312  bool noHelp=true;//return value, alert main program that hard coded option (help, version, license, doxygen) was invoked
313  std::string helpStringShort="-h";//short option for help (hard coded)
314  std::string helpStringLong="--help";//long option for help (hard coded)
315  std::string helpStringDoxygen="--doxygen";//option to create table of options ready to use for doxygen
316  std::string versionString="--version";//option to show current version
317  std::string licenseString="--license";//option to show current version
318  for(int i = 1; i < argc; ++i ){
319  std::string currentArgument;
320  std::string currentOption=argv[i];
321  std::string shortOption=m_shortName;
322  std::string longOption=m_longName;
323  shortOption.insert(0,"-");
324  longOption.insert(0,"--");
325  size_t foundEqual=currentOption.rfind("=");
326  if(foundEqual!=std::string::npos){
327  currentArgument=currentOption.substr(foundEqual+1);
328  currentOption=currentOption.substr(0,foundEqual);
329  }
330  if(!helpStringShort.compare(currentOption)){
331  if(m_hide<1)
332  std::cout << usage() << std::endl;
333  noHelp=false;
334  }
335  else if(!helpStringLong.compare(currentOption)){
336  if(m_hide<2)
337  std::cout << usage() << std::endl;
338  noHelp=false;
339  }
340  else if(!helpStringDoxygen.compare(currentOption)){
341  if(m_hide<2)
342  std::cout << usageDoxygen() << std::endl;
343  noHelp=false;
344  }
345  else if(!versionString.compare(currentOption)){
346  std::string theVersion="version ";
347  theVersion+=VERSION;
348  theVersion+=", Copyright (C) Pieter Kempeneers.\n\
349  This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n \
350  This is free software, and you are welcome to redistribute it\n \
351  under certain conditions; use option --license for details.";
352  throw(theVersion);//no need to continue registering (break prevents from multiplication of version info)
353  }
354  else if(!licenseString.compare(currentOption)){
355  throw(getGPLv3License());
356  }
357  if(hasShortOption()&&!(shortOption.compare(currentOption))){//for -option
358  if(foundEqual!=std::string::npos)
359  this->push_back(string2type<T>(currentArgument));
360  else if(m_hasArgument && i < argc-1)
361  this->push_back(string2type<T>(argv[++i]));
362  else
363  this->push_back(string2type<T>("1"));
364  }
365  else if(hasLongOption()&&!(longOption.compare(currentOption))){//for --option
366  if(foundEqual!=std::string::npos)
367  this->push_back(string2type<T>(currentArgument));
368  else if(m_hasArgument && i < argc-1)
369  this->push_back(string2type<T>(argv[++i]));
370  else
371  this->push_back(string2type<T>("1"));
372  }
373  }
374  if(!(this->size())&&m_hasDefault)//only set default value if no options were given
375  this->push_back(m_defaultValue);
376  return(noHelp);
377 }
static std::string getGPLv3License()
get license info
Definition: Optionpk.h:145

◆ retrieveOption() [2/2]

template<class T >
bool Optionpk< T >::retrieveOption ( int  argc,
char **  argv 
)
inline

read option from command line (use for all options!)

make sure to call this function first before using the option in main program (or segmentation fault will occur...)

Definition at line 382 of file Optionpk.h.

382  {
383  bool noHelp=true;//return value, alert main program that hard coded option (help, version, license, doxygen) was invoked
384  std::string helpStringShort="-h";//short option for help (hard coded)
385  std::string helpStringLong="--help";//long option for help (hard coded)
386  std::string helpStringDoxygen="--doxygen";//option to create table of options ready to use for doxygen
387  std::string versionString="--version";//option to show current version
388  std::string licenseString="--license";//option to show current version
389  for(int i = 1; i < argc; ++i ){
390  std::string currentArgument;
391  std::string currentOption=argv[i];
392  std::string shortOption=m_shortName;
393  std::string longOption=m_longName;
394  shortOption.insert(0,"-");
395  longOption.insert(0,"--");
396  size_t foundEqual=currentOption.rfind("=");
397  if(foundEqual!=std::string::npos){
398  currentArgument=currentOption.substr(foundEqual+1);
399  currentOption=currentOption.substr(0,foundEqual);
400  }
401  if(!helpStringShort.compare(currentOption)){
402  if(m_hide<1)
403  std::cout << usage() << std::endl;
404  noHelp=false;
405  }
406  else if(!helpStringLong.compare(currentOption)){
407  if(m_hide<2)
408  std::cout << usage() << std::endl;
409  noHelp=false;
410  }
411  else if(!helpStringDoxygen.compare(currentOption)){
412  if(m_hide<2)
413  std::cout << usageDoxygen() << std::endl;
414  noHelp=false;
415  }
416  else if(!versionString.compare(currentOption)){
417  std::string theVersion="version ";
418  theVersion+=VERSION;
419  theVersion+=", Copyright (C) Pieter Kempeneers.\n\
420  This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n \
421  This is free software, and you are welcome to redistribute it\n \
422  under certain conditions; use option --license for details.";
423  throw(theVersion);//no need to continue registering (break prevents from multiplication of version info)
424  }
425  else if(!licenseString.compare(currentOption)){
426  throw(getGPLv3License());
427  }
428  if(hasShortOption()&&!(shortOption.compare(currentOption))){//for -option
429  if(foundEqual!=std::string::npos)
430  this->push_back(string2type<T>(currentArgument));
431  else if(m_hasArgument && i < argc-1)
432  this->push_back(string2type<T>(argv[++i]));
433  else
434  this->push_back(string2type<T>("1"));
435  }
436  else if(hasLongOption()&&!(longOption.compare(currentOption))){//for --option
437  if(foundEqual!=std::string::npos)
438  this->push_back(string2type<T>(currentArgument));
439  else if(m_hasArgument && i < argc-1)
440  this->push_back(string2type<T>(argv[++i]));
441  else
442  this->push_back(string2type<T>("1"));
443  }
444  }
445  if(!(this->size())&&m_hasDefault)//only set default value if no options were given
446  this->push_back(m_defaultValue);
447  return(noHelp);
448 }
static std::string getGPLv3License()
get license info
Definition: Optionpk.h:145

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