Add Grouped behaviour.
[command.git] / include / option.h
index d66164d38d6f622e7f81440c5ba4845bcd4e6a7a..7e9917b589c7021a0c5852695e90eecb5fa36908 100644 (file)
@@ -89,8 +89,7 @@ namespace command {
          *  to ParameterType
          */
         virtual bool understand(const std::string & argv) {
-
-            if (argv.find(name) == 0) {
+            if (this->hasName(argv)) {
                 std::size_t pos = this->valuePosition(argv);
 
                 if (pos != name.size()) {
@@ -98,11 +97,11 @@ namespace command {
                 }
 
                 std::stringstream ss;
-                ss << argv.substr(pos + 1);
+                ss << std::fixed << argv.substr(pos + 1);
                 ss >> value;
 
                 if (ss.fail()) {
-                    throw OptionFailedConversion("Value for option: " + name + " failed conversion to the required type");
+                    throw OptionFailedConversion("Option: " + name + " failed value conversion to the required type");
                 }
 
                 return true;
@@ -116,12 +115,17 @@ namespace command {
         virtual unsigned int valuePosition(const std::string & value) {
             std::size_t pos = value.find("=");
 
-            if (pos == std::string::npos) {
-                throw OptionValueNotSpecified("Option: " + name + " requires value to be specified using equal sign");
+            if ((this->hasName(value)) && (pos == std::string::npos)) {
+                throw OptionValueNotSpecified("Option: " + name + " requires value to be specified after equal sign, but no equal sign was found");
             }
 
             return pos;
         }
+
+    protected:
+        bool hasName(const std::string & argv) {
+            return argv.find(name) == 0;
+        }
     };
 
     /**