diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-08-19 18:56:11 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-08-19 18:56:11 +0100 |
| commit | bea53d09b21de050841dee75fa4cc58e71532afb (patch) | |
| tree | 57af5993e8023d199e26da863c32727daf7ccf7d /src/option_manager.hh | |
| parent | a36aed94f17a93ac02f3efef35422ec3bcb5aaad (diff) | |
Remove option checkers, handle that through the type system
Use a specific type for InsertCompleterDesc with checks in
the option_{from,to}_string functions
Diffstat (limited to 'src/option_manager.hh')
| -rw-r--r-- | src/option_manager.hh | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/src/option_manager.hh b/src/option_manager.hh index 92c3ac7b..93e6a943 100644 --- a/src/option_manager.hh +++ b/src/option_manager.hh @@ -117,23 +117,17 @@ private: std::vector<OptionManagerWatcher*> m_watchers; }; -template<typename T> using OptionChecker = std::function<void (const T&)>; - template<typename T> class TypedOption : public Option { public: - TypedOption(OptionManager& manager, const OptionDesc& desc, - const T& value, OptionChecker<T> checker) - : Option(desc, manager), - m_value(value), m_checker(std::move(checker)) {} + TypedOption(OptionManager& manager, const OptionDesc& desc, const T& value) + : Option(desc, manager), m_value(value) {} void set(T value) { if (m_value != value) { - if (m_checker) - m_checker(value); m_value = std::move(value); manager().on_option_changed(*this); } @@ -154,19 +148,16 @@ public: { T val; option_from_string(str, val); - if (m_checker) - m_checker(val); if (option_add(m_value, val)) m_manager.on_option_changed(*this); } Option* clone(OptionManager& manager) const override { - return new TypedOption{manager, m_desc, m_value, m_checker}; + return new TypedOption{manager, m_desc, m_value}; } private: T m_value; - OptionChecker<T> m_checker; }; template<typename T> const T& Option::get() const @@ -206,8 +197,7 @@ public: template<typename T> Option& declare_option(const String& name, const String& docstring, const T& value, - OptionFlags flags = OptionFlags::None, - OptionChecker<T> checker = OptionChecker<T>{}) + OptionFlags flags = OptionFlags::None) { auto it = find_option(m_options, name); if (it != m_options.end()) @@ -217,8 +207,7 @@ public: throw runtime_error("option " + name + " already declared with different type or flags"); } m_descs.emplace_back(new OptionDesc{name, docstring, flags}); - m_options.emplace_back(new TypedOption<T>{*this, *m_descs.back(), - value, std::move(checker)}); + m_options.emplace_back(new TypedOption<T>{*this, *m_descs.back(), value}); return *m_options.back(); } |
