]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/loaderaction.h
Support loader functions with bound first argument
[libs/datafile.git] / source / loaderaction.h
index 7e4feac613eba7afab54fec62c07b294c28f56ea..a3b04437d279e3e6835bd20538d2c99311721064 100644 (file)
@@ -361,6 +361,33 @@ public:
        { return create_signature<Args...>(); }
 };
 
+
+template<typename L, typename B0, typename... Args>
+class LoaderFuncNBound1: public LoaderAction
+{
+protected:
+       typedef void (L::*FuncType)(B0, Args...);
+       typedef typename RemoveReference<B0>::Type Bound0Type;
+
+       FuncType func;
+       Bound0Type bound0;
+
+public:
+       LoaderFuncNBound1(FuncType f, const Bound0Type &b0): func(f), bound0(b0) { }
+
+       virtual void execute(Loader &l, const Statement &st) const
+       {
+               Apply<0, Args...>::apply(dynamic_cast<L &>(l), func, st, bound0);
+       }
+
+       virtual void execute(Loader &l, const ArgumentStore &as) const
+       {
+               Apply<0, Args...>::apply(dynamic_cast<L &>(l), func, as, bound0);
+       }
+
+       virtual std::string get_signature() const
+       { return create_signature<Args...>(); }
+};
 #endif