pktools  2.6.6
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, 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)
 
template<>
void setAll (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)
 
template<>
 Optionpk (const std::string &shortName, const std::string &longName, const std::string &helpInfo)
 
template<>
 Optionpk (const std::string &shortName, const std::string &longName, const std::string &helpInfo, const bool &defaultValue, short hide)
 
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

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 209 of file Optionpk.h.

210 : m_hasDefault(false)
211 {
212  setAll(shortName,longName,helpInfo);
213 }
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:277
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 225 of file Optionpk.h.

226 {
227  setAll(shortName,longName,helpInfo,defaultValue, hide);
228 }
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:277

Member Function Documentation

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 160 of file Optionpk.h.

160 {std::string errorString="Error: findSubstring only defined for options of type std::string"; throw(errorString);};
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 305 of file Optionpk.h.

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

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