diff --git a/cmd/protoc-gen-cpp-tableau-loader/helper/helper.go b/cmd/protoc-gen-cpp-tableau-loader/helper/helper.go index cc42bcad..8f2b2796 100644 --- a/cmd/protoc-gen-cpp-tableau-loader/helper/helper.go +++ b/cmd/protoc-gen-cpp-tableau-loader/helper/helper.go @@ -152,3 +152,7 @@ func GenGetArguments(keys []MapKey) string { } return params } + +func Indent(depth int) string { + return strings.Repeat(" ", depth) +} diff --git a/cmd/protoc-gen-cpp-tableau-loader/hub.go b/cmd/protoc-gen-cpp-tableau-loader/hub.go index c74fe51f..2efe93e6 100644 --- a/cmd/protoc-gen-cpp-tableau-loader/hub.go +++ b/cmd/protoc-gen-cpp-tableau-loader/hub.go @@ -97,7 +97,7 @@ func generateHubHppTplSpec(gen *protogen.Plugin, g *protogen.GeneratedFile, prot func generateHubHppMsgContainerMembers(gen *protogen.Plugin, g *protogen.GeneratedFile, protofiles []string, fileMessagers map[string][]string) { for _, proto := range protofiles { for _, messager := range fileMessagers[proto] { - g.P(" std::shared_ptr<", messager, "> ", strcase.ToSnake(messager), "_;") + g.P(helper.Indent(1), "std::shared_ptr<", messager, "> ", strcase.ToSnake(messager), "_;") } } } @@ -114,7 +114,7 @@ func generateHubCppTplSpec(gen *protogen.Plugin, g *protogen.GeneratedFile, prot for _, messager := range fileMessagers[proto] { g.P("template <>") g.P("const std::shared_ptr<", messager, "> Hub::Get<", messager, ">() const {;") - g.P(" return GetMessagerContainer()->", strcase.ToSnake(messager), "_;") + g.P(helper.Indent(1), "return GetMessagerContainer()->", strcase.ToSnake(messager), "_;") g.P("}") g.P() } @@ -124,7 +124,7 @@ func generateHubCppTplSpec(gen *protogen.Plugin, g *protogen.GeneratedFile, prot func generateHubCppMsgContainerCtor(gen *protogen.Plugin, g *protogen.GeneratedFile, protofiles []string, fileMessagers map[string][]string) { for _, proto := range protofiles { for _, messager := range fileMessagers[proto] { - g.P(" ", strcase.ToSnake(messager), "_ = std::dynamic_pointer_cast<", messager, `>((*msger_map_)["`, messager, `"]);`) + g.P(helper.Indent(1), strcase.ToSnake(messager), "_ = std::dynamic_pointer_cast<", messager, `>((*msger_map_)["`, messager, `"]);`) } } } @@ -132,7 +132,7 @@ func generateHubCppMsgContainerCtor(gen *protogen.Plugin, g *protogen.GeneratedF func generateHubCppRegistry(gen *protogen.Plugin, g *protogen.GeneratedFile, protofiles []string, fileMessagers map[string][]string) { for _, proto := range protofiles { for _, messager := range fileMessagers[proto] { - g.P(" Register<", messager, ">();") + g.P(helper.Indent(1), "Register<", messager, ">();") } } } diff --git a/cmd/protoc-gen-cpp-tableau-loader/index.go b/cmd/protoc-gen-cpp-tableau-loader/index.go index e33ef465..aa8fd969 100644 --- a/cmd/protoc-gen-cpp-tableau-loader/index.go +++ b/cmd/protoc-gen-cpp-tableau-loader/index.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "strings" "github.com/iancoleman/strcase" "github.com/tableauio/loader/cmd/protoc-gen-cpp-tableau-loader/helper" @@ -11,31 +10,31 @@ import ( ) func genHppIndexFinders(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor) { - g.P(" // Index accessers.") + g.P(helper.Indent(1), "// Index accessers.") for levelMessage := descriptor.LevelMessage; levelMessage != nil; levelMessage = levelMessage.NextLevel { for _, index := range levelMessage.Indexes { if len(index.ColFields) == 1 { // single-column index field := index.ColFields[0] // just take first field - g.P(" // Index: ", index.Index) + g.P(helper.Indent(1), "// Index: ", index.Index) g.P(" public:") vectorType := fmt.Sprintf("Index_%sVector", index.Name()) mapType := fmt.Sprintf("Index_%sMap", index.Name()) - g.P(" using ", vectorType, " = std::vector;") + g.P(helper.Indent(1), "using ", vectorType, " = std::vector;") keyType := helper.ParseCppType(field.FD) - g.P(" using ", mapType, " = std::unordered_map<", keyType, ", ", vectorType, ">;") - g.P(" const ", mapType, "& Find", index.Name(), "() const;") - g.P(" const ", vectorType, "* Find", index.Name(), "(", helper.ToConstRefType(keyType), " ", helper.ParseIndexFieldNameAsFuncParam(field.FD), ") const;") - g.P(" const ", helper.ParseCppClassType(index.MD), "* FindFirst", index.Name(), "(", helper.ToConstRefType(keyType), " ", helper.ParseIndexFieldNameAsFuncParam(field.FD), ") const;") + g.P(helper.Indent(1), "using ", mapType, " = std::unordered_map<", keyType, ", ", vectorType, ">;") + g.P(helper.Indent(1), "const ", mapType, "& Find", index.Name(), "() const;") + g.P(helper.Indent(1), "const ", vectorType, "* Find", index.Name(), "(", helper.ToConstRefType(keyType), " ", helper.ParseIndexFieldNameAsFuncParam(field.FD), ") const;") + g.P(helper.Indent(1), "const ", helper.ParseCppClassType(index.MD), "* FindFirst", index.Name(), "(", helper.ToConstRefType(keyType), " ", helper.ParseIndexFieldNameAsFuncParam(field.FD), ") const;") g.P() g.P(" private:") indexContainerName := "index_" + strcase.ToSnake(index.Name()) + "_map_" - g.P(" ", mapType, " ", indexContainerName, ";") + g.P(helper.Indent(1), mapType, " ", indexContainerName, ";") g.P() } else { // multi-column index - g.P(" // Index: ", index.Index) + g.P(helper.Indent(1), "// Index: ", index.Index) g.P(" public:") keyType := fmt.Sprintf("Index_%sKey", index.Name()) keyHasherType := fmt.Sprintf("Index_%sKeyHasher", index.Name()) @@ -43,22 +42,22 @@ func genHppIndexFinders(g *protogen.GeneratedFile, descriptor *index.IndexDescri mapType := fmt.Sprintf("Index_%sMap", index.Name()) // generate key struct - g.P(" struct ", keyType, " {") + g.P(helper.Indent(1), "struct ", keyType, " {") equality := "" for i, field := range index.ColFields { - g.P(" ", helper.ParseCppType(field.FD), " ", helper.ParseIndexFieldNameAsKeyStructFieldName(field.FD), ";") + g.P(helper.Indent(2), helper.ParseCppType(field.FD), " ", helper.ParseIndexFieldNameAsKeyStructFieldName(field.FD), ";") equality += helper.ParseIndexFieldNameAsKeyStructFieldName(field.FD) + " == other." + helper.ParseIndexFieldNameAsKeyStructFieldName(field.FD) if i != len(index.ColFields)-1 { equality += " && " } } - g.P(" bool operator==(const ", keyType, "& other) const {") - g.P(" return ", equality, ";") - g.P(" }") - g.P(" };") + g.P(helper.Indent(2), "bool operator==(const ", keyType, "& other) const {") + g.P(helper.Indent(3), "return ", equality, ";") + g.P(helper.Indent(2), "}") + g.P(helper.Indent(1), "};") // generate key hasher struct - g.P(" struct ", keyHasherType, " {") + g.P(helper.Indent(1), "struct ", keyHasherType, " {") combinedKeys := "" for i, field := range index.ColFields { key := "key." + helper.ParseIndexFieldNameAsKeyStructFieldName(field.FD) @@ -67,21 +66,21 @@ func genHppIndexFinders(g *protogen.GeneratedFile, descriptor *index.IndexDescri combinedKeys += ", " } } - g.P(" std::size_t operator()(const ", keyType, "& key) const {") - g.P(" return util::SugaredHashCombine(", combinedKeys, ");") - g.P(" }") - g.P(" };") + g.P(helper.Indent(2), "std::size_t operator()(const ", keyType, "& key) const {") + g.P(helper.Indent(3), "return util::SugaredHashCombine(", combinedKeys, ");") + g.P(helper.Indent(2), "}") + g.P(helper.Indent(1), "};") - g.P(" using ", vectorType, " = std::vector;") - g.P(" using ", mapType, " = std::unordered_map<", keyType, ", ", vectorType, ", ", keyHasherType, ">;") - g.P(" const ", mapType, "& Find", index.Name(), "() const;") - g.P(" const ", vectorType, "* Find", index.Name(), "(const ", keyType, "& key) const;") - g.P(" const ", helper.ParseCppClassType(index.MD), "* FindFirst", index.Name(), "(const ", keyType, "& key) const;") + g.P(helper.Indent(1), "using ", vectorType, " = std::vector;") + g.P(helper.Indent(1), "using ", mapType, " = std::unordered_map<", keyType, ", ", vectorType, ", ", keyHasherType, ">;") + g.P(helper.Indent(1), "const ", mapType, "& Find", index.Name(), "() const;") + g.P(helper.Indent(1), "const ", vectorType, "* Find", index.Name(), "(const ", keyType, "& key) const;") + g.P(helper.Indent(1), "const ", helper.ParseCppClassType(index.MD), "* FindFirst", index.Name(), "(const ", keyType, "& key) const;") g.P() g.P(" private:") indexContainerName := "index_" + strcase.ToSnake(index.Name()) + "_map_" - g.P(" ", mapType, " ", indexContainerName, ";") + g.P(helper.Indent(1), mapType, " ", indexContainerName, ";") g.P() } } @@ -89,11 +88,11 @@ func genHppIndexFinders(g *protogen.GeneratedFile, descriptor *index.IndexDescri } func genCppIndexLoader(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor) { - g.P(" // Index init.") + g.P(helper.Indent(1), "// Index init.") for levelMessage := descriptor.LevelMessage; levelMessage != nil; levelMessage = levelMessage.NextLevel { for _, index := range levelMessage.Indexes { indexContainerName := "index_" + strcase.ToSnake(index.Name()) + "_map_" - g.P(" ", indexContainerName, ".clear();") + g.P(helper.Indent(1), indexContainerName, ".clear();") } } parentDataName := "data_" @@ -109,7 +108,7 @@ func genCppIndexLoader(g *protogen.GeneratedFile, descriptor *index.IndexDescrip if !levelMessage.NextLevel.NeedGen() { break } - g.P(strings.Repeat(" ", depth), "for (auto&& "+itemName+" : "+parentDataName+"."+helper.ParseIndexFieldName(levelMessage.FD)+"()) {") + g.P(helper.Indent(depth), "for (auto&& "+itemName+" : "+parentDataName+"."+helper.ParseIndexFieldName(levelMessage.FD)+"()) {") parentDataName = itemName if levelMessage.FD.IsMap() { parentDataName = itemName + ".second" @@ -117,15 +116,15 @@ func genCppIndexLoader(g *protogen.GeneratedFile, descriptor *index.IndexDescrip depth++ } for i := depth - 1; i > 0; i-- { - g.P(strings.Repeat(" ", i), "}") + g.P(helper.Indent(i), "}") } genIndexSorter(g, descriptor) } func genOneCppIndexLoader(g *protogen.GeneratedFile, depth int, index *index.LevelIndex, parentDataName string) { indexContainerName := "index_" + strcase.ToSnake(index.Name()) + "_map_" - g.P(strings.Repeat(" ", depth), "{") - g.P(strings.Repeat(" ", depth+1), "// Index: ", index.Index) + g.P(helper.Indent(depth), "{") + g.P(helper.Indent(depth+1), "// Index: ", index.Index) if len(index.ColFields) == 1 { // single-column index field := index.ColFields[0] // just take the first field @@ -135,26 +134,26 @@ func genOneCppIndexLoader(g *protogen.GeneratedFile, depth int, index *index.Lev for _, leveledFd := range field.LeveledFDList { fieldName += "." + helper.ParseIndexFieldName(leveledFd) + "()" } - g.P(strings.Repeat(" ", depth+1), "for (auto&& "+itemName+" : "+parentDataName+fieldName+") {") + g.P(helper.Indent(depth+1), "for (auto&& "+itemName+" : "+parentDataName+fieldName+") {") key := itemName if field.FD.Enum() != nil { key = "static_cast<" + helper.ParseCppType(field.FD) + ">(" + key + ")" } - g.P(strings.Repeat(" ", depth+2), indexContainerName, "["+key+"].push_back(&"+parentDataName+");") - g.P(strings.Repeat(" ", depth+1), "}") + g.P(helper.Indent(depth+2), indexContainerName, "["+key+"].push_back(&"+parentDataName+");") + g.P(helper.Indent(depth+1), "}") } else { fieldName := "" for _, leveledFd := range field.LeveledFDList { fieldName += "." + helper.ParseIndexFieldName(leveledFd) + "()" } key := parentDataName + fieldName - g.P(strings.Repeat(" ", depth+1), indexContainerName, "["+key+"].push_back(&"+parentDataName+");") + g.P(helper.Indent(depth+1), indexContainerName, "["+key+"].push_back(&"+parentDataName+");") } } else { // multi-column index generateOneCppMulticolumnIndex(g, depth, index, parentDataName, nil) } - g.P(strings.Repeat(" ", depth), "}") + g.P(helper.Indent(depth), "}") } func genIndexSorter(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor) { @@ -162,10 +161,10 @@ func genIndexSorter(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor for _, index := range levelMessage.Indexes { indexContainerName := "index_" + strcase.ToSnake(index.Name()) + "_map_" if len(index.KeyFields) != 0 { - g.P(" // Index(sort): ", index.Index) - g.P(strings.Repeat(" ", 1), "for (auto&& item : ", indexContainerName, ") {") - g.P(strings.Repeat(" ", 2), "std::sort(item.second.begin(), item.second.end(),") - g.P(strings.Repeat(" ", 7), "[](const ", helper.ParseCppClassType(index.MD), "* a, const ", helper.ParseCppClassType(index.MD), "* b) {") + g.P(helper.Indent(1), "// Index(sort): ", index.Index) + g.P(helper.Indent(1), "for (auto&& item : ", indexContainerName, ") {") + g.P(helper.Indent(2), "std::sort(item.second.begin(), item.second.end(),") + g.P(helper.Indent(7), "[](const ", helper.ParseCppClassType(index.MD), "* a, const ", helper.ParseCppClassType(index.MD), "* b) {") for i, field := range index.KeyFields { fieldName := "" for i, leveledFd := range field.LeveledFDList { @@ -176,15 +175,15 @@ func genIndexSorter(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor fieldName += accessOperator + helper.ParseIndexFieldName(leveledFd) + "()" } if i == len(index.KeyFields)-1 { - g.P(strings.Repeat(" ", 8), "return a", fieldName, " < b", fieldName, ";") + g.P(helper.Indent(8), "return a", fieldName, " < b", fieldName, ";") } else { - g.P(strings.Repeat(" ", 8), "if (a", fieldName, " != b", fieldName, ") {") - g.P(strings.Repeat(" ", 9), "return a", fieldName, " < b", fieldName, ";") - g.P(strings.Repeat(" ", 8), "}") + g.P(helper.Indent(8), "if (a", fieldName, " != b", fieldName, ") {") + g.P(helper.Indent(9), "return a", fieldName, " < b", fieldName, ";") + g.P(helper.Indent(8), "}") } } - g.P(strings.Repeat(" ", 7), "});") - g.P(strings.Repeat(" ", 1), "}") + g.P(helper.Indent(7), "});") + g.P(helper.Indent(1), "}") } } } @@ -202,8 +201,8 @@ func generateOneCppMulticolumnIndex(g *protogen.GeneratedFile, depth int, index } keyType := fmt.Sprintf("Index_%sKey", index.Name()) indexContainerName := "index_" + strcase.ToSnake(index.Name()) + "_map_" - g.P(strings.Repeat(" ", depth+1), keyType, " key{", keyParams, "};") - g.P(strings.Repeat(" ", depth+1), indexContainerName, "[key].push_back(&"+parentDataName+");") + g.P(helper.Indent(depth+1), keyType, " key{", keyParams, "};") + g.P(helper.Indent(depth+1), indexContainerName, "[key].push_back(&"+parentDataName+");") return keys } field := index.ColFields[cursor] @@ -213,14 +212,14 @@ func generateOneCppMulticolumnIndex(g *protogen.GeneratedFile, depth int, index for _, leveledFd := range field.LeveledFDList { fieldName += "." + helper.ParseIndexFieldName(leveledFd) + "()" } - g.P(strings.Repeat(" ", depth+1), "for (auto&& "+itemName+" : "+parentDataName+fieldName+") {") + g.P(helper.Indent(depth+1), "for (auto&& "+itemName+" : "+parentDataName+fieldName+") {") key := itemName if field.FD.Enum() != nil { key = "static_cast<" + helper.ParseCppType(field.FD) + ">(" + key + ")" } keys = append(keys, key) keys = generateOneCppMulticolumnIndex(g, depth+1, index, parentDataName, keys) - g.P(strings.Repeat(" ", depth+1), "}") + g.P(helper.Indent(depth+1), "}") } else { fieldName := "" for _, leveledFd := range field.LeveledFDList { @@ -257,20 +256,20 @@ func genCppIndexFinders(g *protogen.GeneratedFile, descriptor *index.IndexDescri } g.P("const ", messagerName, "::", vectorType, "* "+messagerName+"::Find", index.Name(), "(", helper.ToConstRefType(keyType), " ", keyName, ") const {") - g.P(" auto iter = ", indexContainerName, ".find(", keyName, ");") - g.P(" if (iter == ", indexContainerName, ".end()) {") - g.P(" return nullptr;") - g.P(" }") - g.P(" return &iter->second;") + g.P(helper.Indent(1), "auto iter = ", indexContainerName, ".find(", keyName, ");") + g.P(helper.Indent(1), "if (iter == ", indexContainerName, ".end()) {") + g.P(helper.Indent(2), "return nullptr;") + g.P(helper.Indent(1), "}") + g.P(helper.Indent(1), "return &iter->second;") g.P("}") g.P() g.P("const ", helper.ParseCppClassType(index.MD), "* "+messagerName+"::FindFirst", index.Name(), "(", helper.ToConstRefType(keyType), " ", keyName, ") const {") - g.P(" auto conf = Find", index.Name(), "(", keyName, ");") - g.P(" if (conf == nullptr || conf->size() == 0) {") - g.P(" return nullptr;") - g.P(" }") - g.P(" return (*conf)[0];") + g.P(helper.Indent(1), "auto conf = Find", index.Name(), "(", keyName, ");") + g.P(helper.Indent(1), "if (conf == nullptr || conf->size() == 0) {") + g.P(helper.Indent(2), "return nullptr;") + g.P(helper.Indent(1), "}") + g.P(helper.Indent(1), "return (*conf)[0];") g.P("}") g.P() } diff --git a/cmd/protoc-gen-cpp-tableau-loader/messager.go b/cmd/protoc-gen-cpp-tableau-loader/messager.go index 4a709add..9533901f 100644 --- a/cmd/protoc-gen-cpp-tableau-loader/messager.go +++ b/cmd/protoc-gen-cpp-tableau-loader/messager.go @@ -84,15 +84,15 @@ func genHppMessage(gen *protogen.Plugin, file *protogen.File, g *protogen.Genera g.P("class ", message.Desc.Name(), " : public Messager {") g.P(" public:") - g.P(" static const std::string& Name() { return kProtoName; }") - g.P(" virtual bool Load(const std::string& dir, Format fmt, const LoadOptions* options = nullptr) override;") - g.P(" const ", cppFullName, "& Data() const { return data_; }") - g.P(" const google::protobuf::Message* Message() const override { return &data_; }") + g.P(helper.Indent(1), "static const std::string& Name() { return kProtoName; }") + g.P(helper.Indent(1), "virtual bool Load(const std::string& dir, Format fmt, const LoadOptions* options = nullptr) override;") + g.P(helper.Indent(1), "const ", cppFullName, "& Data() const { return data_; }") + g.P(helper.Indent(1), "const google::protobuf::Message* Message() const override { return &data_; }") g.P() if options.NeedGenOrderedMap(message.Desc, options.LangCPP) || options.NeedGenIndex(message.Desc, options.LangCPP) { g.P(" private:") - g.P(" virtual bool ProcessAfterLoad() override final;") + g.P(helper.Indent(1), "virtual bool ProcessAfterLoad() override final;") g.P() } @@ -100,8 +100,8 @@ func genHppMessage(gen *protogen.Plugin, file *protogen.File, g *protogen.Genera genHppMapGetters(1, nil, g, message.Desc) g.P() g.P(" private:") - g.P(" static const std::string kProtoName;") - g.P(" ", cppFullName, " data_;") + g.P(helper.Indent(1), "static const std::string kProtoName;") + g.P(helper.Indent(1), cppFullName, " data_;") if options.NeedGenOrderedMap(message.Desc, options.LangCPP) { g.P() genHppOrderedMapGetters(g, message.Desc, 1, nil, messagerFullName) @@ -122,7 +122,7 @@ func genHppMapGetters(depth int, keys []helper.MapKey, g *protogen.GeneratedFile g.P(" public:") } keys = helper.AddMapKey(fd, keys) - g.P(" const ", helper.ParseCppType(fd.MapValue()), "* Get(", helper.GenGetParams(keys), ") const;") + g.P(helper.Indent(1), "const ", helper.ParseCppType(fd.MapValue()), "* Get(", helper.GenGetParams(keys), ") const;") if fd.MapValue().Kind() == protoreflect.MessageKind { genHppMapGetters(depth+1, keys, g, fd.MapValue().Message()) } @@ -159,11 +159,11 @@ func genCppMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, message *pro g.P("const std::string ", messagerName, "::kProtoName = ", `"`, messagerName, `";`) g.P() g.P("bool ", messagerName, "::Load(const std::string& dir, Format fmt, const LoadOptions* options /* = nullptr */) {") - g.P(" tableau::util::TimeProfiler profiler;") - g.P(" bool loaded = LoadMessage(data_, dir, fmt, options);") - g.P(" bool ok = loaded ? ProcessAfterLoad() : false;") - g.P(" stats_.duration = profiler.Elapse();") - g.P(" return ok;") + g.P(helper.Indent(1), "tableau::util::TimeProfiler profiler;") + g.P(helper.Indent(1), "bool loaded = LoadMessage(data_, dir, fmt, options);") + g.P(helper.Indent(1), "bool ok = loaded ? ProcessAfterLoad() : false;") + g.P(helper.Indent(1), "stats_.duration = profiler.Elapse();") + g.P(helper.Indent(1), "return ok;") g.P("}") g.P() @@ -175,7 +175,7 @@ func genCppMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, message *pro if options.NeedGenIndex(message.Desc, options.LangCPP) { genCppIndexLoader(g, indexDescriptor) } - g.P(" return true;") + g.P(helper.Indent(1), "return true;") g.P("}") g.P() } @@ -202,17 +202,17 @@ func genCppMapGetters(g *protogen.GeneratedFile, md protoreflect.MessageDescript } else { container = "conf->" + string(fd.Name()) + "()" prevKeys := keys[:len(keys)-1] - g.P(" const auto* conf = Get(", helper.GenGetArguments(prevKeys), ");") - g.P(" if (conf == nullptr) {") - g.P(" return nullptr;") - g.P(" }") + g.P(helper.Indent(1), "const auto* conf = Get(", helper.GenGetArguments(prevKeys), ");") + g.P(helper.Indent(1), "if (conf == nullptr) {") + g.P(helper.Indent(2), "return nullptr;") + g.P(helper.Indent(1), "}") } lastKeyName := keys[len(keys)-1].Name - g.P(" auto iter = ", container, ".find(", lastKeyName, ");") - g.P(" if (iter == ", container, ".end()) {") - g.P(" return nullptr;") - g.P(" }") - g.P(" return &iter->second;") + g.P(helper.Indent(1), "auto iter = ", container, ".find(", lastKeyName, ");") + g.P(helper.Indent(1), "if (iter == ", container, ".end()) {") + g.P(helper.Indent(2), "return nullptr;") + g.P(helper.Indent(1), "}") + g.P(helper.Indent(1), "return &iter->second;") g.P("}") g.P() diff --git a/cmd/protoc-gen-cpp-tableau-loader/ordered_map.go b/cmd/protoc-gen-cpp-tableau-loader/ordered_map.go index 496a2a6b..8c560e90 100644 --- a/cmd/protoc-gen-cpp-tableau-loader/ordered_map.go +++ b/cmd/protoc-gen-cpp-tableau-loader/ordered_map.go @@ -21,7 +21,7 @@ func genHppOrderedMapGetters(g *protogen.GeneratedFile, md protoreflect.MessageD fd := md.Fields().Get(i) if fd.IsMap() { if depth == 1 { - g.P(" // OrderedMap accessers.") + g.P(helper.Indent(1), "// OrderedMap accessers.") g.P(" public:") } nextKeys := helper.AddMapKey(fd, keys) @@ -41,18 +41,18 @@ func genHppOrderedMapGetters(g *protogen.GeneratedFile, md protoreflect.MessageD nextPrefix := parseOrderedMapPrefix(nextMapFD, messagerFullName) nextOrderedMap := nextPrefix + orderedMapSuffix // nextOrderedMapValue := nextPrefix + orderedMapValueSuffix - g.P(" using ", orderedMapValue, " = std::pair<", nextOrderedMap, ", const ", currValueType, "*>;") - g.P(" using ", orderedMap, " = std::map<", keyType, ", ", orderedMapValue, ">;") - g.P(" const ", orderedMap, "* GetOrderedMap(", helper.GenGetParams(keys), ") const;") + g.P(helper.Indent(1), "using ", orderedMapValue, " = std::pair<", nextOrderedMap, ", const ", currValueType, "*>;") + g.P(helper.Indent(1), "using ", orderedMap, " = std::map<", keyType, ", ", orderedMapValue, ">;") + g.P(helper.Indent(1), "const ", orderedMap, "* GetOrderedMap(", helper.GenGetParams(keys), ") const;") g.P() } else { - g.P(" using ", orderedMap, " = std::map<", keyType, ", ", parseMapValueType(fd), ">;") - g.P(" const ", orderedMap, "* GetOrderedMap(", helper.GenGetParams(keys), ") const;") + g.P(helper.Indent(1), "using ", orderedMap, " = std::map<", keyType, ", ", parseMapValueType(fd), ">;") + g.P(helper.Indent(1), "const ", orderedMap, "* GetOrderedMap(", helper.GenGetParams(keys), ") const;") g.P() } if depth == 1 { g.P(" private:") - g.P(" ", orderedMap, " ordered_map_;") + g.P(helper.Indent(1), orderedMap, " ordered_map_;") } break } @@ -61,8 +61,8 @@ func genHppOrderedMapGetters(g *protogen.GeneratedFile, md protoreflect.MessageD func genCppOrderedMapLoader(g *protogen.GeneratedFile, md protoreflect.MessageDescriptor, depth int, messagerFullName string) { if depth == 1 { - g.P(" // OrderedMap init.") - g.P(" ordered_map_.clear();") + g.P(helper.Indent(1), "// OrderedMap init.") + g.P(helper.Indent(1), "ordered_map_.clear();") } for i := 0; i < md.Fields().Len(); i++ { fd := md.Fields().Get(i) @@ -81,25 +81,25 @@ func genCppOrderedMapLoader(g *protogen.GeneratedFile, md protoreflect.MessageDe prevContainer = "data_" prevTmpOrderedMapName = "ordered_map_" } - g.P(strings.Repeat(" ", depth), "for (auto&& ", itemName, " : ", prevContainer, ".", string(fd.Name()), "()) {") + g.P(helper.Indent(depth), "for (auto&& ", itemName, " : ", prevContainer, ".", string(fd.Name()), "()) {") nextMapFD := getNextLevelMapFD(fd.MapValue()) if nextMapFD != nil { nextPrefix := parseOrderedMapPrefix(nextMapFD, messagerFullName) // nextMap := nextPrefix + mapSuffix nextOrderedMap := nextPrefix + orderedMapSuffix - g.P(strings.Repeat(" ", depth+1), prevTmpOrderedMapName, "[", itemName, ".first] = ", orderedMapValue, "(", nextOrderedMap, "(), &", itemName, ".second);") - g.P(strings.Repeat(" ", depth+1), "auto&& ", tmpOrderedMapName, " = ", prevTmpOrderedMapName, "[", itemName, ".first].first;") + g.P(helper.Indent(depth+1), prevTmpOrderedMapName, "[", itemName, ".first] = ", orderedMapValue, "(", nextOrderedMap, "(), &", itemName, ".second);") + g.P(helper.Indent(depth+1), "auto&& ", tmpOrderedMapName, " = ", prevTmpOrderedMapName, "[", itemName, ".first].first;") } else { ref := "&" if fd.MapValue().Kind() != protoreflect.MessageKind { ref = "" // scalar value type just do value copy. } - g.P(strings.Repeat(" ", depth+1), prevTmpOrderedMapName, "[", itemName, ".first] = ", ref, itemName, ".second;") + g.P(helper.Indent(depth+1), prevTmpOrderedMapName, "[", itemName, ".first] = ", ref, itemName, ".second;") } if fd.MapValue().Kind() == protoreflect.MessageKind { genCppOrderedMapLoader(g, fd.MapValue().Message(), depth+1, messagerFullName) } - g.P(strings.Repeat(" ", depth), "}") + g.P(helper.Indent(depth), "}") break } } @@ -117,19 +117,19 @@ func genCppOrderedMapGetters(g *protogen.GeneratedFile, md protoreflect.MessageD g.P("const ", messagerName, "::", orderedMap, "* ", messagerName, "::GetOrderedMap(", helper.GenGetParams(keys), ") const {") if depth == 1 { - g.P(" return &ordered_map_; ") + g.P(helper.Indent(1), "return &ordered_map_; ") } else { lastKeyName := keys[len(keys)-1].Name prevKeys := keys[:len(keys)-1] - g.P(" const auto* conf = GetOrderedMap(", helper.GenGetArguments(prevKeys), ");") - g.P(" if (conf == nullptr) {") - g.P(" return nullptr;") - g.P(" }") - g.P(" auto iter = conf->find(", lastKeyName, ");") - g.P(" if (iter == conf->end()) {") - g.P(" return nullptr;") - g.P(" }") - g.P(" return &iter->second.first;") + g.P(helper.Indent(1), "const auto* conf = GetOrderedMap(", helper.GenGetArguments(prevKeys), ");") + g.P(helper.Indent(1), "if (conf == nullptr) {") + g.P(helper.Indent(2), "return nullptr;") + g.P(helper.Indent(1), "}") + g.P(helper.Indent(1), "auto iter = conf->find(", lastKeyName, ");") + g.P(helper.Indent(1), "if (iter == conf->end()) {") + g.P(helper.Indent(2), "return nullptr;") + g.P(helper.Indent(1), "}") + g.P(helper.Indent(1), "return &iter->second.first;") } g.P("}") diff --git a/cmd/protoc-gen-cpp-tableau-loader/shard.go b/cmd/protoc-gen-cpp-tableau-loader/shard.go index 84605516..1289490f 100644 --- a/cmd/protoc-gen-cpp-tableau-loader/shard.go +++ b/cmd/protoc-gen-cpp-tableau-loader/shard.go @@ -61,7 +61,7 @@ func generateShardedHub(gen *protogen.Plugin) { func generateShardedHubHppMsgContainerShards(gen *protogen.Plugin, g *protogen.GeneratedFile, shardNum int) { for i := 0; i < shardNum; i++ { - g.P(" void InitShard", i, "();") + g.P(helper.Indent(1), "void InitShard", i, "();") } g.P() g.P(" private:") @@ -69,7 +69,7 @@ func generateShardedHubHppMsgContainerShards(gen *protogen.Plugin, g *protogen.G func generateShardedHubHppRegistryShards(gen *protogen.Plugin, g *protogen.GeneratedFile, shardNum int) { for i := 0; i < shardNum; i++ { - g.P(" static void InitShard", i, "();") + g.P(helper.Indent(1), "static void InitShard", i, "();") } g.P() g.P(" private:") @@ -77,13 +77,13 @@ func generateShardedHubHppRegistryShards(gen *protogen.Plugin, g *protogen.Gener func generateShardedHubCppMsgContainerShards(gen *protogen.Plugin, g *protogen.GeneratedFile, shardNum int) { for i := 0; i < shardNum; i++ { - g.P(" InitShard", i, "();") + g.P(helper.Indent(1), "InitShard", i, "();") } } func generateShardedHubCppRegistryShards(gen *protogen.Plugin, g *protogen.GeneratedFile, shardNum int) { for i := 0; i < shardNum; i++ { - g.P(" InitShard", i, "();") + g.P(helper.Indent(1), "InitShard", i, "();") } } @@ -100,7 +100,7 @@ func generateShardedHubCppFileContent(gen *protogen.Plugin, g *protogen.Generate for _, messager := range fileMessagers[proto] { g.P("template <>") g.P("const std::shared_ptr<" + messager + "> Hub::Get<" + messager + ">() const {") - g.P(" return GetMessagerContainer()->", strcase.ToSnake(messager), "_;") + g.P(helper.Indent(1), "return GetMessagerContainer()->", strcase.ToSnake(messager), "_;") g.P("}") g.P() } @@ -109,7 +109,7 @@ func generateShardedHubCppFileContent(gen *protogen.Plugin, g *protogen.Generate g.P("void MessagerContainer::InitShard", shardIndex, "() {") for _, proto := range protofiles { for _, messager := range fileMessagers[proto] { - g.P(" ", strcase.ToSnake(messager), "_ = std::dynamic_pointer_cast<", messager, `>((*msger_map_)["`, messager, `"]);`) + g.P(helper.Indent(1), strcase.ToSnake(messager), "_ = std::dynamic_pointer_cast<", messager, `>((*msger_map_)["`, messager, `"]);`) } } g.P("}") @@ -118,7 +118,7 @@ func generateShardedHubCppFileContent(gen *protogen.Plugin, g *protogen.Generate g.P("void Registry::InitShard", shardIndex, "() {") for _, proto := range protofiles { for _, messager := range fileMessagers[proto] { - g.P(" Register<", messager, ">();") + g.P(helper.Indent(1), "Register<", messager, ">();") } } g.P("}") diff --git a/cmd/protoc-gen-go-tableau-loader/index.go b/cmd/protoc-gen-go-tableau-loader/index.go index 2e6db04a..1662eb78 100644 --- a/cmd/protoc-gen-go-tableau-loader/index.go +++ b/cmd/protoc-gen-go-tableau-loader/index.go @@ -51,7 +51,7 @@ func genIndexField(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor, } func genIndexLoader(gen *protogen.Plugin, g *protogen.GeneratedFile, descriptor *index.IndexDescriptor, messagerName string) { - g.P(" // Index init.") + g.P("// Index init.") for levelMessage := descriptor.LevelMessage; levelMessage != nil; levelMessage = levelMessage.NextLevel { for _, index := range levelMessage.Indexes { indexContainerName := "index" + strcase.ToCamel(index.Name()) + "Map" @@ -85,7 +85,7 @@ func genOneIndexLoader(gen *protogen.Plugin, g *protogen.GeneratedFile, depth in parentDataName string, messagerName string) { indexContainerName := "index" + strcase.ToCamel(index.Name()) + "Map" g.P("{") - g.P(" // Index: ", index.Index) + g.P("// Index: ", index.Index) if len(index.ColFields) == 1 { // single-column index field := index.ColFields[0] // just take the first field @@ -119,7 +119,7 @@ func genIndexSorter(gen *protogen.Plugin, g *protogen.GeneratedFile, descriptor for _, index := range levelMessage.Indexes { indexContainerName := "index" + strcase.ToCamel(index.Name()) + "Map" if len(index.KeyFields) != 0 { - g.P(" // Index(sort): ", index.Index) + g.P("// Index(sort): ", index.Index) g.P("for _, item := range x.", indexContainerName, " {") g.P(sortPackage.Ident("Slice"), "(item, func(i, j int) bool {") for i, field := range index.KeyFields { diff --git a/cmd/protoc-gen-go-tableau-loader/ordered_map.go b/cmd/protoc-gen-go-tableau-loader/ordered_map.go index 3be28416..2c5d7cbe 100644 --- a/cmd/protoc-gen-go-tableau-loader/ordered_map.go +++ b/cmd/protoc-gen-go-tableau-loader/ordered_map.go @@ -157,7 +157,7 @@ func genOrderedMapGetters(gen *protogen.Plugin, g *protogen.GeneratedFile, md pr if depth == 1 { g.P("// ", getter, " returns the 1-level ordered map.") g.P("func (x *", messagerName, ") ", getter, "(", helper.GenGetParams(keys), ") *", orderedMap, "{") - g.P(" return x.orderedMap ") + g.P("return x.orderedMap ") } else { g.P("// ", getter, " finds value in the ", depth-1, "-level ordered map. It will return") g.P("// NotFound error if the key is not found.")