/* */ #ifndef _D_NAME_MATCH_OPTION_HANDLER_H_ #define _D_NAME_MATCH_OPTION_HANDLER_H_ #include "OptionHandler.h" #include #include #include #include #include "A2STR.h" #include "Util.h" #include "OptionHandlerException.h" #define NO_DESCRIPTION A2STR::NIL #define NO_DEFAULT_VALUE A2STR::NIL namespace aria2 { class Option; class NameMatchOptionHandler : public OptionHandler { protected: std::string _optName; std::string _description; std::string _defaultValue; std::deque _tags; int _id; OptionHandler::ARG_TYPE _argType; char _shortName; bool _hidden; virtual void parseArg(Option& option, const std::string& arg) = 0; public: NameMatchOptionHandler(const std::string& optName, const std::string& description = NO_DESCRIPTION, const std::string& defaultValue = NO_DEFAULT_VALUE, ARG_TYPE argType = REQ_ARG, char shortName = 0): _optName(optName), _description(description), _defaultValue(defaultValue), _id(0), _argType(argType), _shortName(shortName), _hidden(false) {} virtual ~NameMatchOptionHandler() {} virtual bool canHandle(const std::string& optName) { return strcasecmp(_optName.c_str(), optName.c_str()) == 0; } virtual void parse(Option& option, const std::string& arg) { try { parseArg(option, arg); } catch(Exception& e) { throw OPTION_HANDLER_EXCEPTION2(_optName, e); } } virtual bool hasTag(const std::string& tag) const { return std::find(_tags.begin(), _tags.end(), tag) != _tags.end(); } virtual void addTag(const std::string& tag) { _tags.push_back(tag); } virtual std::string toTagString() const { std::stringstream s; std::copy(_tags.begin(), _tags.end(), std::ostream_iterator(s, ",")); return util::trim(s.str(), ", "); } virtual const std::string& getName() const { return _optName; } virtual const std::string& getDescription() const { return _description; } virtual const std::string& getDefaultValue() const { return _defaultValue; } virtual bool isHidden() const { return _hidden; } virtual void hide() { _hidden = true; } virtual char getShortName() const { return _shortName; } virtual int getOptionID() const { return _id; } virtual void setOptionID(int id) { _id = id; } virtual OptionHandler::ARG_TYPE getArgType() const { return _argType; } }; typedef SharedHandle NameMatchOptionHandlerHandle; } // namespace aria2 #endif // _D_NAME_MATCH_OPTION_HANDLER_H_