From d2f811a8d5ef527eb98da7acdee93fa8f00131f2 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 23 Nov 2012 13:40:20 +0100 Subject: Refactor filter and highlighter registry into a common template --- src/function_registry.hh | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/function_registry.hh (limited to 'src/function_registry.hh') diff --git a/src/function_registry.hh b/src/function_registry.hh new file mode 100644 index 00000000..058c4aa3 --- /dev/null +++ b/src/function_registry.hh @@ -0,0 +1,46 @@ +#ifndef function_registry_h_INCLUDED +#define function_registry_h_INCLUDED + +#include "string.hh" +#include "completion.hh" +#include "idvaluemap.hh" + +namespace Kakoune +{ + +struct function_not_found : runtime_error +{ + function_not_found(const String& name) + : runtime_error("'" + name + "' not found") {} +}; + +template +class FunctionRegistry +{ +public: + void register_func(const String& name, const FunctionType& function) + { + assert(not m_functions.contains(name)); + m_functions.append(std::make_pair(name, function)); + } + + const FunctionType& operator[](const String& name) const + { + auto it = m_functions.find(name); + if (it == m_functions.end()) + throw function_not_found(name); + return it->second; + } + + CandidateList complete_name(const String& prefix, ByteCount cursor_pos) + { + return m_functions.complete_id(prefix, cursor_pos); + } + +private: + idvaluemap m_functions; +}; + +} + +#endif // function_registry_h_INCLUDED -- cgit v1.2.3