214 lines
5.6 KiB
C++
214 lines
5.6 KiB
C++
#ifndef __NODES_AND_CONNECTORS__
|
||
#define __NODES_AND_CONNECTORS__
|
||
|
||
#include <vector>
|
||
#include <memory>
|
||
#include "imgui.h"
|
||
#include "imnodes.h"
|
||
#include "ID_Generator.hpp"
|
||
|
||
// =====================================接口抽象======================================================
|
||
|
||
class Abs_Connector // 抽象接口类
|
||
{
|
||
protected:
|
||
typedef enum
|
||
{
|
||
CONNECTOR_TYPE_UNKNOWN, // 未知连接点类型
|
||
CONNECTOR_TYPE_OUTPUT, // 输出
|
||
CONNECTOR_TYPE_INPUT, // 输入
|
||
} Connector_Type_Enum; // 接口类型枚举
|
||
|
||
// ID 分配器
|
||
Independent_ID_Generator *ID_Generator;
|
||
|
||
int id; // ID
|
||
Connector_Type_Enum type; // 类型标识
|
||
const char *socket_str; // 套接字字符串
|
||
|
||
Abs_Connector *provider; // 提供者
|
||
std::vector<Abs_Connector *> receiver_list; // 接收方
|
||
void *product; // 产物
|
||
|
||
public:
|
||
// 显式禁用默认构造
|
||
Abs_Connector() = delete;
|
||
|
||
// 必要构造
|
||
Abs_Connector(Independent_ID_Generator *ID_Generator, Connector_Type_Enum type, const char *socket_str);
|
||
|
||
// 析构
|
||
~Abs_Connector();
|
||
|
||
// 连接到目标连接点
|
||
virtual bool Connect_To(Abs_Connector *target);
|
||
|
||
// 断开连接
|
||
virtual void Disconnect(void);
|
||
|
||
// 注册产物
|
||
virtual bool Register_Product(void *product, size_t size);
|
||
|
||
// 获取上级节点
|
||
virtual Abs_Connector *Get_Provider(void);
|
||
|
||
// 获取产物
|
||
virtual void *Get_Product(void);
|
||
|
||
// 获取ID
|
||
virtual int Get_ID(void);
|
||
|
||
// 绘制连接点
|
||
virtual void Show(void) = 0;
|
||
};
|
||
|
||
// =====================================节点抽象======================================================
|
||
|
||
class Abs_Node // 抽象节点类
|
||
{
|
||
protected:
|
||
typedef enum
|
||
{
|
||
NODE_TYPE_UNKNOWN, // 未知节点类型
|
||
NODE_TYPE_MSG_LINE_INPUT, // 消息输入节点
|
||
NODE_TYPE_CSV_EXPORTER, // CSV输出节点
|
||
} Node_Type_Enum; // 节点类型枚举
|
||
|
||
// ID 分配器
|
||
Independent_ID_Generator *Node_ID_Generator; // 节点ID生成器
|
||
Independent_ID_Generator *Connector_ID_Generator; // 连接点ID生成器
|
||
|
||
int id; // ID
|
||
Node_Type_Enum type; // 类型
|
||
ImVec2 initial_position; // 初始位置
|
||
|
||
bool close_flag; // 关闭标志位
|
||
|
||
// 接口列表
|
||
std::vector<std::shared_ptr<Abs_Connector>> Connector_List;
|
||
|
||
public:
|
||
// 显式禁用默认构造
|
||
Abs_Node() = delete;
|
||
|
||
// 必要构造
|
||
Abs_Node(Independent_ID_Generator *Node_ID_Generator,
|
||
Independent_ID_Generator *Connector_ID_Generator,
|
||
Node_Type_Enum type,
|
||
ImVec2 initial_position = ImVec2(0, 0));
|
||
|
||
// 析构
|
||
~Abs_Node();
|
||
|
||
// 绘制节点
|
||
virtual void Show(void) = 0;
|
||
|
||
// 执行处理流程
|
||
virtual bool Execute_Process(void) = 0;
|
||
|
||
// 获取关闭信号
|
||
virtual bool Get_CloseFlag(void);
|
||
|
||
// 获取接口列表
|
||
std::vector<std::shared_ptr<Abs_Connector>> &Get_Connector_List(void);
|
||
};
|
||
|
||
// ====================================接口类声明================================================
|
||
|
||
// DLT信息输出接口
|
||
class MSG_OutPut_Connector : public Abs_Connector
|
||
{
|
||
public:
|
||
// 显式禁用默认构造
|
||
MSG_OutPut_Connector() = delete;
|
||
|
||
// 必要构造
|
||
explicit MSG_OutPut_Connector(Independent_ID_Generator *ID_Generator);
|
||
|
||
// 绘制接口
|
||
virtual void Show(void);
|
||
};
|
||
|
||
// DLT信息输入接口
|
||
class MSG_InPut_Connector : public Abs_Connector
|
||
{
|
||
public:
|
||
// 显式禁用默认构造
|
||
MSG_InPut_Connector() = delete;
|
||
|
||
// 必要构造
|
||
explicit MSG_InPut_Connector(Independent_ID_Generator *ID_Generator);
|
||
|
||
// 绘制接口
|
||
virtual void Show(void);
|
||
};
|
||
|
||
// CSV 列输入接口
|
||
class CSV_Column_Input_Connector : public Abs_Connector
|
||
{
|
||
public:
|
||
// 显式禁用默认构造
|
||
CSV_Column_Input_Connector() = delete;
|
||
|
||
// 必要构造
|
||
explicit CSV_Column_Input_Connector(Independent_ID_Generator *ID_Generator);
|
||
|
||
// 绘制接口
|
||
virtual void Show(void);
|
||
};
|
||
|
||
// CSV 列输出接口
|
||
class CSV_Column_Output_Connector : public Abs_Connector
|
||
{
|
||
public:
|
||
// 显式禁用默认构造
|
||
CSV_Column_Output_Connector() = delete;
|
||
|
||
// 必要构造
|
||
explicit CSV_Column_Output_Connector(Independent_ID_Generator *ID_Generator);
|
||
|
||
// 绘制接口
|
||
virtual void Show(void);
|
||
};
|
||
|
||
// ====================================节点类声明================================================
|
||
|
||
// 接口测试节点
|
||
class Connector_Test_Node : public Abs_Node
|
||
{
|
||
public:
|
||
// 显式禁用默认构造
|
||
Connector_Test_Node() = delete;
|
||
|
||
// 必要构造
|
||
Connector_Test_Node(Independent_ID_Generator *Node_ID_Generator,
|
||
Independent_ID_Generator *Connector_ID_Generator,
|
||
ImVec2 initial_position = ImVec2(0, 0));
|
||
|
||
// 绘制节点
|
||
virtual void Show(void);
|
||
|
||
// 执行处理流程
|
||
virtual bool Execute_Process(void);
|
||
};
|
||
|
||
// DLT信息输入类,起始点
|
||
class MSG_Input_Node : public Abs_Node
|
||
{
|
||
public:
|
||
// 显式禁用默认构造
|
||
MSG_Input_Node() = delete;
|
||
|
||
// 必要构造
|
||
MSG_Input_Node(Independent_ID_Generator *Node_ID_Generator,
|
||
Independent_ID_Generator *Connector_ID_Generator,
|
||
ImVec2 initial_position = ImVec2(0, 0));
|
||
|
||
// 绘制节点
|
||
virtual void Show(void);
|
||
|
||
// 执行处理流程
|
||
virtual bool Execute_Process(void);
|
||
};
|
||
|
||
#endif |