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

Method GenerateFlags

source/generator_go.cpp:5088–5298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5086}
5087
5088void GeneratorGo::GenerateFlags(const std::shared_ptr<Package>& p, const std::shared_ptr<FlagsType>& f, const CppCommon::Path& path)
5089{
5090 std::string flags_name = ConvertToUpper(*f->name);
5091
5092 // Generate the output file
5093 CppCommon::Path output = path / (flags_name + ".go");
5094 WriteBegin();
5095
5096 // Generate header
5097 GenerateHeader(CppCommon::Path(_input).filename().string());
5098
5099 // Generate package
5100 WriteLine();
5101 WriteLineIndent("package " + *p->name);
5102
5103 // Generate imports
5104 WriteLine();
5105 WriteLineIndent("import \"strings\"");
5106 GenerateImports(p);
5107
5108 std::string flags_type = (f->base && !f->base->empty()) ? *f->base : "int32";
5109
5110 // Generate flags key
5111 WriteLine();
5112 WriteLineIndent("// " + flags_name + " flags key");
5113 WriteLineIndent("type " + flags_name + "Key " + ConvertEnumType(flags_type));
5114
5115 // Generate flags key String() method
5116 WriteLine();
5117 WriteLineIndent("// Convert " + flags_name + " flags key to string");
5118 WriteLineIndent("func (k " + flags_name + "Key) String() string {");
5119 Indent(1);
5120 WriteLineIndent("return " + flags_name + "(k).String()");
5121 Indent(-1);
5122 WriteLineIndent("}");
5123
5124 // Generate flags type
5125 WriteLine();
5126 WriteLineIndent("// " + flags_name + " flags");
5127 WriteLineIndent("type " + flags_name + " " + ConvertEnumType(flags_type));
5128
5129 // Generate flags body
5130 if (f->body)
5131 {
5132 WriteLine();
5133 WriteLineIndent("// " + flags_name + " flags values");
5134 WriteLineIndent("//noinspection GoSnakeCaseUsage");
5135 WriteLineIndent("const (");
5136 Indent(1);
5137
5138 for (const auto& value : f->body->values)
5139 {
5140 WriteIndent(flags_name + "_" + *value->name + " = " + flags_name + "(");
5141 if (value->value)
5142 {
5143 if (value->value->constant && !value->value->constant->empty())
5144 Write(ConvertEnumConstant(flags_name, flags_type, *value->value->constant));
5145 else if (value->value->reference && !value->value->reference->empty())

Callers

nothing calls this directly

Calls 4

beginMethod · 0.80
endMethod · 0.80
stringMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected