X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Fgetopt.h;h=575184f3400b2699cf3ba078a90633550ffd9e6d;hp=3b579a664feff1caec0786de762b305647e5fe78;hb=HEAD;hpb=817e584903996a041692640720a5a272d847a3c7 diff --git a/source/core/getopt.h b/source/core/getopt.h index 3b579a6..59c810c 100644 --- a/source/core/getopt.h +++ b/source/core/getopt.h @@ -6,20 +6,20 @@ #include #include #include +#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 help_; + std::string m_help; public: - usage_error(const std::string &w, const std::string &h = std::string()): std::runtime_error(w), help_(h) { } - ~usage_error() throw() { } + usage_error(const std::string &w, const std::string &h = std::string()): std::runtime_error(w), m_help(h) { } - const char *help() const throw() { return 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,12 +69,12 @@ public: REQUIRED_ARG }; - class Option + class MSPCORE_API Option { protected: - Option() { } + Option() = default; public: - virtual ~Option() { } + virtual ~Option() = default; /// Sets help text for the option. virtual Option &set_help(const std::string &) = 0; @@ -89,12 +89,12 @@ public: virtual unsigned get_seen_count() const = 0; }; - class Argument + class MSPCORE_API Argument { protected: - Argument() { } + Argument() = default; public: - virtual ~Argument() { } + virtual ~Argument() = default; virtual Argument &set_help(const std::string &) = 0; }; @@ -103,9 +103,9 @@ private: class Store { protected: - Store() { } + Store() = default; public: - virtual ~Store() { } + virtual ~Store() = default; virtual Store *clone() const = 0; @@ -117,28 +117,28 @@ private: class OptionImpl: public Option { protected: - char shrt; + char shrt = 0; std::string lng; - ArgType arg_type; - unsigned seen_count; - unsigned *ext_seen_count; + ArgType arg_type = NO_ARG; + unsigned seen_count = 0; + unsigned *ext_seen_count = nullptr; std::string help; - std::string metavar; - Store *store; + std::string metavar = "ARG"; + 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 &); }; @@ -147,15 +147,15 @@ private: { private: std::string name; - ArgType type; + ArgType type = REQUIRED_ARG; std::string help; - Store *store; + 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(a); } }; @@ -192,23 +192,20 @@ 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(a)); } }; - typedef std::list OptionList; - typedef std::list ArgumentList; - - bool help; - OptionList opts; - ArgumentList args; + bool help = false; + std::vector opts; + std::vector args; std::vector args_raw; public: