#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(); }
};
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
REQUIRED_ARG
};
- class Option
+ class MSPCORE_API Option
{
protected:
Option() = default;
virtual unsigned get_seen_count() const = 0;
};
- class Argument
+ class MSPCORE_API Argument
{
protected:
Argument() = default;
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 &);
};
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; }
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); }
};
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)); }
};