Cleanup exceptions.
authorRafał Długołęcki <rafal@dlugolecki.net.pl>
Sat, 9 May 2015 14:32:26 +0000 (16:32 +0200)
committerRafał Długołęcki <rafal@dlugolecki.net.pl>
Sat, 9 May 2015 14:32:26 +0000 (16:32 +0200)
include/command.h
include/exception/missingOptionValue.h
include/exception/missingRequiredParameter.h [new file with mode: 0644]
include/exception/optionFailedConversion.h

index 98db4296656221361f8579f028a410417b560ac8..0cbb3d6eba84d4a02c1391f316f710de189c1514 100644 (file)
@@ -6,6 +6,7 @@
 #include <typeinfo>
 
 #include "parameter.h"
+#include "exception/missingRequiredParameter.h"
 
 namespace command {
     /**
@@ -29,11 +30,11 @@ namespace command {
             try {
                 matchArguments(argc, argv);
             }
-            catch(std::invalid_argument exception) {
+            catch(const std::invalid_argument & exception) {
                 releaseMemory();
                 throw;
             }
-            catch(std::logic_error exception) {
+            catch(const std::logic_error & exception) {
                 releaseMemory();
                 throw;
             }
@@ -60,7 +61,7 @@ namespace command {
             }
             for(Parameter *param : parameters) {
                 if (param->isRequired() && !param->isUsed()) {
-                    throw std::logic_error(param->describe() + " is required but it was not passed");
+                    throw MissingRequiredParameter(param->describe() + " is required but it was not passed");
                 }
             }
         }
index c3050054b4e1810f395e70e10beffcc027ab633d..15d9313d97bed76c192347bca708b8ba4da65202 100644 (file)
@@ -7,21 +7,17 @@
 namespace command {
 
 /**
- * Helper template class used for releasing resources.
+ * Exception thrown used when Option should have value, but no one has been set
  */
 class MissingOptionValue : public std::invalid_argument {
-private:
-    std::string message;
 public:
+    /** \inheritdoc */
     explicit MissingOptionValue(const std::string& what_arg) :
-        std::invalid_argument(what_arg), message(what_arg) { }
+        std::invalid_argument(what_arg) { }
 
+    /** \inheritdoc */
     explicit MissingOptionValue(const char* what_arg) :
-        std::invalid_argument(what_arg), message(what_arg) { }
-
-    virtual const char* what() const throw() {
-        return message.c_str();
-    }
+        std::invalid_argument(what_arg) { }
 };
 
 }
diff --git a/include/exception/missingRequiredParameter.h b/include/exception/missingRequiredParameter.h
new file mode 100644 (file)
index 0000000..9bc1a41
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef __COMMAND_EXCEPTION_MISSING_REQUIRED_PARAMETER_H
+#define __COMMAND_EXCEPTION_MISSING_REQUIRED_PARAMETER_H
+
+#include <stdexcept>
+#include <string>
+
+namespace command {
+
+/**
+ * Exception thrown when required argument was not set
+ */
+class MissingRequiredParameter : public std::logic_error {
+public:
+    /** \inheritdoc */
+    explicit MissingRequiredParameter(const std::string& what_arg) :
+        std::logic_error(what_arg) { }
+
+    /** \inheritdoc */
+    explicit MissingRequiredParameter(const char* what_arg) :
+        std::logic_error(what_arg) { }
+};
+
+}
+
+#endif /* __COMMAND_EXCEPTION_MISSING_REQUIRED_PARAMETER_H */
index e4004f943a9a1b740beb881cafe5d15d4a52f35a..335aaac2a2c787795f580d5394e8af95d54b23a4 100644 (file)
@@ -7,21 +7,20 @@
 namespace command {
 
 /**
- * Helper template class used for releasing resources.
+ * Exception thrown used when Option's value failed conversion to specific type
+ *
+ * e.g.:
+ *  "a" -> int
  */
 class OptionFailedConversion : public std::invalid_argument {
-protected:
-    std::string message;
 public:
+    /** \inheritdoc */
     explicit OptionFailedConversion(const std::string& what_arg) :
-        std::invalid_argument(what_arg), message(what_arg) { }
+        std::invalid_argument(what_arg) { }
 
+    /** \inheritdoc */
     explicit OptionFailedConversion(const char* what_arg) :
-        std::invalid_argument(what_arg), message(what_arg) { }
-
-    virtual const char* what() const throw() {
-        return message.c_str();
-    }
+        std::invalid_argument(what_arg) { }
 };
 
 }