| 33 | }; |
| 34 | |
| 35 | void generate_cpp(const std::vector<DefFile> &files,const QString &group_name,const QString &tgt_dir) |
| 36 | { |
| 37 | QFile tgt_file(tgt_dir+"/" + group_name+".gen.cpp"); |
| 38 | tgt_file.open(QFile::WriteOnly); |
| 39 | QTextStream tgt_stream(&tgt_file); |
| 40 | tgt_stream << "// THIS FILE WAS GENERATED, DO NOT EDIT\n"; |
| 41 | if(group_name=="MapServerEvents") |
| 42 | { |
| 43 | tgt_stream << "#include \"BitStream.h\"\n"; |
| 44 | } |
| 45 | for(const DefFile &d : files) |
| 46 | { |
| 47 | tgt_stream << QString("#include \"%1\"\n\n").arg(d.source_name); |
| 48 | } |
| 49 | |
| 50 | tgt_stream << QString("#include \"SEGSEventFactory.h\"\n"); |
| 51 | tgt_stream << "#include \"serialization_common.h\"\n\n"; |
| 52 | tgt_stream << "#include \"serialization_types.h\"\n\n"; |
| 53 | tgt_stream << "using namespace SEGSEvents;\n\n"; |
| 54 | for(const DefFile &d : files) |
| 55 | { |
| 56 | for(const DefEvent &ev : d.events) |
| 57 | { |
| 58 | tgt_stream << "template<class Archive>\n"; |
| 59 | if(ev.elements.empty()) |
| 60 | tgt_stream << QString("void %1::serialize(Archive &)").arg(ev.name); |
| 61 | else |
| 62 | tgt_stream << QString("void %1::serialize(Archive & archive)").arg(ev.name); |
| 63 | tgt_stream << "{\n"; |
| 64 | for(const DefElement &el : ev.elements) |
| 65 | { |
| 66 | QString internal_field_name = el.name; |
| 67 | if(internal_field_name.startsWith("m_")) |
| 68 | internal_field_name = internal_field_name.mid(2); |
| 69 | tgt_stream << QString(" archive(cereal::make_nvp(\"%1\",%2));\n").arg(internal_field_name,el.name); |
| 70 | } |
| 71 | tgt_stream << "}\n"; |
| 72 | tgt_stream << QString("SPECIALIZE_SERIALIZATIONS(%1)\n").arg(ev.name); |
| 73 | } |
| 74 | } |
| 75 | tgt_stream << "\n"; |
| 76 | tgt_stream << QString("void register_%1()\n").arg(group_name); |
| 77 | tgt_stream << "{\n"; |
| 78 | for(const DefFile &d : files) |
| 79 | { |
| 80 | for(const DefEvent &ev : d.events) |
| 81 | { |
| 82 | tgt_stream << QString("register_event_type(\"%1\",ev%1,[]()->Event * { return new %1;});\n").arg(ev.name); |
| 83 | } |
| 84 | } |
| 85 | tgt_stream << "}\n"; |
| 86 | } |
| 87 | |
| 88 | bool extract_annotated(const QString &hdr_contents,DefFile &tgt) |
| 89 | { |