summaryrefslogtreecommitdiff
path: root/src/option_manager.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-08-19 18:56:11 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-08-19 18:56:11 +0100
commitbea53d09b21de050841dee75fa4cc58e71532afb (patch)
tree57af5993e8023d199e26da863c32727daf7ccf7d /src/option_manager.hh
parenta36aed94f17a93ac02f3efef35422ec3bcb5aaad (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.hh21
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();
}