添加执行器节点抽象
This commit is contained in:
parent
5a917f3ff4
commit
d96793fa99
|
@ -61,19 +61,19 @@ QList<QString> MapKernal::compareTypes() const
|
|||
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;
|
||||
}
|
||||
|
||||
std::shared_ptr<CompareKernel> MapKernal::getCompare(const QString& name)
|
||||
std::shared_ptr<CompareDelegate> MapKernal::getCompare(const QString& name)
|
||||
{
|
||||
if (!_compare_types.contains(name))
|
||||
return nullptr;
|
||||
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;
|
||||
}
|
||||
|
@ -83,13 +83,18 @@ QList<QString> MapKernal::convertTypes() const
|
|||
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))
|
||||
return nullptr;
|
||||
return _convert_types[name];
|
||||
}
|
||||
|
||||
void MapKernal::registExecute(std::shared_ptr<ExecuteDelegate> ins)
|
||||
{
|
||||
_execute_types[ins->typeName()] = ins;
|
||||
}
|
||||
|
||||
std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
||||
{
|
||||
return this->_bind_loader;
|
||||
|
@ -113,6 +118,31 @@ std::shared_ptr<TopicData> MapKernal::getData(const QString& 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
|
||||
{
|
||||
return nullptr;
|
||||
|
@ -575,7 +605,7 @@ QString CompareNode::delegateName() const
|
|||
return u8"";
|
||||
}
|
||||
|
||||
void CompareNode::bindDelegate(std::shared_ptr<CompareKernel> ins)
|
||||
void CompareNode::bindDelegate(std::shared_ptr<CompareDelegate> ins)
|
||||
{
|
||||
this->_bind_delegate = ins;
|
||||
}
|
||||
|
@ -630,50 +660,50 @@ void GeneralData::saveTo(QJsonObject& obj) const
|
|||
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) {
|
||||
}
|
||||
|
||||
QString CompareKernel::name() const
|
||||
QString CompareDelegate::name() const
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
}
|
||||
|
||||
QString ConvertKernel::name() const
|
||||
QString ConvertDelegate::name() const
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
std::pair<ConvertKernel::DATA_TOPIC_STRING, QString> ConvertKernel::outputVariable() const
|
||||
std::pair<ConvertDelegate::DATA_TOPIC_STRING, QString> ConvertDelegate::outputVariable() const
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -6,8 +6,9 @@
|
|||
#include <QJSEngine>
|
||||
|
||||
class MessageLoader;
|
||||
class CompareKernel;
|
||||
class ConvertKernel;
|
||||
class CompareDelegate;
|
||||
class ConvertDelegate;
|
||||
class ExecuteDelegate;
|
||||
class LogicalNode;
|
||||
|
||||
/// <summary>
|
||||
|
@ -42,11 +43,15 @@ private:
|
|||
/// <summary>
|
||||
/// 比较器
|
||||
/// </summary>
|
||||
QHash<QString, std::shared_ptr<CompareKernel>> _compare_types;
|
||||
QHash<QString, std::shared_ptr<CompareDelegate>> _compare_types;
|
||||
/// <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>
|
||||
/// 所有可用的节点类型
|
||||
|
@ -88,7 +93,7 @@ public:
|
|||
/// 注册比较器
|
||||
/// </summary>
|
||||
/// <param name="ins"></param>
|
||||
virtual void registCompare(std::shared_ptr<CompareKernel> ins);
|
||||
virtual void registCompare(std::shared_ptr<CompareDelegate> ins);
|
||||
/// <summary>
|
||||
/// 获取比较器类型
|
||||
/// </summary>
|
||||
|
@ -99,7 +104,7 @@ public:
|
|||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <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>
|
||||
/// <param name="ins"></param>
|
||||
virtual void registConvert(std::shared_ptr<ConvertKernel> ins);
|
||||
virtual void registConvert(std::shared_ptr<ConvertDelegate> ins);
|
||||
/// <summary>
|
||||
/// 转换器类型名称
|
||||
/// </summary>
|
||||
|
@ -119,7 +124,49 @@ public:
|
|||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <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 继承
|
||||
|
@ -131,13 +178,13 @@ public:
|
|||
/// <summary>
|
||||
/// 比较关系实例
|
||||
/// </summary>
|
||||
class COMPONENTBASIC_EXPORT CompareKernel {
|
||||
class COMPONENTBASIC_EXPORT CompareDelegate {
|
||||
private:
|
||||
QJSEngine& _script_engine;
|
||||
QString _function_name;
|
||||
|
||||
public:
|
||||
CompareKernel(QJSEngine& bind_engine, const QString& func);
|
||||
CompareDelegate(QJSEngine& bind_engine, const QString& func);
|
||||
|
||||
QString name() const;
|
||||
bool compare(std::shared_ptr<TopicData> vleft, std::shared_ptr<TopicData> vright);
|
||||
|
@ -146,7 +193,7 @@ public:
|
|||
/// <summary>
|
||||
/// 数据转换实例
|
||||
/// </summary>
|
||||
class COMPONENTBASIC_EXPORT ConvertKernel {
|
||||
class COMPONENTBASIC_EXPORT ConvertDelegate {
|
||||
public:
|
||||
typedef QString DATA_TOPIC_STRING;
|
||||
|
||||
|
@ -156,7 +203,7 @@ public:
|
|||
/// <param name="host">数据类型管理核心</param>
|
||||
/// <param name="bind_engine"></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>
|
||||
/// 转换器名称:JS函数名
|
||||
/// </summary>
|
||||
|
@ -201,9 +248,6 @@ private:
|
|||
std::pair<DATA_TOPIC_STRING, QString> _output_appoint;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 执行结果
|
||||
/// </summary>
|
||||
|
@ -212,6 +256,41 @@ enum class LogicalResult {
|
|||
SUCCESS, // 成功
|
||||
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>
|
||||
|
@ -543,14 +622,14 @@ public:
|
|||
/// </summary>
|
||||
class COMPONENTBASIC_EXPORT CompareNode : public LogicalNode {
|
||||
private:
|
||||
std::shared_ptr<CompareKernel> _bind_delegate;
|
||||
std::shared_ptr<CompareDelegate> _bind_delegate;
|
||||
QHash<QString, std::shared_ptr<TopicData>> _data_map;
|
||||
|
||||
public:
|
||||
CompareNode();
|
||||
|
||||
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>> outputList() const override;
|
||||
|
|
Loading…
Reference in New Issue