Skip to content

Commit 748a497

Browse files
committed
feat(cpp): unify all index-related logic
1 parent b59f405 commit 748a497

File tree

4 files changed

+160
-217
lines changed

4 files changed

+160
-217
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package leveledindex
1+
package indexes
22

33
import (
44
"fmt"
55

66
"github.com/tableauio/loader/cmd/protoc-gen-cpp-tableau-loader/helper"
77
"github.com/tableauio/loader/internal/index"
8-
"github.com/tableauio/loader/internal/options"
98
"google.golang.org/protobuf/compiler/protogen"
109
"google.golang.org/protobuf/reflect/protoreflect"
1110
)
@@ -15,29 +14,30 @@ type Generator struct {
1514
descriptor *index.IndexDescriptor
1615
message *protogen.Message
1716

17+
// level message
1818
maxDepth int
19-
Keys helper.MapKeys
20-
MapFds []protoreflect.FieldDescriptor
19+
keys helper.MapKeys
20+
mapFds []protoreflect.FieldDescriptor
2121
}
2222

2323
func NewGenerator(g *protogen.GeneratedFile, descriptor *index.IndexDescriptor, message *protogen.Message) *Generator {
24-
gen := &Generator{
24+
generator := &Generator{
2525
g: g,
2626
descriptor: descriptor,
2727
message: message,
2828
}
29-
gen.init()
30-
return gen
29+
generator.initLevelMessage()
30+
return generator
3131
}
3232

33-
func (x *Generator) init() {
33+
func (x *Generator) initLevelMessage() {
3434
for levelMessage := x.descriptor.LevelMessage; levelMessage != nil; levelMessage = levelMessage.NextLevel {
3535
if fd := levelMessage.FD; fd != nil && fd.IsMap() {
36-
x.Keys = x.Keys.AddMapKey(helper.MapKey{
36+
x.keys = x.keys.AddMapKey(helper.MapKey{
3737
Type: helper.ParseMapKeyType(fd.MapKey()),
3838
Name: helper.ParseMapFieldName(fd),
3939
})
40-
x.MapFds = append(x.MapFds, fd)
40+
x.mapFds = append(x.mapFds, fd)
4141
}
4242
if len(levelMessage.Indexes) != 0 || len(levelMessage.OrderedIndexes) != 0 {
4343
x.maxDepth = levelMessage.Depth
@@ -46,27 +46,54 @@ func (x *Generator) init() {
4646
}
4747

4848
func (x *Generator) NeedGenerate() bool {
49-
return options.NeedGenIndex(x.message.Desc, options.LangCPP) || options.NeedGenOrderedIndex(x.message.Desc, options.LangCPP)
49+
return x.needGenerateIndex() || x.needGenerateOrderedIndex()
5050
}
5151

52-
func (x *Generator) KeyType(mapFd protoreflect.FieldDescriptor) string {
52+
func (x *Generator) messagerName() string {
53+
return string(x.message.Desc.Name())
54+
}
55+
56+
func (x *Generator) levelKeyType(mapFd protoreflect.FieldDescriptor) string {
5357
return fmt.Sprintf("LeveledIndex_%sKey", helper.ParseLeveledMapPrefix(x.message.Desc, mapFd))
5458
}
5559

56-
func (x *Generator) GenHppLeveledIndexKeys() {
60+
func (x *Generator) mapValueType(index *index.LevelIndex) string {
61+
return helper.ParseCppClassType(index.MD)
62+
}
63+
64+
func (x *Generator) fieldGetter(fd protoreflect.FieldDescriptor) string {
65+
return fmt.Sprintf(".%s()", helper.ParseIndexFieldName(fd))
66+
}
67+
68+
func (x *Generator) parseKeyFieldNameAndSuffix(field *index.LevelField) (string, string) {
69+
var fieldName, suffix string
70+
for i, leveledFd := range field.LeveledFDList {
71+
fieldName += x.fieldGetter(leveledFd)
72+
if i == len(field.LeveledFDList)-1 && leveledFd.Message() != nil {
73+
switch leveledFd.Message().FullName() {
74+
case "google.protobuf.Timestamp", "google.protobuf.Duration":
75+
suffix = ".seconds()"
76+
default:
77+
}
78+
}
79+
}
80+
return fieldName, suffix
81+
}
82+
83+
func (x *Generator) GenHppIndexFinders() {
5784
if !x.NeedGenerate() {
5885
return
5986
}
60-
for i := 1; i <= x.maxDepth-3 && i <= len(x.MapFds)-1; i++ {
87+
for i := 1; i <= x.maxDepth-3 && i <= len(x.mapFds)-1; i++ {
6188
if i == 1 {
6289
x.g.P()
6390
x.g.P(helper.Indent(1), "// LeveledIndex keys.")
6491
x.g.P(" public:")
6592
}
66-
fd := x.MapFds[i]
67-
keyType := x.KeyType(fd)
93+
fd := x.mapFds[i]
94+
keyType := x.levelKeyType(fd)
6895
x.g.P(helper.Indent(1), "struct ", keyType, " {")
69-
keys := x.Keys[:i+1]
96+
keys := x.keys[:i+1]
7097
for _, key := range keys {
7198
x.g.P(helper.Indent(2), key.Type, " ", key.Name, ";")
7299
}
@@ -84,4 +111,16 @@ func (x *Generator) GenHppLeveledIndexKeys() {
84111
x.g.P(helper.Indent(2), "}")
85112
x.g.P(helper.Indent(1), "};")
86113
}
114+
x.genHppIndexFinders()
115+
x.genHppOrderedIndexFinders()
116+
}
117+
118+
func (x *Generator) GenIndexLoader() {
119+
x.genIndexLoader()
120+
x.genOrderedIndexLoader()
121+
}
122+
123+
func (x *Generator) GenCppIndexFinders() {
124+
x.genCppIndexFinders()
125+
x.genCppOrderedIndexFinders()
87126
}

0 commit comments

Comments
 (0)