update
This commit is contained in:
parent
fe721162ac
commit
ba7ac2503d
|
@ -3,6 +3,7 @@
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include "data_types.h"
|
#include "data_types.h"
|
||||||
|
#include "validation.h"
|
||||||
|
|
||||||
namespace Inlet {
|
namespace Inlet {
|
||||||
template<typename... Types> struct SignatureImpl;
|
template<typename... Types> struct SignatureImpl;
|
||||||
|
@ -15,8 +16,8 @@ namespace Inlet {
|
||||||
}
|
}
|
||||||
void result() const { }
|
void result() const { }
|
||||||
|
|
||||||
void saveTo(int index, datas::IDataObject &object) { }
|
void saveTo(int index, datas::IDataObject& object) { }
|
||||||
void loadFrom(int index, datas::IDataObject &object) { }
|
void loadFrom(int index, datas::IDataObject& object) { }
|
||||||
};
|
};
|
||||||
template<typename Ret> struct SignatureImpl<Ret> {
|
template<typename Ret> struct SignatureImpl<Ret> {
|
||||||
private:
|
private:
|
||||||
|
@ -34,10 +35,10 @@ namespace Inlet {
|
||||||
return _result;
|
return _result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveTo(int index, datas::IDataObject &object) {
|
void saveTo(int index, datas::IDataObject& object) {
|
||||||
datas::dataSet<Ret>(object, u8"RetValue", _result);
|
datas::dataSet<Ret>(object, u8"RetValue", _result);
|
||||||
}
|
}
|
||||||
void loadFrom(int index, datas::IDataObject &object) {
|
void loadFrom(int index, datas::IDataObject& object) {
|
||||||
_result = datas::dataGet<Ret>(object, u8"RetValue");
|
_result = datas::dataGet<Ret>(object, u8"RetValue");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -50,6 +51,10 @@ namespace Inlet {
|
||||||
SignatureImpl() : SignatureImpl<Ret, Args...>(), _args_value(First()) { }
|
SignatureImpl() : SignatureImpl<Ret, Args...>(), _args_value(First()) { }
|
||||||
SignatureImpl(First a0, Args... args) :SignatureImpl<Ret, Args...>(args...), _args_value(a0) { }
|
SignatureImpl(First a0, Args... args) :SignatureImpl<Ret, Args...>(args...), _args_value(a0) { }
|
||||||
|
|
||||||
|
First getArgs0() {
|
||||||
|
return _args_value;
|
||||||
|
}
|
||||||
|
|
||||||
Ret execute(std::function<Ret(First, Args...)> unit) {
|
Ret execute(std::function<Ret(First, Args...)> unit) {
|
||||||
auto unit_wrap = [&](Args... args) {
|
auto unit_wrap = [&](Args... args) {
|
||||||
return unit(_args_value, args...);
|
return unit(_args_value, args...);
|
||||||
|
@ -58,11 +63,11 @@ namespace Inlet {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void saveTo(int index, datas::IDataObject &object) {
|
void saveTo(int index, datas::IDataObject& object) {
|
||||||
datas::dataSet<First>(object, QString(u8"Args_%1").arg(index), _args_value);
|
datas::dataSet<First>(object, QString(u8"Args_%1").arg(index), _args_value);
|
||||||
SignatureImpl<Ret, Args...>::saveTo(index + 1, object);
|
SignatureImpl<Ret, Args...>::saveTo(index + 1, object);
|
||||||
}
|
}
|
||||||
void loadFrom(int index, datas::IDataObject &object) {
|
void loadFrom(int index, datas::IDataObject& object) {
|
||||||
_args_value = datas::dataGet<First>(object, QString(u8"Args_%1").arg(index));
|
_args_value = datas::dataGet<First>(object, QString(u8"Args_%1").arg(index));
|
||||||
SignatureImpl<Ret, Args...>::loadFrom(index + 1, object);
|
SignatureImpl<Ret, Args...>::loadFrom(index + 1, object);
|
||||||
}
|
}
|
||||||
|
@ -118,10 +123,10 @@ namespace Inlet {
|
||||||
void run() {
|
void run() {
|
||||||
_args_value.execute(_func);
|
_args_value.execute(_func);
|
||||||
}
|
}
|
||||||
virtual void saveTo(datas::IDataObject &object) {
|
virtual void saveTo(datas::IDataObject& object) {
|
||||||
_args_value.saveTo(0, object);
|
_args_value.saveTo(0, object);
|
||||||
}
|
}
|
||||||
virtual void loadFrom(datas::IDataObject &object) {
|
virtual void loadFrom(datas::IDataObject& object) {
|
||||||
_args_value.loadFrom(0, object);
|
_args_value.loadFrom(0, object);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -157,10 +162,10 @@ namespace Inlet {
|
||||||
void run() {
|
void run() {
|
||||||
_args_value.execute(_func);
|
_args_value.execute(_func);
|
||||||
}
|
}
|
||||||
virtual void saveTo(datas::IDataObject &object) {
|
virtual void saveTo(datas::IDataObject& object) {
|
||||||
_args_value.saveTo(0, object);
|
_args_value.saveTo(0, object);
|
||||||
}
|
}
|
||||||
virtual void loadFrom(datas::IDataObject &object) {
|
virtual void loadFrom(datas::IDataObject& object) {
|
||||||
_args_value.loadFrom(0, object);
|
_args_value.loadFrom(0, object);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -144,6 +144,10 @@ namespace validate {
|
||||||
template<void* func, typename... types> struct ValidateHelper;
|
template<void* func, typename... types> struct ValidateHelper;
|
||||||
template<void* func, typename return_type, typename... args_type>
|
template<void* func, typename return_type, typename... args_type>
|
||||||
struct ValidateHelper<func, return_type, args_type...> : public ValidateTemplet<args_type...> {
|
struct ValidateHelper<func, return_type, args_type...> : public ValidateTemplet<args_type...> {
|
||||||
|
quint64 address() const {
|
||||||
|
return (quint64) func;
|
||||||
|
}
|
||||||
|
|
||||||
template<int n> ArgsPosition<n, args_type...> pos() {
|
template<int n> ArgsPosition<n, args_type...> pos() {
|
||||||
return ArgsPosition<n, args_type...>(*this);
|
return ArgsPosition<n, args_type...>(*this);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue