DLT_Splitter/Inc/Nodes_And_Connectors.hpp

214 lines
5.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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