/* * WorkflowGenerator.h * * Created on: Jul 28, 2011 * Author: dev */ #ifndef PAI_FRAME_WORKFLOWENGINE_CWORKFLOWGENERATOR_H #define PAI_FRAME_WORKFLOWENGINE_CWORKFLOWGENERATOR_H #include #include "TemplateInformation.h" #include "ConfigureManager.h" #include using ctemplate::TemplateDictionary; using pai::workflow::CTemplateInformation; namespace pai { namespace workflow { /** *@brief 代码生成器类 *模板文件定义了逻辑与文本分离的两种文件格式 *此类是工作流代码生成器的核心,在此类中完成模板文件(.tpl格式)中 *逻辑部分(缺省值)的代码实现,通过Data dictionary将文本代码与 *逻辑代码匹配,从而生成代码文件。 */ class CWorkflowGenerator { public: CWorkflowGenerator(const std::string&, const std::string&); CWorkflowGenerator(); virtual ~CWorkflowGenerator(); /**@brief 生成工作流代码,完成模板逻辑信息的具体实现。 * 在此函数中构建模板的Data dictionary,给出模板信息中variable与section的具体实现形式, * 完成模板逻辑信息的替换。 * @param[in] info * @see CTemplateInformation */ void Generate(CTemplateInformation* info); /** * @brief 生成工作流代码Buff * 在此函数中构建模板的Data dictionary,给出模板信息中variable与section的具体实现形式, * 完成模板逻辑信息的替换。 * @param[in] cTemplateInfo 填充的内容 * @param[in/out] strOutContent 填充模板后的内容 */ void GenerateBuff(CTemplateInformation* cTemplateInfo,std::string& strOutContent); private: void WriteToFile(const std::string& strOutContent); void GetCurrentContent(std::string& strOutContent); void InitWorkflow(TemplateDictionary* parentDict); void FillModulesStatements(TemplateDictionary* parentDict); void FillModuleStatment(TemplateDictionary* parentDict,pai::workflow::SInitializationBlock& block); void FillStandardModuleParamBlocks(TemplateDictionary* parentDict,pai::workflow::SInitializationBlock& block); void FillNewBufferStatements(TemplateDictionary* parentDict); void FillOutputBufferStatements(TemplateDictionary* parentDict); void FillInputBufferStatements(TemplateDictionary* parentDict); CWorkflowGenerator(const CWorkflowGenerator & generator); CWorkflowGenerator & operator=(const CWorkflowGenerator & generator); private: std::string cppfile; ctemplate::TemplateDictionary* rootDictionary; std::vector initializationBlocks; std::vector nextModuleStatements; std::vector inputBufferStatements; std::vector outputBufferStatements; std::vector newBufferStatements; }; } } #endif