MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / GenerateStructFinalModel

Method GenerateStructFinalModel

source/generator_go.cpp:6695–7012  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6693}
6694
6695void GeneratorGo::GenerateStructFinalModel(const std::shared_ptr<Package>& p, const std::shared_ptr<StructType>& s, const CppCommon::Path& path)
6696{
6697 std::string struct_name = ConvertToUpper(*s->name);
6698 std::string final_model_name = "FinalModel" + struct_name;
6699
6700 // Generate the output file
6701 CppCommon::Path output = path / (final_model_name + ".go");
6702 WriteBegin();
6703
6704 // Generate header
6705 GenerateHeader(CppCommon::Path(_input).filename().string());
6706
6707 // Generate package
6708 WriteLine();
6709 WriteLineIndent("package " + *p->name);
6710
6711 // Generate imports
6712 WriteLine();
6713 GenerateImports(p);
6714
6715 std::string base_type = (s->base && !s->base->empty()) ? ConvertTypeName(*s->base, false) : "";
6716 std::string base_final_model = (s->base && !s->base->empty()) ? ConvertModelName(*s->base, "FinalModel") : "";
6717 std::string base_final_name = "FinalModel" + ConvertBaseName(base_type);
6718
6719 // Generate struct final model type
6720 WriteLine();
6721 WriteLineIndent("// Fast Binary Encoding " + struct_name + " final model");
6722 WriteLineIndent("type " + final_model_name + " struct {");
6723 Indent(1);
6724 WriteLineIndent("buffer *fbe.Buffer // Final model buffer");
6725 WriteLineIndent("offset int // Final model buffer offset");
6726 if ((s->base && !s->base->empty()) || (s->body && !s->body->fields.empty()))
6727 {
6728 WriteLine();
6729 if (!base_type.empty())
6730 WriteLineIndent("*" + base_final_model);
6731 if (s->body)
6732 for (const auto& field : s->body->fields)
6733 WriteLineIndent(ConvertToUpper(*field->name) + " *" + ConvertTypeFieldDeclaration(*field, true));
6734 }
6735 Indent(-1);
6736 WriteLineIndent("}");
6737
6738 // Generate struct final model constructor
6739 WriteLine();
6740 WriteLineIndent("// Create a new " + struct_name + " final model");
6741 WriteLineIndent("func New" + final_model_name + "(buffer *fbe.Buffer, offset int) *" + final_model_name + " {");
6742 Indent(1);
6743 WriteLineIndent("fbeResult := " + final_model_name + "{buffer: buffer, offset: offset}");
6744 if (!base_type.empty())
6745 WriteLineIndent("fbeResult." + base_final_name + " = " + ConvertModelName(*s->base, "NewFinalModel") + "(buffer, 0)");
6746 if (s->body)
6747 for (const auto& field : s->body->fields)
6748 WriteLineIndent("fbeResult." + ConvertToUpper(*field->name) + " = " + ConvertTypeFieldInitialization(*field, "0", true));
6749 WriteLineIndent("return &fbeResult");
6750 Indent(-1);
6751 WriteLineIndent("}");
6752

Callers

nothing calls this directly

Calls 2

stringMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected