summaryrefslogtreecommitdiff
path: root/src/register_manager.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-03-31 09:17:02 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-03-31 09:17:02 +0100
commit8badcdc0d569718b93761dfa4a271909d42f82f1 (patch)
treeed7bcb26c681d54916bba9de664de38a2e32facf /src/register_manager.hh
parent9b4bd611ef6990b2b4a83c6b593b7791b2bd4e1a (diff)
Make DynamicRegister statically dispatch to its function
Diffstat (limited to 'src/register_manager.hh')
-rw-r--r--src/register_manager.hh15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/register_manager.hh b/src/register_manager.hh
index 355bec1f..84bf0a60 100644
--- a/src/register_manager.hh
+++ b/src/register_manager.hh
@@ -8,8 +8,6 @@
#include "string.hh"
#include "vector.hh"
-#include <functional>
-
namespace Kakoune
{
@@ -46,14 +44,13 @@ protected:
Vector<String, MemoryDomain::Registers> m_content;
};
-using RegisterRetriever = std::function<Vector<String, MemoryDomain::Registers> (const Context&)>;
-
// Dynamic value register, use it's RegisterRetriever
// to get it's value when needed.
+template<typename Func>
class DynamicRegister : public StaticRegister
{
public:
- DynamicRegister(RegisterRetriever function)
+ DynamicRegister(Func function)
: m_function(std::move(function)) {}
Register& operator=(ConstArrayView<String> values) override
@@ -68,9 +65,15 @@ public:
}
private:
- RegisterRetriever m_function;
+ Func m_function;
};
+template<typename Func>
+std::unique_ptr<Register> make_dyn_reg(Func func)
+{
+ return make_unique<DynamicRegister<Func>>(std::move(func));
+}
+
class NullRegister : public Register
{
public: