logplus/Workflow/WFEngine/Module/include/ModuleMetaData.h
2026-01-16 17:18:41 +08:00

504 lines
13 KiB
C++
Raw Permalink 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.

/**
* @file ModuleMetaData.h
* @brief 文件定义了模块的元数据模型
* @author dev
* @date 2011-8-29
*/
#ifndef PAI_FRAME_MODULEAPI_MODULEMETADATA_H
#define PAI_FRAME_MODULEAPI_MODULEMETADATA_H
#include <string>
#include <vector>
#include "ParameterItem.h"
#include "Turtle.h"
namespace Json {
class Value;
}
namespace pai {
namespace module {
typedef AcceptDropType OutputType;
/**
* @brief 模块端口的种类
*/
enum PortType
{
PORT_INPUT, /**< 输入端口*/
PORT_OUTPUT, /**< 输出端口*/
};
/**
* @class Port
* @brief 模块端口
*/
class PAI_MODULE_EXPORT Port
{
public:
/**
* @brief 构造方法
*/
Port();
int order; /**< */
PortType type; /**< 端口类型 */
std::string connectedModuleType; /**< 表示每个端口可接模块的类型如Trace */
std::string name; /**< */
bool optional; /**< */
};
/**
* @class CModuleMetaData
* @brief 模块的元信息,不包括参数部分
*/
class PAI_MODULE_EXPORT CModuleMetaData
{
public:
/**
* @brief 构造函数
*/
CModuleMetaData();
/*
* @brief 虚析构函数
*/
virtual ~CModuleMetaData();
/**
* @brief 设置模块分类名
* @param[in] strCategory 模块分类名
*/
void SetCategory(const std::string& strCategory);
/**
* @brief 获取模块分类名
* @return 分类名
*/
std::string GetCategory() const;
/**
* @brief 设置模块ID
* @param[in] strID 模块ID
*/
void SetID(const std::string& strID);
/**
* @brief 获取模块ID
* @return 模块ID
*/
std::string GetID() const;
/**
* @brief 设置模块名字
* @param[in] strName 模块名字
*/
void SetName(const std::string& strName);
/**
* @brief 获取模块名字
* @return 模块名字
*/
std::string GetName() const;
/**
* @brief 设置模块描述
* @param[in] strDescription 模块描述
*/
void SetDescription(const std::string& strDescription);
/**
* @brief 获取模块描述
* @return 模块描述
*/
std::string GetDescription() const;
/**
* @brief 设置作者名称
* @param[in] strAuthor 作者名称
*/
void SetAuthor(const std::string& strAuthor);
/**
* @brief 获取作者信息
* @return 作者信息
*/
std::string GetAuthor() const;
/**
* @brief 设置模块创建时间
* @param[in] strCreateTime 创建时间
*/
void SetCreateTime(const std::string& strCreateTime);
/**
* @brief 获取创建时间
* @return 创建时间
*/
std::string GetCreateTime() const;
/**
* @brief 设置模块上次修改时间
* @param[in] strModifyTime 模块修改时间
*/
void SetLastModifyTime(const std::string& strLastModifyTime);
/**
* @brief 获取上次修改时间
* @return 上次修改时间
*/
std::string GetLastModifyTime() const;
/**
* @brief 设置版本号
* @param[in] strVersion 版本号
*/
void SetVersion(const std::string& strVersion);
/**
* @brief 获取版本号
* @return 版本号
*/
std::string GetVersion() const;
/**
* @brief 设置子类型
* @param[in] strSubCategory 子类型
*/
void SetSubCategory(const std::string& strSubCategory);
/**
* @brief 获取子类型
* @return 子类型
*/
std::string GetSubCategory() const;
/**
* @brief 设置帮助文档名
* @param[in] strHelpDoc 帮助文档名
*/
void SetHelpDoc(const std::string& strHelpDoc);
/**
* @brief 获取帮助文档名
* @return 帮助文档名
*/
std::string GetHelpDoc()const;
/**
* @brief 设置维数
* @param[in] strDimension 维数
*/
void SetDimension(const std::string& strDimension);
/**
* @brief 获取维数
* @brief 维数
*/
std::string GetDimension() const;
/**
* @brief 设置定义域
* @param[in] strDomain 定义域
*/
void SetDomain(const std::string& strDomain);
/**
* @brief 获取定义域
* @return 定义域
*/
std::string GetDomain() const;
/**
* @brief 设置输入数据定义域
* @param[in] strInputDomain 输入数据定义域
*/
void SetInputDomain(const std::string& strInputDomain);
/**
* @brief 获取输入数据定义域
* @return 输入数据定义域
*/
std::string GetInputDomain() const;
/**
* @brief 设置输出数据定义域
* @param[in] strOutputDomain 设置输出数据定义域
*/
void SetOutputDomain(const std::string& strOutputDomain);
/**
* @brief 获取输出数据定义域
* @return 输出数据定义域
*/
std::string GetOutputDomain() const;
/**
* @brief 设置工作单位名
* @param[in] strWorkUnit 工作单位名称
*/
void SetWorkUnit(const std::string& strWorkUnit);
/**
* @brief 获取工作单位名称
* @return 工作单位名称
*/
std::string GetWorkUnit() const;
/**
* @brief 是否有输入端口
* @param[in] bInput 如果是true表示有输入,否则无.
*/
void SetHasInput(const bool& bHasInput);
/**
* @brief 获取是否有输入端口
* @return 有输入端口则返回true否则返回false
*/
bool GetHasInput() const;
/**
* @brief 是否有输出端口
* @param[in] bOutput 如果是true表示有输出,否则无.
*/
void SetHasOutput(const bool& bHasOutput);
/**
* @brief 获取是否有输出端口信息
* @return 有输出端口则返回true否则返回false
*/
bool GetHasOutput() const;
/**
* @brief 设置输入输出类型
* @param[in] strIOType 输入输出类型
*/
void SetIOType(const std::string& strIOType);
/**
* @brief 获取输入输出类型
* @return 输入输出类型
*/
std::string GetIOType() const;
/**
* @brief 设置是否需要其他文件
* @param[in] bNeedOtherFile 如果true表示需要其他文件,否则不需要.
*/
void SetNeedOtherFile(const bool& bNeedOtherFile);
/**
* @brief 获取是否需要其他文件
* @return 需要其他文件则返回true否则返回false
*/
bool GetNeedOtherFile() const;
/**
* @brief 设置是否需要临时内存
* @param[in] bNeedTmpMemory 如果true表示需要临时内存,否则不需要.
*/
void SetNeedTmpMemory(const bool& bNeedTmpMemory);
/**
* @brief 获取是否需要临时内存信息
* @return 需要临时内存返回true否则返回false
*/
bool GetNeedTmpMemory() const;
/**
* @brief 设置是否需要输出其他文件
* @param[in] bNeedOutputFile 如果true表示需要输出其他文件,否则不需要.
*/
void SetNeedOutputFile(const bool& bNeedOutputFile);
/**
* @brief 获取是否需要输出其他文件信息
* @return 需要输出其他文件信息则返回true否则返回false
*/
bool GetNeedOutputFile() const;
/**
* @brief 设置是否需要参数
* @param[in] bNeedParameters 如果true表示需要参数信息,否则不需要.
*/
void SetNeedParameters(const bool& bNeedParameters);
/**
* @brief 获取是否需要参数信息
* @return 需要参数信息则返回true否则返回false
*/
bool GetNeedParameters() const;
/**
* @brief 设置是否内部激活
* @param[in] bInterActive 如果true表示需要内部激活,否则不需要.
*/
void SetIsInterActive(const bool& bInterActive);
/**
* @brief 获取是否需要内部激活信息
* @return 需要内部激活信息则返回true否则返回false
*/
bool GetIsInterActive() const;
/**
* @brief 设置计算量的相对等级
* @param[in] iCompute 计算量的相对等级分为1\2\3\4
*/
void SetComputeLevel(const double& iCompute);
/**
* @brief 获取计算的相对等级
* @return 计算的相对等级
*/
double GetComputeLevel() const;
/**
* @brief 设置内存需求的相对等级
* @param[in] iMemory 内存需求的相对等级
*/
void SetMemoryLevel(const double& iMemory);
/**
* @brief 获取内存需求的相对等级
* @return 内存需求的相对等级
*/
double GetMemoryLevel() const;
/**
* @brief 设置并行模型
* @param[in] strParallelMode 并行模型如Cpu\GPU
*/
void SetParallelMode(const std::string& strParallelMode);
/**
* @brief 获取并行模型
* @return 并行模型
*/
std::string GetParallelMode() const;
void SetNeedReduce(const bool& bReduce);
/**
* @brief 是否需要Reduce
* @return 需要则返回true否则返回false
*/
bool GetNeedReduce() const;
/**
* @brief 得到所有的输入端口信息
* @param[in][out] vecInputPorts 所有的输入端口信息的容器
*/
void GetInputPorts(std::vector<Port>& vecInputPorts);
/**
* @brief 得到所有的输出端口信息
* @param[in][out] vecOutputPorts 所有的输出端口信息的容器
*/
void GetOutputPorts(std::vector<Port>& vecOutputPorts);
/**
* @brief 添加端口信息
* @param[in] port 新的端口信息
*/
void AddPort(const Port& port);
/**
* @brief 对指定类型的端口进行批量添加每个端口的名字默认为其在该类型端口中的index.
* @param[in] ePortType 端口类型
* @param[in] iPortCount 该种类型的端口数量
*/
void AddPorts(PortType ePortType,int iPortCount);
/**
* @brief 获取动态库的名字
* @return 动态库的名字
*/
std::string GetStrLibName() const;
/**
* @brief 获取命名空间
* @return 命名空间
*/
std::string GetStrNameSpace() const;
void SetStrLibName(std::string m_strLibName);
void SetStrNameSpace(std::string m_strNameSpace);
/**
* @brief 解析元数据信息从json对象
* @param[in] rMeta json对象
*/
void LoadFromJsonObject(const Json::Value& rMeta);
/**
* @brief 从Json文件中读取模块IO信息
* @param[in] pIO 端口类型
* @param[in] root json对象
*/
void LoadIOFromJsonObject(const PortType pIO, const Json::Value& root);
/**
* @brief 得到模块能够兼容的pai系统的版本号
* @return 模块能够兼容的pai系统的版本号
*/
std::string GetPaiVersion() const;
/**
* @brief 设定模块能够兼容的pai系统版本号
* @param[in] m_strPaiVersion pai系统版本号
*/
void SetPaiVersion(std::string m_strPaiVersion);
/**
* @brief 添加参数项输入控件的允许拖拽进的类型
* @param[in] acceptDropTypes 参数项输入控件允许拖拽的类型
*/
void AddOutputType(OutputType outputType);
/**
* @brief 获取参数项输入控件允许拖拽进哪些类型的数据的类型集合
* @return 参数项输入控件允许拖拽进哪些类型的数据的类型集合
*/
// std::vector<OutputType> GetOutputTypes() const ;
/**
* @brief 设定模块并行阶段数,默认是"1",本参数由模块的json文件自己带过来尽量不要更改
* @param[in] stageNum模块并行阶段数
*/
void SetStageNum(std::string stageNum);
/**
* @brief 获取模块并行阶段数,默认是"1"
* @return 模块并行阶段数
*/
std::string GetStageNum() const;
/**
* @brief 设定模块在哪些阶段需要自己切片,默认为空,采用系统默认的切片方式,本参数由模块的json文件自己带过来尽量不要更改
* @param[in] SplitStage 模块在哪些阶段需要自己切片
*/
void SetSplitStage(std::string SplitStage);
/**
* @brief 获取模块在哪些阶段需要自己切片
* @return 模块在哪些阶段需要自己切片
*/
std::string GetSplitStage() const;
/**
* @brief 获取模块的输入口个数
* @return 模块的输入口个数
*/
int GetInputPortCount();
/**
* @brief 获取模块的输出口个数
* @return 模块的输出口个数
*/
int GetOutputPortCount();
private:
std::string RemoveSpace(std::string str);
private:
std::vector<Port> m_vecPorts;
std::string m_strCategory;//模块分类名
std::string m_strID;//模块ID
std::string m_strNameSpace;//模块命名空间
std::string m_strLibName;//模块编译结果库名
std::string m_strName;//模块名字
std::string m_strDescription;//模块描述
std::string m_strAuthor;//模块作者名
std::string m_strCreateTime;//模块创建日期
std::string m_strLastModifyTime;//模块上次修改日期
std::string m_strVersion;//模块版本号
std::string m_strPaiVersion;//Pai版本号
std::string m_strSubCategory;//模块子类型
std::string m_strHelpDoc;//模块帮助文档名
std::string m_strDimension;//模块空间维数
std::string m_strDomain;//工作域
std::string m_strInputDataDomain;//输入数据域
std::string m_strOuputDataDomain;//输出数据域
std::string m_strWorkUnit;//基本工作单元
bool m_bHasInput;//是否输入数据流
bool m_bHasOutput;//是否输出数据流
std::string m_strIOType;//模块I/O模式
bool m_bNeedOtherFile;//是否读入其他数据文件
bool m_bNeedTmpMemory;//是否需要使用临时空间
bool m_bOutputOtherFile;//是否输出其他文件
bool m_bNeedParameters;//是否带参数
bool m_bIsInterActive;//是否交互处理模块
double m_iCompute;//计算量指数1-4之间值表示计算量的相对大小
double m_iMemory;//内存指数1-4之间值表示计算量的相对大小
std::string m_strParalleMode;//并行方式
bool m_bNeedReduce;//是否实现reduce方法
int m_iOutputTypes;//该模块的输出数据的数据类型
std::string m_strStageNum;//模块并行阶段数
std::string m_SplitStage;//模块哪些阶段需要切片
};
}
}
#endif