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;
224#ifndef TCLAP_FLAGSTARTCHAR
225#define TCLAP_FLAGSTARTCHAR '-'
234#ifndef TCLAP_FLAGSTARTSTRING
235#define TCLAP_FLAGSTARTSTRING "-"
243#ifndef TCLAP_NAMESTARTSTRING
244#define TCLAP_NAMESTARTSTRING "--"
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();
415template<
typename T>
void
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 +
"'"));
452template<
typename T>
void
455 static_cast<void>(sl);
463inline 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() ) );
496 (
_name.find(
" ", 0 ) != std::string::npos ) )
557 std::string desc =
"";
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) );
#define TCLAP_FLAGSTARTSTRING
The sting that indicates the beginning of a flag.
#define TCLAP_FLAGSTARTCHAR
The char that indicates the beginning of a flag.
#define TCLAP_NAMESTARTSTRING
The sting that indicates the beginning of a name.
Thrown from within the child Arg classes when it fails to properly parse the argument it has been pas...
A virtual base class that defines the essential data for all arguments.
static char blankChar()
The char used as a place holder when SwitchArgs are combined.
void _checkWithVisitor() const
Performs the special handling described by the Visitor.
bool _acceptsMultipleValues
virtual ~Arg()
Destructor.
bool isSet() const
Indicates whether the argument has already been set.
virtual std::string longID(const std::string &valueId="val") const
Returns a long ID for the usage.
static const std::string nameStartString()
static void beginIgnoring()
Begin ignoring arguments since the "--" argument was specified.
std::string _requireLabel
Label to be used in usage description.
bool _hasBlanks(const std::string &s) const
Checks whether a given string has blank chars, indicating that it is a combined SwitchArg.
static bool ignoreRest()
Whether to ignore the rest.
bool isIgnoreable() const
Indicates whether the argument can be ignored, if desired.
void forceRequired()
Sets _required to true.
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...
const std::string & getFlag() const
Returns the argument flag.
static const std::string ignoreNameString()
The name used to identify the ignore rest argument.
bool _valueRequired
Indicates whether a value is required for the argument.
bool isValueRequired() const
Indicates whether a value must be specified for argument.
static char flagStartChar()
bool _alreadySet
Indicates whether the argument has been set.
bool _ignoreable
Whether this argument can be ignored, if desired.
std::string _description
Description of the argument.
virtual void addToList(std::list< Arg * > &argList) const
Adds this to the specified list of Args.
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.
Visitor * _visitor
A pointer to a visitor object.
static char delimiter()
The delimiter that separates an argument flag/name from the value.
void setRequireLabel(const std::string &s)
Sets the requireLabel.
std::string getDescription() const
Returns the argument description.
bool _xorSet
Indicates that the arg was set as part of an XOR and not on the command line.
virtual void reset()
Clears the Arg object and allows it to be reused by new command lines.
std::string _name
A single word namd identifying the argument.
virtual bool argMatches(const std::string &s) const
A method that tests whether a string matches this argument.
static void setDelimiter(char c)
Sets the delimiter for all arguments.
bool _required
Indicating whether the argument is required.
virtual bool acceptsMultipleValues()
Use by output classes to determine whether an Arg accepts multiple values.
virtual void trimFlag(std::string &flag, std::string &value) const
Trims a value off of the flag.
virtual std::string toString() const
Returns a simple string representation of the argument.
std::string _flag
The single char flag used to identify the argument.
void xorSet()
Sets the _alreadySet value to true.
virtual bool isRequired() const
Indicates whether the argument is required.
virtual std::string shortID(const std::string &valueId="val") const
Returns a short ID for the usage.
virtual bool operator==(const Arg &a) const
Operator ==.
static const std::string flagStartString()
Thrown from Arg and CmdLine when an Arg is improperly specified, e.g.
A base class that defines the interface for visitors.
virtual void visit()
Does nothing.
std::vector< Arg * >::iterator ArgVectorIterator
Typedef of an Arg vector iterator.
std::list< Visitor * >::iterator VisitorListIterator
Typedef of a Visitor list iterator.
std::istringstream istringstream
void SetString(T &dst, const std::string &src)
std::list< Arg * >::iterator ArgListIterator
Typedef of an Arg list iterator.
void ExtractValue(T &destVal, const std::string &strVal, ValueLike vl)
A string like argument value type is a value that can be set using operator=(string).
A value like argument value type is a value that can be set using operator>>.