Go to the documentation of this file.
26 #ifndef TCLAP_ARGUMENT_H
27 #define TCLAP_ARGUMENT_H
42 #if defined(HAVE_SSTREAM)
45 #elif defined(HAVE_STRSTREAM)
49 #error "Need a stringstream (sstream or strstream) to compile!"
76 Arg& operator=(
const Arg& rhs);
81 static bool& ignoreRestRef() {
static bool ign =
false;
return ign; }
87 static char& delimiterRef() {
static char delim =
' ';
return delim; }
179 Arg(
const std::string& flag,
180 const std::string& name,
181 const std::string& desc,
196 virtual void addToList( std::list<Arg*>& argList )
const;
206 static bool ignoreRest() {
return ignoreRestRef(); }
212 static char delimiter() {
return delimiterRef(); }
218 static char blankChar() {
return (
char)7; }
224 #ifndef TCLAP_FLAGSTARTCHAR
225 #define TCLAP_FLAGSTARTCHAR '-'
234 #ifndef TCLAP_FLAGSTARTSTRING
235 #define TCLAP_FLAGSTARTSTRING "-"
243 #ifndef TCLAP_NAMESTARTSTRING
244 #define TCLAP_NAMESTARTSTRING "--"
257 static void setDelimiter(
char c ) { delimiterRef() = c; }
266 virtual bool processArg(
int *i, std::vector<std::string>& args) = 0;
278 const std::string&
getFlag()
const;
283 const std::string&
getName()
const;
331 virtual bool argMatches(
const std::string& s )
const;
337 virtual std::string
toString()
const;
343 virtual std::string
shortID(
const std::string& valueId =
"val" )
const;
349 virtual std::string
longID(
const std::string& valueId =
"val" )
const;
358 virtual void trimFlag( std::string& flag, std::string& value )
const;
366 bool _hasBlanks(
const std::string& s )
const;
391 virtual void reset();
415 template<
typename T>
void
416 ExtractValue(T &destVal,
const std::string& strVal, ValueLike vl)
418 static_cast<void>(vl);
422 while ( is.good() ) {
423 if ( is.peek() != EOF )
424 #ifdef TCLAP_SETBASE_ZERO
425 is >> std::setbase(0) >> destVal;
437 "from string '" + strVal +
"'"));
440 if ( valuesRead > 1 )
442 "string '" + strVal +
"'"));
452 template<
typename T>
void
453 ExtractValue(T &destVal,
const std::string& strVal, StringLike sl)
455 static_cast<void>(sl);
463 inline Arg::Arg(
const std::string& flag,
464 const std::string& name,
465 const std::string& desc,
473 _requireLabel(
"required"),
474 _valueRequired(valreq),
479 _acceptsMultipleValues(false)
481 if ( _flag.length() > 1 )
483 "Argument flag can only be one character long", toString() ) );
485 if ( _name != ignoreNameString() &&
496 ( _name.find(
" ", 0 ) != std::string::npos ) )
506 inline std::string
Arg::shortID(
const std::string& valueId )
const
524 inline std::string
Arg::longID(
const std::string& valueId )
const
557 std::string desc =
"";
621 inline void Arg::trimFlag(std::string& flag, std::string& value)
const
624 for (
int i = 0;
static_cast<unsigned int>(i) < flag.length(); i++ )
633 value = flag.substr(stop+1);
634 flag = flag.substr(0,stop);
644 for (
int i = 1;
static_cast<unsigned int>(i) < s.length(); i++ )
667 argList.push_front(
const_cast<Arg*
>(
this) );
void _checkWithVisitor() const
Performs the special handling described by the Visitor.
bool _hasBlanks(const std::string &s) const
Checks whether a given string has blank chars, indicating that it is a combined SwitchArg.
virtual void visit()
Does nothing.
virtual bool allowMore()
Used for MultiArgs and XorHandler to determine whether args can still be set.
const std::string & getName() const
Returns the argument name.
std::list< Arg * >::iterator ArgListIterator
Typedef of an Arg list iterator.
virtual bool operator==(const Arg &a) const
Operator ==.
bool isIgnoreable() const
Indicates whether the argument can be ignored, if desired.
static const std::string flagStartString()
virtual std::string toString() const
Returns a simple string representation of the argument.
virtual std::string shortID(const std::string &valueId="val") const
Returns a short ID for the usage.
bool _ignoreable
Whether this argument can be ignored, if desired.
void SetString(T &dst, const std::string &src)
void ExtractValue(T &destVal, const std::string &strVal, ValueLike vl)
virtual bool acceptsMultipleValues()
Use by output classes to determine whether an Arg accepts multiple values.
static bool ignoreRest()
Whether to ignore the rest.
std::string _requireLabel
Label to be used in usage description.
std::istringstream istringstream
virtual void trimFlag(std::string &flag, std::string &value) const
Trims a value off of the flag.
std::string getDescription() const
Returns the argument description.
static char blankChar()
The char used as a place holder when SwitchArgs are combined.
#define TCLAP_FLAGSTARTCHAR
The char that indicates the beginning of a flag.
std::string _name
A single word namd identifying the argument.
virtual void reset()
Clears the Arg object and allows it to be reused by new command lines.
bool _acceptsMultipleValues
bool _required
Indicating whether the argument is required.
static void setDelimiter(char c)
Sets the delimiter for all arguments.
virtual std::string longID(const std::string &valueId="val") const
Returns a long ID for the usage.
std::string _description
Description of the argument.
virtual ~Arg()
Destructor.
Thrown from within the child Arg classes when it fails to properly parse the argument it has been pas...
std::vector< Arg * >::iterator ArgVectorIterator
Typedef of an Arg vector iterator.
const std::string & getFlag() const
Returns the argument flag.
virtual void addToList(std::list< Arg * > &argList) const
Adds this to the specified list of Args.
bool isSet() const
Indicates whether the argument has already been set.
static void beginIgnoring()
Begin ignoring arguments since the "--" argument was specified.
std::list< Visitor * >::iterator VisitorListIterator
Typedef of a Visitor list iterator.
Visitor * _visitor
A pointer to a visitor object.
#define TCLAP_NAMESTARTSTRING
The sting that indicates the beginning of a name.
void forceRequired()
Sets _required to true.
void xorSet()
Sets the _alreadySet value to true.
static char flagStartChar()
static const std::string nameStartString()
A base class that defines the interface for visitors.
bool _xorSet
Indicates that the arg was set as part of an XOR and not on the command line.
virtual bool argMatches(const std::string &s) const
A method that tests whether a string matches this argument.
void setRequireLabel(const std::string &s)
Sets the requireLabel.
bool isValueRequired() const
Indicates whether a value must be specified for argument.
static char delimiter()
The delimiter that separates an argument flag/name from the value.
Thrown from Arg and CmdLine when an Arg is improperly specified, e.g.
bool _valueRequired
Indicates whether a value is required for the argument.
virtual bool processArg(int *i, std::vector< std::string > &args)=0
Pure virtual method meant to handle the parsing and value assignment of the string on the command lin...
bool _alreadySet
Indicates whether the argument has been set.
static const std::string ignoreNameString()
The name used to identify the ignore rest argument.
std::string _flag
The single char flag used to identify the argument.
#define TCLAP_FLAGSTARTSTRING
The sting that indicates the beginning of a flag.
virtual bool isRequired() const
Indicates whether the argument is required.
A virtual base class that defines the essential data for all arguments.