namespace command {
/**
* Class responsible for handling commandline options.
- * Options are non-required, named parameters of program.
+ * Options are named parameters of program.
*
* Example:
* ./myprog OptionName=OptionValue
* ./myprog -f=/some/file
* ./myprog --level=15
*/
- template<typename OptionType>
+ template<typename ParameterType>
class Option
- : public Parameter, public Callable<OptionType> {
+ : public Parameter, public Callable<ParameterType> {
public:
typedef std::string OptionName;
protected:
/**
* Current Option value
*/
- OptionType value;
-
- /** Variable indicating if current Option was already used or not */
- bool used = false;
+ ParameterType value;
public:
/**
* @param description Description of current Option
* @param function Function used to handle current Option.
*/
- Option(const std::string & name, const std::string & description, void (*function)(OptionType))
- : Parameter(description), Callable<OptionType>(function), name(name) {
+ Option(const std::string & name, const std::string & description, void (*function)(ParameterType))
+ : Parameter(description), Callable<ParameterType>(function), name(name) {
}
/**
* If no equal sign is after OptionName part,
* std::invalid_argument exception with appropriate message is thrown
*
- * If conversion of OptionValue part to OptionType failed,
+ * If conversion of OptionValue part to ParameterType failed,
* std::invalid_argument exception with appropriate message is thrown
*
* @param argv command line value against which test will be made.
*
* @return If passed argv succesfully detected OptionName part as a
* current option and its OptionValue part has been succesfully
- * converted to OptionType, returns true and Option is set as used one.
+ * converted to ParameterType, returns true and Option is set as used one.
* Otherwise returns false and can be used to check against next value.
*
* @throw std::invalid_argument when OptionName part has no equal sign
* after itself
* @throw std::invalid_argument when OptionValue part failed conversion
- * to OptionType
+ * to ParameterType
*/
virtual bool understand(const std::string & argv)
throw(std::invalid_argument) {
- if ((!used) && (argv.find(name) == 0)) {
+ if ((!isUsed()) && (argv.find(name) == 0)) {
std::size_t pos = argv.find("=");
if (pos != name.size()) {
std::stringstream ss;
ss << argv.substr(pos + 1);
- ss >> value;// memory leak? when is uncommented, and exception is
+ ss >> value;// memory leak? when uncommented and exception is
// thrown, valgrind shows e.g.:
// possibly lost: 380 bytes in 7 blocks
* Current Option name
*/
const OptionName name;
-
- /** Variable indicating if current Option was already used or not */
- bool used = false;
-
public:
/**
* Default constructor.
* used to check against next value.
*/
virtual bool understand(const std::string & argv) {
- if ((!used) &&
+ if ((!isUsed()) &&
(argv == name)) {
used = true;
return true;