添加执行器节点抽象

This commit is contained in:
codeboss 2025-06-30 13:49:36 +08:00
parent 5a917f3ff4
commit d96793fa99
2 changed files with 141 additions and 32 deletions

View File

@ -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;
}

View File

@ -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;