/* */ #ifndef _D_NAME_MATCH_OPTION_HANDLER_H_ #define _D_NAME_MATCH_OPTION_HANDLER_H_ #include "OptionHandler.h" #include "A2STR.h" #include "Util.h" #include "OptionHandlerException.h" #include #include #include #include #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; bool _hidden; std::deque _tags; 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, bool hidden = false): _optName(optName), _description(description), _defaultValue(defaultValue), _hidden(hidden) {} 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 OptionHandlerException(_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; } }; typedef SharedHandle NameMatchOptionHandlerHandle; } // namespace aria2 #endif // _D_NAME_MATCH_OPTION_HANDLER_H_