28 #include <boost/format.hpp>
30 #include <SimoxUtility/algorithm/string/string_tools.h>
38 const std::string& name,
39 const std::string& templates) :
42 this->namespaces = namespaces;
43 this->templates = templates;
49 CppWriterPtr w = std::dynamic_pointer_cast<CppWriter>(writer);
56 for (
const auto& meta : classes)
58 meta->writeCpp(writer);
66 if (includes.size() > 0)
68 for (
const auto& incl : includes)
70 writer->header.lineCheckDuplicate(
boost::str(boost::format(
"#include %s") % incl));
72 writer->header.line();
75 for (
const auto& ns : namespaces)
77 writer->body.startBlock(std::string(
"namespace ") + ns);
82 const std::string preSpace =
" ";
83 writer->body.line(
"/**");
85 std::vector<std::string> blockLines;
86 writer->ConvertToTextWithMaxWidth(80, docLines, blockLines);
88 for (
auto& line : blockLines)
90 writer->body.line(preSpace + line);
93 writer->body.line(
" */");
95 if (!templates.empty())
97 writer->body.line(templates);
100 writer->body.line(std::string(
"class ") +
name);
102 for (
size_t i = 0; i < inherit.size(); i++)
104 writer->body.line(
boost::str(boost::format(
"%s%s%s") % (i == 0 ?
": " :
" ") %
105 inherit.at(i) % (i < inherit.size() - 1 ?
"," :
"")),
109 writer->body.startBlock();
111 if (innerEnums.size() > 0)
113 writer->body.line(
"public:", -1);
116 for (
const auto& inner : innerEnums)
118 inner->writeCpp(writer);
123 if (innerClasses.size() > 0)
125 writer->body.line(
"protected:", -1);
128 for (
const auto& inner : innerClasses)
130 inner->writeCpp(writer);
135 if (privateFields.size() > 0)
137 writer->body.line(
"private:", -1);
140 for (
const auto& field : privateFields)
142 field->writeCpp(writer);
147 if (protectedFields.size() > 0)
149 writer->body.line(
"protected:", -1);
152 for (
const auto& field : protectedFields)
154 field->writeCpp(writer);
159 if (publicFields.size() > 0)
161 writer->body.line(
"public:", -1);
164 for (
const auto& field : publicFields)
166 field->writeCpp(writer);
171 if (ctors.size() > 0)
173 writer->body.line(
"public:", -1);
176 for (
const auto& ctor : ctors)
178 ctor->writeCpp(writer);
183 if (publicMethods.size() > 0)
185 writer->body.line(
"public:", -1);
188 for (
const auto& method : publicMethods)
190 method->writeCpp(writer);
195 writer->body.endBlock(
"; // class " +
name);
197 for (std::vector<std::string>::reverse_iterator it = namespaces.rbegin();
198 it != namespaces.rend();
201 writer->body.endBlockComment(std::string(
"namespace ") + *it);
209 publicMethods.push_back(method);
214 const std::string& doc,
215 const bool enforceBlockGeneration)
218 publicMethods.push_back(method);
225 ctors.push_back(ctor);
232 ctors.push_back(ctor);
240 ctors.push_back(ctor);
248 privateFields.push_back(field);
255 protectedFields.push_back(field);
262 publicFields.push_back(field);
269 innerClasses.push_back(innerClass);
276 innerClasses.push_back(inner);
284 innerEnums.push_back(inner);
291 innerEnums.push_back(innerEnum);
298 this->inherit.push_back(inherit);
304 includes.push_back(include);
310 return (std::find(includes.begin(), includes.end(), include) != includes.end());