/* * SpecialModuleDecompose.h * * Created on: Mar 12, 2015 * Author: dev */ #ifndef PAI_FRAME_WORKFLOWENGINE_SPECIALMODULEDECOMPOSE_H #define PAI_FRAME_WORKFLOWENGINE_SPECIALMODULEDECOMPOSE_H #include "WorkFlowFileWrapper.h" #include "WorkFlowFile.h" #include "UnrelateWorkFlowFileHelper.h" #include "ModuleConnection.h" #include "ModuleInformation.h" #include "WorkFlowDecompose.h" #include #include class SpecialModuleDecomposeTest; namespace pai{ namespace workflow{ class CSpecialModuleDecompose:public CWorkFlowDecompose { public: CSpecialModuleDecompose(const int &startModuleId); virtual ~CSpecialModuleDecompose(); /** * @brief 拆分工作流的入口函数,其他类需要实现此函数进行分类处理 * @param[in] workflowFileWrapper */ virtual void DecomposeWorkFlowFile(CWorkFlowFileWrapper* workflowFileWrapper); private: /** * @brief 对有特殊模块的工作流进行拆分 *@param[in] workflowFile 原始的CWorkFlowFile的备份 */ void InternalDecomposeWorkFlowFile(CWorkFlowFile* workflowFile); /** * @brief 处理特殊模块,在特殊模块的直接下游添加input和output,将工作流拆分成两个 *@param[in] workflowFile 原始的CWorkFlowFile的备份 *@param[in] moduleID *@param[in] moduleSize 如果等于1,则判断下面是否直接连着output模块 */ void ProcessDownStreamModule(CWorkFlowFile* workflowFile, const int moduleID, const int moduleSize); /** * @brief 处理特殊模块,处理特殊模块的所有上游模块的id存在多个connection(sourceid=模块id)情况 *@param[in] workflowFile 原始的CWorkFlowFile的备份 *@param[in] moduleID */ void ProcessUpStreamModule(CWorkFlowFile* workflowFile, const int moduleID); /** * @brief 从workflowFile中获取所有特殊模块,保存到specialModules中 *@param[in] workflowFile *@return */ std::vector GetSpecialModules(CWorkFlowFile* workflowFile); private: std::vector spcialModuleNameList; std::map inputId2InputPath;//保存临时输入模块id-》输入路径 friend class ::SpecialModuleDecomposeTest; }; } } #endif /* SPECIALMODULEDECOMPOSE_H_ */