pip_cmg now use forward-declaration for stream operators
This commit is contained in:
@@ -274,7 +274,18 @@ void writeClassStreamMembersIn(PIFile & f, const PICodeParser::Entity * e, int &
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool needClassStream(const PICodeParser::Entity * e) {
|
||||||
|
piForeachC (PICodeParser::Member & m, e->members) {
|
||||||
|
if (m.is_type_ptr || m.isBitfield() || !m.dims.isEmpty() || (m.visibility != PICodeParser::Public))
|
||||||
|
continue;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void makeClassStream(PIFile & f, const PICodeParser::Entity * e) {
|
void makeClassStream(PIFile & f, const PICodeParser::Entity * e) {
|
||||||
|
if (!needClassStream(e)) return;
|
||||||
f << "\nPIByteArray & operator <<(PIByteArray & s, const " << e->name << " & v) {\n";
|
f << "\nPIByteArray & operator <<(PIByteArray & s, const " << e->name << " & v) {\n";
|
||||||
f << "\tPIChunkStream cs;\n";
|
f << "\tPIChunkStream cs;\n";
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
@@ -294,18 +305,21 @@ void makeClassStream(PIFile & f, const PICodeParser::Entity * e) {
|
|||||||
|
|
||||||
|
|
||||||
void makeClassStreamHeader(PIFile & f, const PICodeParser::Entity * e) {
|
void makeClassStreamHeader(PIFile & f, const PICodeParser::Entity * e) {
|
||||||
PIStringList ml;
|
if (!needClassStream(e)) return;
|
||||||
piForeachC (PICodeParser::Member & m, e->members) {
|
f << "\n";
|
||||||
if (m.is_type_ptr) continue;
|
PIStringList sl = e->name.split("::");
|
||||||
ml << m.name;
|
for (int i = 0; i < sl.size_s() - 1; ++i)
|
||||||
}
|
f << "namespace " << sl[i] << " {";
|
||||||
if (ml.isEmpty()) return;
|
f << e->type << " " << sl.back() << ";";
|
||||||
|
if (sl.size_s() > 1) f << PIString('}').repeat(sl.size_s() - 1);
|
||||||
|
|
||||||
f << "\nPIByteArray & operator <<(PIByteArray & s, const " << e->name << " & v);";
|
f << "\nPIByteArray & operator <<(PIByteArray & s, const " << e->name << " & v);";
|
||||||
f << "\nPIByteArray & operator >>(PIByteArray & s, " << e->name << " & v);\n";
|
f << "\nPIByteArray & operator >>(PIByteArray & s, " << e->name << " & v);\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void makeGetterType(PIFile & f, const PICodeParser::Entity * e) {
|
void makeGetterType(PIFile & f, const PICodeParser::Entity * e) {
|
||||||
|
if (!needClassStream(e)) return;
|
||||||
f << "\nconst char * getterType" << toCName(e->name) << "(const char * name) {\n";
|
f << "\nconst char * getterType" << toCName(e->name) << "(const char * name) {\n";
|
||||||
f << "\tif (!name) return \"\";\n";
|
f << "\tif (!name) return \"\";\n";
|
||||||
piForeachC (PICodeParser::Member & m, e->members) {
|
piForeachC (PICodeParser::Member & m, e->members) {
|
||||||
@@ -318,6 +332,7 @@ void makeGetterType(PIFile & f, const PICodeParser::Entity * e) {
|
|||||||
|
|
||||||
|
|
||||||
void makeGetterValue(PIFile & f, const PICodeParser::Entity * e) {
|
void makeGetterValue(PIFile & f, const PICodeParser::Entity * e) {
|
||||||
|
if (!needClassStream(e)) return;
|
||||||
f << "\nPIByteArray getterValue" << toCName(e->name) << "(const void * p, const char * name) {\n";
|
f << "\nPIByteArray getterValue" << toCName(e->name) << "(const void * p, const char * name) {\n";
|
||||||
f << "\tPIByteArray ret;\n";
|
f << "\tPIByteArray ret;\n";
|
||||||
f << "\tif (!p || !name) return ret;\n";
|
f << "\tif (!p || !name) return ret;\n";
|
||||||
@@ -365,8 +380,8 @@ void writeModel(PICodeParser & parser, PICLI & cli, const PIString out, bool met
|
|||||||
f << "#include <string.h>\n";
|
f << "#include <string.h>\n";
|
||||||
if (streams || texts)
|
if (streams || texts)
|
||||||
f << "#include <pichunkstream.h>\n";
|
f << "#include <pichunkstream.h>\n";
|
||||||
f << "#include \"" << out << ".h\"\n";
|
f << "#include \"" << out << ".h\"";
|
||||||
if (inc_cpp) f << inc_string;
|
f << inc_string << "\n";
|
||||||
f << "\nusing namespace PICodeInfo;\n\n";
|
f << "\nusing namespace PICodeInfo;\n\n";
|
||||||
|
|
||||||
if (meta || enums || getters) {
|
if (meta || enums || getters) {
|
||||||
@@ -431,8 +446,7 @@ void writeModel(PICodeParser & parser, PICLI & cli, const PIString out, bool met
|
|||||||
f << "// \"" << _a << "\"\n";
|
f << "// \"" << _a << "\"\n";
|
||||||
f << "\n";
|
f << "\n";
|
||||||
f << "#ifndef " << defname << "\n#define " << defname << "\n\n";
|
f << "#ifndef " << defname << "\n#define " << defname << "\n\n";
|
||||||
f << "#include \"pivariant.h\"\n#include \"picodeinfo.h\"";
|
f << "#include <pivariant.h>\n#include <picodeinfo.h>";
|
||||||
if (inc_h) f << inc_string;
|
|
||||||
if (streams) {
|
if (streams) {
|
||||||
f << "\n\n// Stream operators\n";
|
f << "\n\n// Stream operators\n";
|
||||||
piForeachC (PICodeParser::Entity * e, parser.entities) {
|
piForeachC (PICodeParser::Entity * e, parser.entities) {
|
||||||
|
|||||||
Reference in New Issue
Block a user