添加执行器节点抽象
This commit is contained in:
parent
5a917f3ff4
commit
d96793fa99
|
@ -61,19 +61,19 @@ QList<QString> MapKernal::compareTypes() const
|
||||||
return _compare_types.keys();
|
return _compare_types.keys();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapKernal::registCompare(std::shared_ptr<CompareKernel> ins)
|
void MapKernal::registCompare(std::shared_ptr<CompareDelegate> ins)
|
||||||
{
|
{
|
||||||
_compare_types[ins->name()] = ins;
|
_compare_types[ins->name()] = ins;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<CompareKernel> MapKernal::getCompare(const QString& name)
|
std::shared_ptr<CompareDelegate> MapKernal::getCompare(const QString& name)
|
||||||
{
|
{
|
||||||
if (!_compare_types.contains(name))
|
if (!_compare_types.contains(name))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return _compare_types[name];
|
return _compare_types[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapKernal::registConvert(std::shared_ptr<ConvertKernel> ins)
|
void MapKernal::registConvert(std::shared_ptr<ConvertDelegate> ins)
|
||||||
{
|
{
|
||||||
_convert_types[ins->name()] = ins;
|
_convert_types[ins->name()] = ins;
|
||||||
}
|
}
|
||||||
|
@ -83,13 +83,18 @@ QList<QString> MapKernal::convertTypes() const
|
||||||
return _convert_types.keys();
|
return _convert_types.keys();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ConvertKernel> MapKernal::getConvert(const QString& name)
|
std::shared_ptr<ConvertDelegate> MapKernal::getConvert(const QString& name)
|
||||||
{
|
{
|
||||||
if (!_convert_types.contains(name))
|
if (!_convert_types.contains(name))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return _convert_types[name];
|
return _convert_types[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MapKernal::registExecute(std::shared_ptr<ExecuteDelegate> ins)
|
||||||
|
{
|
||||||
|
_execute_types[ins->typeName()] = ins;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
||||||
{
|
{
|
||||||
return this->_bind_loader;
|
return this->_bind_loader;
|
||||||
|
@ -113,6 +118,31 @@ std::shared_ptr<TopicData> MapKernal::getData(const QString& topic)
|
||||||
return _variable_types[topic];
|
return _variable_types[topic];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<QString> MapKernal::executeTypes() const
|
||||||
|
{
|
||||||
|
return _execute_types.keys();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<ExecuteDelegate> MapKernal::getExecute(const QString& name)
|
||||||
|
{
|
||||||
|
return _execute_types[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
void MapKernal::registNode(std::shared_ptr<LogicalNode> ins)
|
||||||
|
{
|
||||||
|
_logicalnode_types[ins->typeName()] = ins;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QString> MapKernal::nodeTypes() const
|
||||||
|
{
|
||||||
|
return _logicalnode_types.keys();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<LogicalNode> MapKernal::getNode(const QString& name)
|
||||||
|
{
|
||||||
|
return _logicalnode_types[name];
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Serializable> MapKernal::newDefault() const
|
std::shared_ptr<Serializable> MapKernal::newDefault() const
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -575,7 +605,7 @@ QString CompareNode::delegateName() const
|
||||||
return u8"";
|
return u8"";
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompareNode::bindDelegate(std::shared_ptr<CompareKernel> ins)
|
void CompareNode::bindDelegate(std::shared_ptr<CompareDelegate> ins)
|
||||||
{
|
{
|
||||||
this->_bind_delegate = ins;
|
this->_bind_delegate = ins;
|
||||||
}
|
}
|
||||||
|
@ -630,50 +660,50 @@ void GeneralData::saveTo(QJsonObject& obj) const
|
||||||
obj = _element_bind;
|
obj = _element_bind;
|
||||||
}
|
}
|
||||||
|
|
||||||
CompareKernel::CompareKernel(QJSEngine& bind_engine, const QString& func)
|
CompareDelegate::CompareDelegate(QJSEngine& bind_engine, const QString& func)
|
||||||
:_script_engine(bind_engine), _function_name(func) {
|
:_script_engine(bind_engine), _function_name(func) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CompareKernel::name() const
|
QString CompareDelegate::name() const
|
||||||
{
|
{
|
||||||
return _function_name;
|
return _function_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CompareKernel::compare(std::shared_ptr<TopicData> vleft, std::shared_ptr<TopicData> vright)
|
bool CompareDelegate::compare(std::shared_ptr<TopicData> vleft, std::shared_ptr<TopicData> vright)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConvertKernel::ConvertKernel(std::shared_ptr<MapKernal> host, QJSEngine& bind_engine, const QString& func)
|
ConvertDelegate::ConvertDelegate(std::shared_ptr<MapKernal> host, QJSEngine& bind_engine, const QString& func)
|
||||||
: _host_bind(host), _script_engine(bind_engine), _function_name(func) {
|
: _host_bind(host), _script_engine(bind_engine), _function_name(func) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ConvertKernel::name() const
|
QString ConvertDelegate::name() const
|
||||||
{
|
{
|
||||||
return _function_name;
|
return _function_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<std::pair<ConvertKernel::DATA_TOPIC_STRING, QString>> ConvertKernel::inputTable() const
|
QList<std::pair<ConvertDelegate::DATA_TOPIC_STRING, QString>> ConvertDelegate::inputTable() const
|
||||||
{
|
{
|
||||||
return _input_table;
|
return _input_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConvertKernel::inputReset(const QList<std::pair<DATA_TOPIC_STRING, QString>>& table)
|
void ConvertDelegate::inputReset(const QList<std::pair<DATA_TOPIC_STRING, QString>>& table)
|
||||||
{
|
{
|
||||||
this->_input_table = table;
|
this->_input_table = table;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ConvertKernel::DATA_TOPIC_STRING, QString> ConvertKernel::outputVariable() const
|
std::pair<ConvertDelegate::DATA_TOPIC_STRING, QString> ConvertDelegate::outputVariable() const
|
||||||
{
|
{
|
||||||
return _output_appoint;
|
return _output_appoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConvertKernel::outputReset(std::pair<DATA_TOPIC_STRING, QString> appoint)
|
void ConvertDelegate::outputReset(std::pair<DATA_TOPIC_STRING, QString> appoint)
|
||||||
{
|
{
|
||||||
this->_output_appoint = appoint;
|
this->_output_appoint = appoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TopicData> ConvertKernel::convert(const QList<std::shared_ptr<TopicData>>& input_variables)
|
std::shared_ptr<TopicData> ConvertDelegate::convert(const QList<std::shared_ptr<TopicData>>& input_variables)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,9 @@
|
||||||
#include <QJSEngine>
|
#include <QJSEngine>
|
||||||
|
|
||||||
class MessageLoader;
|
class MessageLoader;
|
||||||
class CompareKernel;
|
class CompareDelegate;
|
||||||
class ConvertKernel;
|
class ConvertDelegate;
|
||||||
|
class ExecuteDelegate;
|
||||||
class LogicalNode;
|
class LogicalNode;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -42,11 +43,15 @@ private:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 比较器
|
/// 比较器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
QHash<QString, std::shared_ptr<CompareKernel>> _compare_types;
|
QHash<QString, std::shared_ptr<CompareDelegate>> _compare_types;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 转换器
|
/// 转换器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
QHash<QString, std::shared_ptr<ConvertKernel>> _convert_types;
|
QHash<QString, std::shared_ptr<ConvertDelegate>> _convert_types;
|
||||||
|
/// <summary>
|
||||||
|
/// 执行器
|
||||||
|
/// </summary>
|
||||||
|
QHash<QString, std::shared_ptr<ExecuteDelegate>> _execute_types;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 所有可用的节点类型
|
/// 所有可用的节点类型
|
||||||
|
@ -88,7 +93,7 @@ public:
|
||||||
/// 注册比较器
|
/// 注册比较器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ins"></param>
|
/// <param name="ins"></param>
|
||||||
virtual void registCompare(std::shared_ptr<CompareKernel> ins);
|
virtual void registCompare(std::shared_ptr<CompareDelegate> ins);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取比较器类型
|
/// 获取比较器类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -99,7 +104,7 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
virtual std::shared_ptr<CompareKernel> getCompare(const QString& name);
|
virtual std::shared_ptr<CompareDelegate> getCompare(const QString& name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,7 +113,7 @@ public:
|
||||||
/// 注册转换器
|
/// 注册转换器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ins"></param>
|
/// <param name="ins"></param>
|
||||||
virtual void registConvert(std::shared_ptr<ConvertKernel> ins);
|
virtual void registConvert(std::shared_ptr<ConvertDelegate> ins);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 转换器类型名称
|
/// 转换器类型名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -119,7 +124,49 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
virtual std::shared_ptr<ConvertKernel> getConvert(const QString& name);
|
virtual std::shared_ptr<ConvertDelegate> getConvert(const QString& name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 执行节点类型管理 ====================================================
|
||||||
|
/// <summary>
|
||||||
|
/// 注册拓展执行器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ins"></param>
|
||||||
|
virtual void registExecute(std::shared_ptr<ExecuteDelegate> ins);
|
||||||
|
/// <summary>
|
||||||
|
/// 执行器类型名称
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual QList<QString> executeTypes() const;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取指定类型的执行器节点
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual std::shared_ptr<ExecuteDelegate> getExecute(const QString& name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 逻辑树类型管理 ====================================================
|
||||||
|
/// <summary>
|
||||||
|
/// 注册逻辑节点
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ins"></param>
|
||||||
|
virtual void registNode(std::shared_ptr<LogicalNode> ins);
|
||||||
|
/// <summary>
|
||||||
|
/// 执行器类型名称
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual QList<QString> nodeTypes() const;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取指定类型的执行器节点
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual std::shared_ptr<LogicalNode> getNode(const QString& name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 通过 Serializable 继承
|
// 通过 Serializable 继承
|
||||||
|
@ -131,13 +178,13 @@ public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 比较关系实例
|
/// 比较关系实例
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class COMPONENTBASIC_EXPORT CompareKernel {
|
class COMPONENTBASIC_EXPORT CompareDelegate {
|
||||||
private:
|
private:
|
||||||
QJSEngine& _script_engine;
|
QJSEngine& _script_engine;
|
||||||
QString _function_name;
|
QString _function_name;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CompareKernel(QJSEngine& bind_engine, const QString& func);
|
CompareDelegate(QJSEngine& bind_engine, const QString& func);
|
||||||
|
|
||||||
QString name() const;
|
QString name() const;
|
||||||
bool compare(std::shared_ptr<TopicData> vleft, std::shared_ptr<TopicData> vright);
|
bool compare(std::shared_ptr<TopicData> vleft, std::shared_ptr<TopicData> vright);
|
||||||
|
@ -146,7 +193,7 @@ public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据转换实例
|
/// 数据转换实例
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class COMPONENTBASIC_EXPORT ConvertKernel {
|
class COMPONENTBASIC_EXPORT ConvertDelegate {
|
||||||
public:
|
public:
|
||||||
typedef QString DATA_TOPIC_STRING;
|
typedef QString DATA_TOPIC_STRING;
|
||||||
|
|
||||||
|
@ -156,7 +203,7 @@ public:
|
||||||
/// <param name="host">数据类型管理核心</param>
|
/// <param name="host">数据类型管理核心</param>
|
||||||
/// <param name="bind_engine"></param>
|
/// <param name="bind_engine"></param>
|
||||||
/// <param name="func"></param>
|
/// <param name="func"></param>
|
||||||
ConvertKernel(std::shared_ptr<MapKernal> host, QJSEngine& bind_engine, const QString& func);
|
ConvertDelegate(std::shared_ptr<MapKernal> host, QJSEngine& bind_engine, const QString& func);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 转换器名称:JS函数名
|
/// 转换器名称:JS函数名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -201,9 +248,6 @@ private:
|
||||||
std::pair<DATA_TOPIC_STRING, QString> _output_appoint;
|
std::pair<DATA_TOPIC_STRING, QString> _output_appoint;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行结果
|
/// 执行结果
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -212,6 +256,41 @@ enum class LogicalResult {
|
||||||
SUCCESS, // 成功
|
SUCCESS, // 成功
|
||||||
FAILURE // 失败
|
FAILURE // 失败
|
||||||
};
|
};
|
||||||
|
/// <summary>
|
||||||
|
/// 执行代理
|
||||||
|
/// </summary>
|
||||||
|
class COMPONENTBASIC_EXPORT ExecuteDelegate : public Serializable {
|
||||||
|
public:
|
||||||
|
/// <summary>
|
||||||
|
/// 获取节点名称
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual QString typeName() const = 0;
|
||||||
|
/// <summary>
|
||||||
|
/// 声明输入变量的内部标识和数据接口
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>map{name, type-ins}</returns>
|
||||||
|
virtual QHash<QString, std::shared_ptr<TopicData>> inputList() const = 0;
|
||||||
|
/// <summary>
|
||||||
|
/// 声明输出变量的内部标识和数据接口
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>map{name, type-ins}</returns>
|
||||||
|
virtual QHash<QString, std::shared_ptr<TopicData>> outputList() const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重置内部状态
|
||||||
|
/// </summary>
|
||||||
|
virtual void reset() = 0;
|
||||||
|
/// <summary>
|
||||||
|
/// 执行逻辑节点
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="core"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual LogicalResult execute() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 逻辑节点类型
|
/// 逻辑节点类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -543,14 +622,14 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class COMPONENTBASIC_EXPORT CompareNode : public LogicalNode {
|
class COMPONENTBASIC_EXPORT CompareNode : public LogicalNode {
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<CompareKernel> _bind_delegate;
|
std::shared_ptr<CompareDelegate> _bind_delegate;
|
||||||
QHash<QString, std::shared_ptr<TopicData>> _data_map;
|
QHash<QString, std::shared_ptr<TopicData>> _data_map;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CompareNode();
|
CompareNode();
|
||||||
|
|
||||||
QString delegateName() const;
|
QString delegateName() const;
|
||||||
void bindDelegate(std::shared_ptr<CompareKernel> ins);
|
void bindDelegate(std::shared_ptr<CompareDelegate> ins);
|
||||||
|
|
||||||
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
|
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
|
||||||
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
|
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
|
||||||
|
|
Loading…
Reference in New Issue