]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/getopt.h
Add move semantics to Variant
[libs/core.git] / source / core / getopt.h
index ed6cf86195d2419cf7e3b579e470b64e242bc0bd..59c810c5e4a5ff4182cd42d9736f8af9d708eae9 100644 (file)
@@ -6,20 +6,20 @@
 #include <string>
 #include <vector>
 #include <msp/strings/lexicalcast.h>
+#include "mspcore_api.h"
 #include "noncopyable.h"
 
 namespace Msp {
 
-class usage_error: public std::runtime_error
+class MSPCORE_API usage_error: public std::runtime_error
 {
 private:
        std::string m_help;
 
 public:
        usage_error(const std::string &w, const std::string &h = std::string()): std::runtime_error(w), m_help(h) { }
-       virtual ~usage_error() throw() = default;
 
-       const char *help() const throw() { return m_help.c_str(); }
+       const char *help() const noexcept { return m_help.c_str(); }
 };
 
 
@@ -59,7 +59,7 @@ A built-in --help option is provided and will output a list of options,
 arguments and their associated help texts.  An application may override this by
 providing its own option with the same name.
 */
-class GetOpt: private NonCopyable
+class MSPCORE_API GetOpt: private NonCopyable
 {
 public:
        enum ArgType
@@ -69,7 +69,7 @@ public:
                REQUIRED_ARG
        };
 
-       class Option
+       class MSPCORE_API Option
        {
        protected:
                Option() = default;
@@ -89,7 +89,7 @@ public:
                virtual unsigned get_seen_count() const = 0;
        };
 
-       class Argument
+       class MSPCORE_API Argument
        {
        protected:
                Argument() = default;
@@ -121,24 +121,24 @@ private:
                std::string lng;
                ArgType arg_type = NO_ARG;
                unsigned seen_count = 0;
-               unsigned *ext_seen_count = 0;
+               unsigned *ext_seen_count = nullptr;
                std::string help;
                std::string metavar = "ARG";
-               Store *store = 0;
+               Store *store = nullptr;
 
        public:
                OptionImpl(char, const std::string &, const Store &, ArgType);
-               virtual ~OptionImpl();
+               ~OptionImpl() override;
 
-               virtual OptionImpl &set_help(const std::string &);
-               virtual OptionImpl &set_help(const std::string &, const std::string &);
-               virtual OptionImpl &bind_seen_count(unsigned &);
+               OptionImpl &set_help(const std::string &) override;
+               OptionImpl &set_help(const std::string &, const std::string &) override;
+               OptionImpl &bind_seen_count(unsigned &) override;
                char get_short() const { return shrt; }
                const std::string &get_long() const { return lng; }
                ArgType get_arg_type() const { return arg_type; }
                const std::string &get_help() const { return help; }
                const std::string &get_metavar() const { return metavar; }
-               virtual unsigned get_seen_count() const { return seen_count; }
+               unsigned get_seen_count() const override { return seen_count; }
                void process();
                void process(const std::string &);
        };
@@ -149,13 +149,13 @@ private:
                std::string name;
                ArgType type = REQUIRED_ARG;
                std::string help;
-               Store *store = 0;
+               Store *store = nullptr;
 
        public:
                ArgumentImpl(const std::string &, const Store &, ArgType);
-               virtual ~ArgumentImpl();
+               ~ArgumentImpl() override;
 
-               virtual ArgumentImpl &set_help(const std::string &);
+               ArgumentImpl &set_help(const std::string &) override;
                const std::string &get_name() const { return name; }
                ArgType get_type() const { return type; }
                const std::string &get_help() const { return help; }
@@ -172,14 +172,14 @@ private:
        public:
                SimpleStore(T &d): data(d) { }
 
-               virtual SimpleStore *clone() const
+               SimpleStore *clone() const override
                { return new SimpleStore(data); }
 
-               virtual bool is_list() const { return false; }
+               bool is_list() const override { return false; }
 
-               virtual void store() { }
+               void store() override { }
 
-               virtual void store(const std::string &a)
+               void store(const std::string &a) override
                { data = lexical_cast<T>(a); }
        };
 
@@ -192,14 +192,14 @@ private:
        public:
                ListStore(T &d): data(d) { }
 
-               virtual ListStore *clone() const
+               ListStore *clone() const override
                { return new ListStore(data); }
 
-               virtual bool is_list() const { return true; }
+               bool is_list() const override { return true; }
 
-               virtual void store() { }
+               void store() override { }
 
-               virtual void store(const std::string &a)
+               void store(const std::string &a) override
                { data.push_back(lexical_cast<typename T::value_type>(a)); }
        };