/** * @file ModuleMetaData.h * @brief 文件定义了模块的元数据模型 * @author dev * @date 2011-8-29 */ #ifndef PAI_FRAME_MODULEAPI_MODULEMETADATA_H #define PAI_FRAME_MODULEAPI_MODULEMETADATA_H #include #include #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& vecInputPorts); /** * @brief 得到所有的输出端口信息 * @param[in][out] vecOutputPorts 所有的输出端口信息的容器 */ void GetOutputPorts(std::vector& 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 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 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