Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00034 #include <acado/code_generation/export_templated_file.hpp>
00035 #include <acado/code_generation/templates/templates.hpp>
00036
00037 using namespace std;
00038
00039 BEGIN_NAMESPACE_ACADO
00040
00041 ExportTemplatedFile::ExportTemplatedFile( const std::string& _templateName,
00042 const std::string& _fileName,
00043 const std::string& _commonHeaderName,
00044 const std::string& _realString,
00045 const std::string& _intString,
00046 int _precision,
00047 const std::string& _commentString
00048 ) : ExportFile(_fileName, _commonHeaderName, _realString, _intString, _precision, _commentString)
00049 {
00050 folders = TEMPLATE_PATHS;
00051 templateName = _templateName;
00052 }
00053
00054 returnValue ExportTemplatedFile::fillTemplate( )
00055 {
00056 ifstream inputFile;
00057 size_t oldPos = 0;
00058 while( 1 )
00059 {
00060 size_t pos;
00061 string tmp;
00062
00063 pos = folders.find(";", oldPos);
00064 tmp = folders.substr(oldPos, pos) + "/" + templateName;
00065
00066 inputFile.open(tmp.c_str());
00067
00068 if (inputFile.is_open() == true)
00069 break;
00070
00071 if (pos == string::npos)
00072 {
00073 LOG( LVL_ERROR ) << "Unable to open the file: " << tmp << endl;
00074 return ACADOERROR( RET_DOES_DIRECTORY_EXISTS );
00075 }
00076
00077 oldPos = pos + 1;
00078 }
00079
00080 string str;
00081 while ( getline(inputFile, str) )
00082 {
00083 for (map<string, string>::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
00084 {
00085 size_t pos = 0;
00086 while ((pos = str.find(it->first, pos)) != string::npos)
00087 {
00088 str.replace(pos, it->first.length(), it->second);
00089 pos += it->second.length();
00090 }
00091 }
00092
00093 addStatement( str );
00094 addStatement( "\n" );
00095 }
00096
00097 inputFile.close();
00098
00099 return SUCCESSFUL_RETURN;
00100 }
00101
00102 CLOSE_NAMESPACE_ACADO