dlugolecki.net.pl
Dziennik
Polecane
Software
projects
/
command.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update require text.
[command.git]
/
include
/
option.h
diff --git
a/include/option.h
b/include/option.h
index a77d8f446d19f179b9799ae5f7393d23c4240042..935914e86112dca86c6e8bf5fad935785773c843 100644
(file)
--- a/
include/option.h
+++ b/
include/option.h
@@
-10,7
+10,7
@@
namespace command {
/**
* Class responsible for handling commandline options.
namespace command {
/**
* Class responsible for handling commandline options.
- * Options are n
on-required, n
amed parameters of program.
+ * Options are named parameters of program.
*
* Example:
* ./myprog OptionName=OptionValue
*
* Example:
* ./myprog OptionName=OptionValue
@@
-26,16
+26,13
@@
namespace command {
/**
* Current Option name
*/
/**
* Current Option name
*/
- OptionName name;
+
const
OptionName name;
/**
* Current Option value
*/
OptionType value;
/**
* Current Option value
*/
OptionType value;
- /** Variable indicating if current Option was already used or not */
- bool used = false;
-
public:
/**
* Default constructor.
public:
/**
* Default constructor.
@@
-44,7
+41,7
@@
namespace command {
* @param description Description of current Option
* @param function Function used to handle current Option.
*/
* @param description Description of current Option
* @param function Function used to handle current Option.
*/
- Option(
std::string
name, const std::string & description, void (*function)(OptionType))
+ Option(
const std::string &
name, const std::string & description, void (*function)(OptionType))
: Parameter(description), Callable<OptionType>(function), name(name) {
}
: Parameter(description), Callable<OptionType>(function), name(name) {
}
@@
-87,18
+84,21
@@
namespace command {
* @throw std::invalid_argument when OptionValue part failed conversion
* to OptionType
*/
* @throw std::invalid_argument when OptionValue part failed conversion
* to OptionType
*/
- virtual bool understand(const std::string & argv) {
- if ((!used) &&
- (argv.find(name) == 0)) {
+ virtual bool understand(const std::string & argv)
+ throw(std::invalid_argument) {
+
+ if ((!isUsed()) && (argv.find(name) == 0)) {
std::size_t pos = argv.find("=");
std::size_t pos = argv.find("=");
+
if (pos != name.size()) {
throw std::invalid_argument("Option: " + name + " requires value but no one has been provided");
}
std::stringstream ss;
if (pos != name.size()) {
throw std::invalid_argument("Option: " + name + " requires value but no one has been provided");
}
std::stringstream ss;
-
ss << argv.substr(pos + 1);
ss << argv.substr(pos + 1);
- ss >> value;
+ ss >> value;// memory leak? when uncommented and exception is
+ // thrown, valgrind shows e.g.:
+ // possibly lost: 380 bytes in 7 blocks
if (ss.fail()) {
throw std::invalid_argument("Value for option: " + name + " failed conversion to the required type");
if (ss.fail()) {
throw std::invalid_argument("Value for option: " + name + " failed conversion to the required type");
@@
-132,11
+132,7
@@
namespace command {
/**
* Current Option name
*/
/**
* Current Option name
*/
- OptionName name;
-
- /** Variable indicating if current Option was already used or not */
- bool used = false;
-
+ const OptionName name;
public:
/**
* Default constructor.
public:
/**
* Default constructor.
@@
-145,15
+141,10
@@
namespace command {
* @param description Description of current Option
* @param function Function used to handle current Option.
*/
* @param description Description of current Option
* @param function Function used to handle current Option.
*/
- Option(
std::string
name, const std::string & description, void (*function)(void))
+ Option(
const std::string &
name, const std::string & description, void (*function)(void))
: Parameter(description), Callable<void>(function), name(name) {
}
: Parameter(description), Callable<void>(function), name(name) {
}
- /**
- *
- */
- virtual ~Option() { }
-
/**
*
*/
/**
*
*/
@@
-177,7
+168,7
@@
namespace command {
* used to check against next value.
*/
virtual bool understand(const std::string & argv) {
* used to check against next value.
*/
virtual bool understand(const std::string & argv) {
- if ((!
used
) &&
+ if ((!
isUsed()
) &&
(argv == name)) {
used = true;
return true;
(argv == name)) {
used = true;
return true;