504 lines
13 KiB
C++
504 lines
13 KiB
C++
/**
|
||
* @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
|