From d96793fa99eab65e4cfe10b71ca38b3e5e6d1ef1 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Mon, 30 Jun 2025 13:49:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=A7=E8=A1=8C=E5=99=A8?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=8A=BD=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ComponentBasic/BehaviorPerform.cpp | 60 +++++++++++---- ComponentBasic/BehaviorPerform.h | 113 ++++++++++++++++++++++++----- 2 files changed, 141 insertions(+), 32 deletions(-) diff --git a/ComponentBasic/BehaviorPerform.cpp b/ComponentBasic/BehaviorPerform.cpp index 6bcac11..858bff4 100644 --- a/ComponentBasic/BehaviorPerform.cpp +++ b/ComponentBasic/BehaviorPerform.cpp @@ -61,19 +61,19 @@ QList MapKernal::compareTypes() const return _compare_types.keys(); } -void MapKernal::registCompare(std::shared_ptr ins) +void MapKernal::registCompare(std::shared_ptr ins) { _compare_types[ins->name()] = ins; } -std::shared_ptr MapKernal::getCompare(const QString& name) +std::shared_ptr MapKernal::getCompare(const QString& name) { if (!_compare_types.contains(name)) return nullptr; return _compare_types[name]; } -void MapKernal::registConvert(std::shared_ptr ins) +void MapKernal::registConvert(std::shared_ptr ins) { _convert_types[ins->name()] = ins; } @@ -83,13 +83,18 @@ QList MapKernal::convertTypes() const return _convert_types.keys(); } -std::shared_ptr MapKernal::getConvert(const QString& name) +std::shared_ptr MapKernal::getConvert(const QString& name) { if (!_convert_types.contains(name)) return nullptr; return _convert_types[name]; } +void MapKernal::registExecute(std::shared_ptr ins) +{ + _execute_types[ins->typeName()] = ins; +} + std::shared_ptr MapKernal::messageLoader() const { return this->_bind_loader; @@ -113,6 +118,31 @@ std::shared_ptr MapKernal::getData(const QString& topic) return _variable_types[topic]; } +QList MapKernal::executeTypes() const +{ + return _execute_types.keys(); +} + +std::shared_ptr MapKernal::getExecute(const QString& name) +{ + return _execute_types[name]; +} + +void MapKernal::registNode(std::shared_ptr ins) +{ + _logicalnode_types[ins->typeName()] = ins; +} + +QList MapKernal::nodeTypes() const +{ + return _logicalnode_types.keys(); +} + +std::shared_ptr MapKernal::getNode(const QString& name) +{ + return _logicalnode_types[name]; +} + std::shared_ptr MapKernal::newDefault() const { return nullptr; @@ -575,7 +605,7 @@ QString CompareNode::delegateName() const return u8""; } -void CompareNode::bindDelegate(std::shared_ptr ins) +void CompareNode::bindDelegate(std::shared_ptr 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 vleft, std::shared_ptr vright) +bool CompareDelegate::compare(std::shared_ptr vleft, std::shared_ptr vright) { return true; } -ConvertKernel::ConvertKernel(std::shared_ptr host, QJSEngine& bind_engine, const QString& func) +ConvertDelegate::ConvertDelegate(std::shared_ptr 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> ConvertKernel::inputTable() const +QList> ConvertDelegate::inputTable() const { return _input_table; } -void ConvertKernel::inputReset(const QList>& table) +void ConvertDelegate::inputReset(const QList>& table) { this->_input_table = table; } -std::pair ConvertKernel::outputVariable() const +std::pair ConvertDelegate::outputVariable() const { return _output_appoint; } -void ConvertKernel::outputReset(std::pair appoint) +void ConvertDelegate::outputReset(std::pair appoint) { this->_output_appoint = appoint; } -std::shared_ptr ConvertKernel::convert(const QList>& input_variables) +std::shared_ptr ConvertDelegate::convert(const QList>& input_variables) { return nullptr; } diff --git a/ComponentBasic/BehaviorPerform.h b/ComponentBasic/BehaviorPerform.h index 5234124..5ce5657 100644 --- a/ComponentBasic/BehaviorPerform.h +++ b/ComponentBasic/BehaviorPerform.h @@ -6,8 +6,9 @@ #include class MessageLoader; -class CompareKernel; -class ConvertKernel; +class CompareDelegate; +class ConvertDelegate; +class ExecuteDelegate; class LogicalNode; /// @@ -42,11 +43,15 @@ private: /// /// 比较器 /// - QHash> _compare_types; + QHash> _compare_types; /// /// 转换器 /// - QHash> _convert_types; + QHash> _convert_types; + /// + /// 执行器 + /// + QHash> _execute_types; /// /// 所有可用的节点类型 @@ -88,7 +93,7 @@ public: /// 注册比较器 /// /// - virtual void registCompare(std::shared_ptr ins); + virtual void registCompare(std::shared_ptr ins); /// /// 获取比较器类型 /// @@ -99,7 +104,7 @@ public: /// /// /// - virtual std::shared_ptr getCompare(const QString& name); + virtual std::shared_ptr getCompare(const QString& name); @@ -108,7 +113,7 @@ public: /// 注册转换器 /// /// - virtual void registConvert(std::shared_ptr ins); + virtual void registConvert(std::shared_ptr ins); /// /// 转换器类型名称 /// @@ -119,7 +124,49 @@ public: /// /// /// - virtual std::shared_ptr getConvert(const QString& name); + virtual std::shared_ptr getConvert(const QString& name); + + + + // 执行节点类型管理 ==================================================== + /// + /// 注册拓展执行器 + /// + /// + virtual void registExecute(std::shared_ptr ins); + /// + /// 执行器类型名称 + /// + /// + virtual QList executeTypes() const; + /// + /// 获取指定类型的执行器节点 + /// + /// + /// + virtual std::shared_ptr getExecute(const QString& name); + + + + + // 逻辑树类型管理 ==================================================== + /// + /// 注册逻辑节点 + /// + /// + virtual void registNode(std::shared_ptr ins); + /// + /// 执行器类型名称 + /// + /// + virtual QList nodeTypes() const; + /// + /// 获取指定类型的执行器节点 + /// + /// + /// + virtual std::shared_ptr getNode(const QString& name); + // 通过 Serializable 继承 @@ -131,13 +178,13 @@ public: /// /// 比较关系实例 /// -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 vleft, std::shared_ptr vright); @@ -146,7 +193,7 @@ public: /// /// 数据转换实例 /// -class COMPONENTBASIC_EXPORT ConvertKernel { +class COMPONENTBASIC_EXPORT ConvertDelegate { public: typedef QString DATA_TOPIC_STRING; @@ -156,7 +203,7 @@ public: /// 数据类型管理核心 /// /// - ConvertKernel(std::shared_ptr host, QJSEngine& bind_engine, const QString& func); + ConvertDelegate(std::shared_ptr host, QJSEngine& bind_engine, const QString& func); /// /// 转换器名称:JS函数名 /// @@ -201,9 +248,6 @@ private: std::pair _output_appoint; }; - - - /// /// 执行结果 /// @@ -212,6 +256,41 @@ enum class LogicalResult { SUCCESS, // 成功 FAILURE // 失败 }; +/// +/// 执行代理 +/// +class COMPONENTBASIC_EXPORT ExecuteDelegate : public Serializable { +public: + /// + /// 获取节点名称 + /// + /// + virtual QString typeName() const = 0; + /// + /// 声明输入变量的内部标识和数据接口 + /// + /// map{name, type-ins} + virtual QHash> inputList() const = 0; + /// + /// 声明输出变量的内部标识和数据接口 + /// + /// map{name, type-ins} + virtual QHash> outputList() const = 0; + + + /// + /// 重置内部状态 + /// + virtual void reset() = 0; + /// + /// 执行逻辑节点 + /// + /// + /// + virtual LogicalResult execute() = 0; +}; + + /// /// 逻辑节点类型 /// @@ -543,14 +622,14 @@ public: /// class COMPONENTBASIC_EXPORT CompareNode : public LogicalNode { private: - std::shared_ptr _bind_delegate; + std::shared_ptr _bind_delegate; QHash> _data_map; public: CompareNode(); QString delegateName() const; - void bindDelegate(std::shared_ptr ins); + void bindDelegate(std::shared_ptr ins); QHash> inputList() const override; QHash> outputList() const override;