120 lines
4.5 KiB
C++
120 lines
4.5 KiB
C++
/*
|
|
* TemplateInformationImpl.h
|
|
*
|
|
* Created on: Jul 29, 2011
|
|
* Author: dev
|
|
*/
|
|
|
|
#ifndef PAI_FRAME_WORKFLOWENGINE_CTEMPLATEINFORMATIONIMPL_H
|
|
#define PAI_FRAME_WORKFLOWENGINE_CTEMPLATEINFORMATIONIMPL_H
|
|
|
|
|
|
#include "Module.h"
|
|
#include "TemplateInformation.h"
|
|
#include "WorkFlowFile.h"
|
|
#include "GenerateInfo.h"
|
|
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <set>
|
|
#include <map>
|
|
|
|
//using workflow::CWorkFlowFile;
|
|
//using workflow::CModuleInformation;
|
|
|
|
namespace pai {
|
|
namespace workflow {
|
|
|
|
class CTemplateInformationImpl: public CTemplateInformation {
|
|
public:
|
|
CTemplateInformationImpl(CGenerateInfo* info);
|
|
virtual ~CTemplateInformationImpl();
|
|
|
|
bool IsParallelWorkflow();
|
|
bool IsMultiwaveWorkflow();
|
|
|
|
int GetSInitializationBlocks(std::vector<SInitializationBlock>& blocks);
|
|
int GetInputBufferStatements(std::vector<SSettingInputBufferStatement>& statements);
|
|
int GetOutputBufferStatements(std::vector<SSettingOutputBufferStatement>& statements);
|
|
int GetNewBufferStatements(std::vector<SNewBufferStatement>& statements);
|
|
|
|
|
|
int GetReduceInitializationBlocks(std::vector<SInitializationBlock>& blocks);
|
|
int GetReduceNewBufferStatements(std::vector<SNewBufferStatement>& statements);
|
|
int GetReduceInputBufferStatements(std::vector<SSettingInputBufferStatement>& statements);
|
|
int GetReduceOutputBufferStatements(std::vector<SSettingOutputBufferStatement>& statements);
|
|
|
|
private:
|
|
CWorkFlowFile* workflow;
|
|
std::vector<CModuleInformation*>* generalModules;
|
|
std::vector<CModuleConnection*>* generalConnections;
|
|
|
|
std::vector<CModuleInformation*>* reduceModules;
|
|
std::vector<CModuleConnection*>* reduceConnections;
|
|
|
|
//目前多波工作流支持的多波参数类型
|
|
std::vector<std::string> multiwaveParamTypes;
|
|
private:
|
|
CTemplateInformationImpl(const CTemplateInformationImpl &);
|
|
CTemplateInformationImpl & operator=(const CTemplateInformationImpl &);
|
|
std::string Int2String(int);
|
|
std::string CapitalizeFirstLetter(std::string);
|
|
/**
|
|
* @brief 获取拆分后的模块信息列表,并保存拆分后的模块与未拆分时的对应关系
|
|
* @param 未拆分的模块信息列表
|
|
* @param 拆分后模块与之前的对应关系
|
|
* @param 拆分后的模块信息列表
|
|
*/
|
|
void GetComponentModules(vector<CModuleInformation *> *, multimap<int, int> *, vector<CModuleInformation *> *);
|
|
/**
|
|
* @brief 获取拆分后的模块连接信息列表
|
|
* @param 未拆分的模块连接信息列表
|
|
* @param 拆分后模块与之前的对应关系
|
|
* @param 拆分后的模块连接信息列表
|
|
*/
|
|
void GetComponentConnections(vector<CModuleConnection *> *, multimap<int, int> *, vector<CModuleConnection *> *);
|
|
/**
|
|
* @brief 将容器T2中的元素合并到T1中
|
|
* @param 目标容器
|
|
* @param 源容器
|
|
*/
|
|
template<class T1, class T2>
|
|
void MergeCollectionToFirst(T1 *t1, T2 *t2);
|
|
|
|
void CopyModules2Collection(vector<CModuleInformation *> *src, vector<CModuleInformation *> *dest);
|
|
|
|
void CopyConns2Collection(vector<CModuleConnection *> *src, vector<CModuleConnection *> *dest);
|
|
|
|
int GetCommonInitializationBlocks(std::vector<SInitializationBlock>& blocks,
|
|
std::vector<CModuleInformation*>* modules,
|
|
std::vector<CModuleConnection*>* connections);
|
|
int GetCommonNewBufferStatements(std::vector<SNewBufferStatement>& statements,
|
|
std::vector<CModuleInformation*>* modules,
|
|
std::vector<CModuleConnection*>* connections,
|
|
const std::string& realOutputModuleClassname);
|
|
int GetCommonInputBufferStatements(std::vector<SSettingInputBufferStatement>& statements,
|
|
std::vector<CModuleInformation*>* modules,
|
|
std::vector<CModuleConnection*>* connections);
|
|
int GetCommonOutputBufferStatements(std::vector<SSettingOutputBufferStatement>& statements,
|
|
std::vector<CModuleInformation*>* modules,
|
|
std::vector<CModuleConnection*>* connections,
|
|
const std::string& realOutputModuleClassname);
|
|
/**
|
|
* 获取树形结构的ModuleParameter
|
|
*/
|
|
void GetModuleParameterStatment(CModuleParameter* parameter, SInitializationBlock& initblockstatment);
|
|
void GetModuleParameterStatment(CParameterItem* item, SModuleParameterStatment& statment,const std::string& parentItemVariableName,const std::string& moduleVariableName,int& index);
|
|
std::string GetParamItemStringType(const CParameterItem* item);
|
|
|
|
void SeparateMultiwaveWorkflow(vector<CModuleInformation*> *, vector<CModuleConnection*> *);
|
|
void Print();
|
|
std::string GetBufferName(CModuleConnection* connection);
|
|
std::string GetLeafBufferName(CModuleInformation* moduleInfo);
|
|
std::string GetModuleVariableName(CModuleInformation* moduleInfo);
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|