From d757d887a57b34d37216c13c12747d2f2fb45f41 Mon Sep 17 00:00:00 2001 From: Kybxd <627940450@qq.com> Date: Wed, 23 Apr 2025 14:34:55 +0800 Subject: [PATCH 1/4] feat(go): messager getters --- cmd/protoc-gen-go-tableau-loader/hub.go | 52 +++++--- .../protoconf/loader/hub.pc.go | 118 +++++++----------- 2 files changed, 80 insertions(+), 90 deletions(-) diff --git a/cmd/protoc-gen-go-tableau-loader/hub.go b/cmd/protoc-gen-go-tableau-loader/hub.go index fd21632e..a37836d6 100644 --- a/cmd/protoc-gen-go-tableau-loader/hub.go +++ b/cmd/protoc-gen-go-tableau-loader/hub.go @@ -17,15 +17,36 @@ func generateHub(gen *protogen.Plugin) { g.P(staticHubContent) g.P() + // generate messager keeper typedef + g.P("type MessagerKeeper struct {") + g.P("MessagerMap MessagerMap") + g.P("LoadedTime time.Time") + g.P("// Auto-generated fields below") + for _, messager := range messagers { + g.P(messager, " *", messager) + } + g.P("}") + g.P() + + // generate messager keeper constructor + g.P("func newMessagerKeeper(messagerMap MessagerMap) *MessagerKeeper {") + g.P("messagerKeeper := &MessagerKeeper{") + g.P("MessagerMap: messagerMap,") + g.P("LoadedTime: time.Now(),") + g.P("}") + for _, messager := range messagers { + g.P("messagerKeeper.", messager, `, _ = messagerMap["`, messager, `"].(*`, messager, ")") + } + g.P("return messagerKeeper") + g.P("}") + g.P() + + // generate getters + g.P("// Auto-generated getters below") + g.P() for _, messager := range messagers { g.P("func (h *Hub) Get", messager, "() *", messager, " {") - g.P(`msger := h.GetMessager("`, messager, `")`) - g.P("if msger != nil {") - g.P("if conf, ok := msger.(*", messager, "); ok {") - g.P("return conf") - g.P("}") - g.P("}") - g.P("return nil") + g.P("return h.messagerKeeper.Load().", messager) g.P("}") g.P() } @@ -221,15 +242,13 @@ func BoolToInt(ok bool) int { // Hub is the messager manager. type Hub struct { - messagerMap atomic.Pointer[MessagerMap] - lastLoadedTime atomic.Pointer[time.Time] + messagerKeeper atomic.Pointer[MessagerKeeper] opts *Options } func NewHub(options ...Option) *Hub { hub := &Hub{} - hub.messagerMap.Store(&MessagerMap{}) - hub.lastLoadedTime.Store(&time.Time{}) + hub.messagerKeeper.Store(&MessagerKeeper{}) hub.opts = ParseOptions(options...) if hub.opts.MutableCheck != nil { go hub.mutableCheck() @@ -254,14 +273,12 @@ func (h *Hub) NewMessagerMap() MessagerMap { // GetMessagerMap returns hub's inner field messagerMap. func (h *Hub) GetMessagerMap() MessagerMap { - return *h.messagerMap.Load() + return h.messagerKeeper.Load().MessagerMap } // SetMessagerMap sets hub's inner field messagerMap. func (h *Hub) SetMessagerMap(messagerMap MessagerMap) { - h.messagerMap.Store(&messagerMap) - now := time.Now() - h.lastLoadedTime.Store(&now) + h.messagerKeeper.Store(newMessagerKeeper(messagerMap)) } // GetMessager finds and returns the specified Messenger in hub. @@ -343,7 +360,6 @@ func (h *Hub) onMutateDefault(name string, original, current proto.Message) { // GetLastLoadedTime returns the time when hub's messagerMap was last set. func (h *Hub) GetLastLoadedTime() time.Time { - return *h.lastLoadedTime.Load() + return h.messagerKeeper.Load().LoadedTime } - -// Auto-generated getters below` +` diff --git a/test/go-tableau-loader/protoconf/loader/hub.pc.go b/test/go-tableau-loader/protoconf/loader/hub.pc.go index 41c1f819..461a7ee7 100644 --- a/test/go-tableau-loader/protoconf/loader/hub.pc.go +++ b/test/go-tableau-loader/protoconf/loader/hub.pc.go @@ -195,15 +195,13 @@ func BoolToInt(ok bool) int { // Hub is the messager manager. type Hub struct { - messagerMap atomic.Pointer[MessagerMap] - lastLoadedTime atomic.Pointer[time.Time] + messagerKeeper atomic.Pointer[MessagerKeeper] opts *Options } func NewHub(options ...Option) *Hub { hub := &Hub{} - hub.messagerMap.Store(&MessagerMap{}) - hub.lastLoadedTime.Store(&time.Time{}) + hub.messagerKeeper.Store(&MessagerKeeper{}) hub.opts = ParseOptions(options...) if hub.opts.MutableCheck != nil { go hub.mutableCheck() @@ -228,14 +226,12 @@ func (h *Hub) NewMessagerMap() MessagerMap { // GetMessagerMap returns hub's inner field messagerMap. func (h *Hub) GetMessagerMap() MessagerMap { - return *h.messagerMap.Load() + return h.messagerKeeper.Load().MessagerMap } // SetMessagerMap sets hub's inner field messagerMap. func (h *Hub) SetMessagerMap(messagerMap MessagerMap) { - h.messagerMap.Store(&messagerMap) - now := time.Now() - h.lastLoadedTime.Store(&now) + h.messagerKeeper.Store(newMessagerKeeper(messagerMap)) } // GetMessager finds and returns the specified Messenger in hub. @@ -317,97 +313,75 @@ func (h *Hub) onMutateDefault(name string, original, current proto.Message) { // GetLastLoadedTime returns the time when hub's messagerMap was last set. func (h *Hub) GetLastLoadedTime() time.Time { - return *h.lastLoadedTime.Load() + return h.messagerKeeper.Load().LoadedTime +} + +type MessagerKeeper struct { + MessagerMap MessagerMap + LoadedTime time.Time + // Auto-generated fields below + HeroConf *HeroConf + HeroBaseConf *HeroBaseConf + ItemConf *ItemConf + PatchReplaceConf *PatchReplaceConf + PatchMergeConf *PatchMergeConf + RecursivePatchConf *RecursivePatchConf + ActivityConf *ActivityConf + ChapterConf *ChapterConf + ThemeConf *ThemeConf +} + +func newMessagerKeeper(messagerMap MessagerMap) *MessagerKeeper { + messagerKeeper := &MessagerKeeper{ + MessagerMap: messagerMap, + LoadedTime: time.Now(), + } + messagerKeeper.HeroConf, _ = messagerMap["HeroConf"].(*HeroConf) + messagerKeeper.HeroBaseConf, _ = messagerMap["HeroBaseConf"].(*HeroBaseConf) + messagerKeeper.ItemConf, _ = messagerMap["ItemConf"].(*ItemConf) + messagerKeeper.PatchReplaceConf, _ = messagerMap["PatchReplaceConf"].(*PatchReplaceConf) + messagerKeeper.PatchMergeConf, _ = messagerMap["PatchMergeConf"].(*PatchMergeConf) + messagerKeeper.RecursivePatchConf, _ = messagerMap["RecursivePatchConf"].(*RecursivePatchConf) + messagerKeeper.ActivityConf, _ = messagerMap["ActivityConf"].(*ActivityConf) + messagerKeeper.ChapterConf, _ = messagerMap["ChapterConf"].(*ChapterConf) + messagerKeeper.ThemeConf, _ = messagerMap["ThemeConf"].(*ThemeConf) + return messagerKeeper } // Auto-generated getters below func (h *Hub) GetHeroConf() *HeroConf { - msger := h.GetMessager("HeroConf") - if msger != nil { - if conf, ok := msger.(*HeroConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().HeroConf } func (h *Hub) GetHeroBaseConf() *HeroBaseConf { - msger := h.GetMessager("HeroBaseConf") - if msger != nil { - if conf, ok := msger.(*HeroBaseConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().HeroBaseConf } func (h *Hub) GetItemConf() *ItemConf { - msger := h.GetMessager("ItemConf") - if msger != nil { - if conf, ok := msger.(*ItemConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().ItemConf } func (h *Hub) GetPatchReplaceConf() *PatchReplaceConf { - msger := h.GetMessager("PatchReplaceConf") - if msger != nil { - if conf, ok := msger.(*PatchReplaceConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().PatchReplaceConf } func (h *Hub) GetPatchMergeConf() *PatchMergeConf { - msger := h.GetMessager("PatchMergeConf") - if msger != nil { - if conf, ok := msger.(*PatchMergeConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().PatchMergeConf } func (h *Hub) GetRecursivePatchConf() *RecursivePatchConf { - msger := h.GetMessager("RecursivePatchConf") - if msger != nil { - if conf, ok := msger.(*RecursivePatchConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().RecursivePatchConf } func (h *Hub) GetActivityConf() *ActivityConf { - msger := h.GetMessager("ActivityConf") - if msger != nil { - if conf, ok := msger.(*ActivityConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().ActivityConf } func (h *Hub) GetChapterConf() *ChapterConf { - msger := h.GetMessager("ChapterConf") - if msger != nil { - if conf, ok := msger.(*ChapterConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().ChapterConf } func (h *Hub) GetThemeConf() *ThemeConf { - msger := h.GetMessager("ThemeConf") - if msger != nil { - if conf, ok := msger.(*ThemeConf); ok { - return conf - } - } - return nil + return h.messagerKeeper.Load().ThemeConf } From eaad67ca71bce9d0cad9d5b8de16c3b0358bb07d Mon Sep 17 00:00:00 2001 From: Kybxd <627940450@qq.com> Date: Wed, 23 Apr 2025 14:49:19 +0800 Subject: [PATCH 2/4] feat: rename to messager container --- cmd/protoc-gen-go-tableau-loader/hub.go | 22 ++++---- .../protoconf/loader/hub.pc.go | 56 +++++++++---------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/cmd/protoc-gen-go-tableau-loader/hub.go b/cmd/protoc-gen-go-tableau-loader/hub.go index a37836d6..508e3ba2 100644 --- a/cmd/protoc-gen-go-tableau-loader/hub.go +++ b/cmd/protoc-gen-go-tableau-loader/hub.go @@ -18,7 +18,7 @@ func generateHub(gen *protogen.Plugin) { g.P() // generate messager keeper typedef - g.P("type MessagerKeeper struct {") + g.P("type MessagerContainer struct {") g.P("MessagerMap MessagerMap") g.P("LoadedTime time.Time") g.P("// Auto-generated fields below") @@ -29,15 +29,15 @@ func generateHub(gen *protogen.Plugin) { g.P() // generate messager keeper constructor - g.P("func newMessagerKeeper(messagerMap MessagerMap) *MessagerKeeper {") - g.P("messagerKeeper := &MessagerKeeper{") + g.P("func newMessagerContainer(messagerMap MessagerMap) *MessagerContainer {") + g.P("messagerContainer := &MessagerContainer{") g.P("MessagerMap: messagerMap,") g.P("LoadedTime: time.Now(),") g.P("}") for _, messager := range messagers { - g.P("messagerKeeper.", messager, `, _ = messagerMap["`, messager, `"].(*`, messager, ")") + g.P("messagerContainer.", messager, `, _ = messagerMap["`, messager, `"].(*`, messager, ")") } - g.P("return messagerKeeper") + g.P("return messagerContainer") g.P("}") g.P() @@ -46,7 +46,7 @@ func generateHub(gen *protogen.Plugin) { g.P() for _, messager := range messagers { g.P("func (h *Hub) Get", messager, "() *", messager, " {") - g.P("return h.messagerKeeper.Load().", messager) + g.P("return h.messagerContainer.Load().", messager) g.P("}") g.P() } @@ -242,13 +242,13 @@ func BoolToInt(ok bool) int { // Hub is the messager manager. type Hub struct { - messagerKeeper atomic.Pointer[MessagerKeeper] + messagerContainer atomic.Pointer[MessagerContainer] opts *Options } func NewHub(options ...Option) *Hub { hub := &Hub{} - hub.messagerKeeper.Store(&MessagerKeeper{}) + hub.messagerContainer.Store(&MessagerContainer{}) hub.opts = ParseOptions(options...) if hub.opts.MutableCheck != nil { go hub.mutableCheck() @@ -273,12 +273,12 @@ func (h *Hub) NewMessagerMap() MessagerMap { // GetMessagerMap returns hub's inner field messagerMap. func (h *Hub) GetMessagerMap() MessagerMap { - return h.messagerKeeper.Load().MessagerMap + return h.messagerContainer.Load().MessagerMap } // SetMessagerMap sets hub's inner field messagerMap. func (h *Hub) SetMessagerMap(messagerMap MessagerMap) { - h.messagerKeeper.Store(newMessagerKeeper(messagerMap)) + h.messagerContainer.Store(newMessagerContainer(messagerMap)) } // GetMessager finds and returns the specified Messenger in hub. @@ -360,6 +360,6 @@ func (h *Hub) onMutateDefault(name string, original, current proto.Message) { // GetLastLoadedTime returns the time when hub's messagerMap was last set. func (h *Hub) GetLastLoadedTime() time.Time { - return h.messagerKeeper.Load().LoadedTime + return h.messagerContainer.Load().LoadedTime } ` diff --git a/test/go-tableau-loader/protoconf/loader/hub.pc.go b/test/go-tableau-loader/protoconf/loader/hub.pc.go index 461a7ee7..47dbe39a 100644 --- a/test/go-tableau-loader/protoconf/loader/hub.pc.go +++ b/test/go-tableau-loader/protoconf/loader/hub.pc.go @@ -195,13 +195,13 @@ func BoolToInt(ok bool) int { // Hub is the messager manager. type Hub struct { - messagerKeeper atomic.Pointer[MessagerKeeper] - opts *Options + messagerContainer atomic.Pointer[MessagerContainer] + opts *Options } func NewHub(options ...Option) *Hub { hub := &Hub{} - hub.messagerKeeper.Store(&MessagerKeeper{}) + hub.messagerContainer.Store(&MessagerContainer{}) hub.opts = ParseOptions(options...) if hub.opts.MutableCheck != nil { go hub.mutableCheck() @@ -226,12 +226,12 @@ func (h *Hub) NewMessagerMap() MessagerMap { // GetMessagerMap returns hub's inner field messagerMap. func (h *Hub) GetMessagerMap() MessagerMap { - return h.messagerKeeper.Load().MessagerMap + return h.messagerContainer.Load().MessagerMap } // SetMessagerMap sets hub's inner field messagerMap. func (h *Hub) SetMessagerMap(messagerMap MessagerMap) { - h.messagerKeeper.Store(newMessagerKeeper(messagerMap)) + h.messagerContainer.Store(newMessagerContainer(messagerMap)) } // GetMessager finds and returns the specified Messenger in hub. @@ -313,10 +313,10 @@ func (h *Hub) onMutateDefault(name string, original, current proto.Message) { // GetLastLoadedTime returns the time when hub's messagerMap was last set. func (h *Hub) GetLastLoadedTime() time.Time { - return h.messagerKeeper.Load().LoadedTime + return h.messagerContainer.Load().LoadedTime } -type MessagerKeeper struct { +type MessagerContainer struct { MessagerMap MessagerMap LoadedTime time.Time // Auto-generated fields below @@ -331,57 +331,57 @@ type MessagerKeeper struct { ThemeConf *ThemeConf } -func newMessagerKeeper(messagerMap MessagerMap) *MessagerKeeper { - messagerKeeper := &MessagerKeeper{ +func newMessagerContainer(messagerMap MessagerMap) *MessagerContainer { + messagerContainer := &MessagerContainer{ MessagerMap: messagerMap, LoadedTime: time.Now(), } - messagerKeeper.HeroConf, _ = messagerMap["HeroConf"].(*HeroConf) - messagerKeeper.HeroBaseConf, _ = messagerMap["HeroBaseConf"].(*HeroBaseConf) - messagerKeeper.ItemConf, _ = messagerMap["ItemConf"].(*ItemConf) - messagerKeeper.PatchReplaceConf, _ = messagerMap["PatchReplaceConf"].(*PatchReplaceConf) - messagerKeeper.PatchMergeConf, _ = messagerMap["PatchMergeConf"].(*PatchMergeConf) - messagerKeeper.RecursivePatchConf, _ = messagerMap["RecursivePatchConf"].(*RecursivePatchConf) - messagerKeeper.ActivityConf, _ = messagerMap["ActivityConf"].(*ActivityConf) - messagerKeeper.ChapterConf, _ = messagerMap["ChapterConf"].(*ChapterConf) - messagerKeeper.ThemeConf, _ = messagerMap["ThemeConf"].(*ThemeConf) - return messagerKeeper + messagerContainer.HeroConf, _ = messagerMap["HeroConf"].(*HeroConf) + messagerContainer.HeroBaseConf, _ = messagerMap["HeroBaseConf"].(*HeroBaseConf) + messagerContainer.ItemConf, _ = messagerMap["ItemConf"].(*ItemConf) + messagerContainer.PatchReplaceConf, _ = messagerMap["PatchReplaceConf"].(*PatchReplaceConf) + messagerContainer.PatchMergeConf, _ = messagerMap["PatchMergeConf"].(*PatchMergeConf) + messagerContainer.RecursivePatchConf, _ = messagerMap["RecursivePatchConf"].(*RecursivePatchConf) + messagerContainer.ActivityConf, _ = messagerMap["ActivityConf"].(*ActivityConf) + messagerContainer.ChapterConf, _ = messagerMap["ChapterConf"].(*ChapterConf) + messagerContainer.ThemeConf, _ = messagerMap["ThemeConf"].(*ThemeConf) + return messagerContainer } // Auto-generated getters below func (h *Hub) GetHeroConf() *HeroConf { - return h.messagerKeeper.Load().HeroConf + return h.messagerContainer.Load().HeroConf } func (h *Hub) GetHeroBaseConf() *HeroBaseConf { - return h.messagerKeeper.Load().HeroBaseConf + return h.messagerContainer.Load().HeroBaseConf } func (h *Hub) GetItemConf() *ItemConf { - return h.messagerKeeper.Load().ItemConf + return h.messagerContainer.Load().ItemConf } func (h *Hub) GetPatchReplaceConf() *PatchReplaceConf { - return h.messagerKeeper.Load().PatchReplaceConf + return h.messagerContainer.Load().PatchReplaceConf } func (h *Hub) GetPatchMergeConf() *PatchMergeConf { - return h.messagerKeeper.Load().PatchMergeConf + return h.messagerContainer.Load().PatchMergeConf } func (h *Hub) GetRecursivePatchConf() *RecursivePatchConf { - return h.messagerKeeper.Load().RecursivePatchConf + return h.messagerContainer.Load().RecursivePatchConf } func (h *Hub) GetActivityConf() *ActivityConf { - return h.messagerKeeper.Load().ActivityConf + return h.messagerContainer.Load().ActivityConf } func (h *Hub) GetChapterConf() *ChapterConf { - return h.messagerKeeper.Load().ChapterConf + return h.messagerContainer.Load().ChapterConf } func (h *Hub) GetThemeConf() *ThemeConf { - return h.messagerKeeper.Load().ThemeConf + return h.messagerContainer.Load().ThemeConf } From 54b3a77c966831fe60e23b15e4707cd86d9f12ae Mon Sep 17 00:00:00 2001 From: Kybxd <627940450@qq.com> Date: Wed, 23 Apr 2025 15:49:26 +0800 Subject: [PATCH 3/4] feat: benchmark --- test/go-tableau-loader/hub/hub_test.go | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/go-tableau-loader/hub/hub_test.go diff --git a/test/go-tableau-loader/hub/hub_test.go b/test/go-tableau-loader/hub/hub_test.go new file mode 100644 index 00000000..7d1cba0e --- /dev/null +++ b/test/go-tableau-loader/hub/hub_test.go @@ -0,0 +1,40 @@ +package hub + +import ( + "testing" + + tableau "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader" + "github.com/tableauio/tableau/format" + "github.com/tableauio/tableau/load" +) + +func prepareHubForTest() *tableau.Hub { + hub := tableau.NewHub() + err := hub.Load("../../testdata/conf/", format.JSON, + load.IgnoreUnknownFields(), + load.Paths(map[string]string{ + "ItemConf": "../../testdata/conf/ItemConf.json", + })) + if err != nil { + panic(err) + } + return hub +} + +func Benchmark_GetMessager(b *testing.B) { + // var once sync.Once + hub := prepareHubForTest() + for i := 0; i < b.N; i++ { + _ = hub.GetMessager("ItemConf").(*tableau.ItemConf) + // once.Do(func() { fmt.Println(msger.Data()) }) + } +} + +func Benchmark_GetItemConf(b *testing.B) { + // var once sync.Once + hub := prepareHubForTest() + for i := 0; i < b.N; i++ { + _ = hub.GetItemConf() + // once.Do(func() { fmt.Println(msger.Data()) }) + } +} From 15e1e43654eb409170615b5518dc6c4e49ac7b7d Mon Sep 17 00:00:00 2001 From: Kybxd <627940450@qq.com> Date: Thu, 24 Apr 2025 15:45:44 +0800 Subject: [PATCH 4/4] feat: change messagerContainer and its fields to unexported --- cmd/protoc-gen-go-tableau-loader/hub.go | 35 ++++---- .../protoconf/loader/hub.pc.go | 86 +++++++++---------- 2 files changed, 61 insertions(+), 60 deletions(-) diff --git a/cmd/protoc-gen-go-tableau-loader/hub.go b/cmd/protoc-gen-go-tableau-loader/hub.go index 508e3ba2..6dadb63c 100644 --- a/cmd/protoc-gen-go-tableau-loader/hub.go +++ b/cmd/protoc-gen-go-tableau-loader/hub.go @@ -3,6 +3,7 @@ package main import ( "path/filepath" + "github.com/iancoleman/strcase" "google.golang.org/protobuf/compiler/protogen" ) @@ -17,25 +18,25 @@ func generateHub(gen *protogen.Plugin) { g.P(staticHubContent) g.P() - // generate messager keeper typedef - g.P("type MessagerContainer struct {") - g.P("MessagerMap MessagerMap") - g.P("LoadedTime time.Time") - g.P("// Auto-generated fields below") + // generate messager container type + g.P("type messagerContainer struct {") + g.P("messagerMap MessagerMap") + g.P("loadedTime time.Time") + g.P("// all messagers as fields for fast access") for _, messager := range messagers { - g.P(messager, " *", messager) + g.P(strcase.ToLowerCamel(messager), " *", messager) } g.P("}") g.P() - // generate messager keeper constructor - g.P("func newMessagerContainer(messagerMap MessagerMap) *MessagerContainer {") - g.P("messagerContainer := &MessagerContainer{") - g.P("MessagerMap: messagerMap,") - g.P("LoadedTime: time.Now(),") + // generate messager container constructor + g.P("func newMessagerContainer(messagerMap MessagerMap) *messagerContainer {") + g.P("messagerContainer := &messagerContainer{") + g.P("messagerMap: messagerMap,") + g.P("loadedTime: time.Now(),") g.P("}") for _, messager := range messagers { - g.P("messagerContainer.", messager, `, _ = messagerMap["`, messager, `"].(*`, messager, ")") + g.P("messagerContainer.", strcase.ToLowerCamel(messager), `, _ = messagerMap["`, messager, `"].(*`, messager, ")") } g.P("return messagerContainer") g.P("}") @@ -46,7 +47,7 @@ func generateHub(gen *protogen.Plugin) { g.P() for _, messager := range messagers { g.P("func (h *Hub) Get", messager, "() *", messager, " {") - g.P("return h.messagerContainer.Load().", messager) + g.P("return h.messagerContainer.Load().", strcase.ToLowerCamel(messager)) g.P("}") g.P() } @@ -242,13 +243,13 @@ func BoolToInt(ok bool) int { // Hub is the messager manager. type Hub struct { - messagerContainer atomic.Pointer[MessagerContainer] + messagerContainer atomic.Pointer[messagerContainer] opts *Options } func NewHub(options ...Option) *Hub { hub := &Hub{} - hub.messagerContainer.Store(&MessagerContainer{}) + hub.messagerContainer.Store(&messagerContainer{}) hub.opts = ParseOptions(options...) if hub.opts.MutableCheck != nil { go hub.mutableCheck() @@ -273,7 +274,7 @@ func (h *Hub) NewMessagerMap() MessagerMap { // GetMessagerMap returns hub's inner field messagerMap. func (h *Hub) GetMessagerMap() MessagerMap { - return h.messagerContainer.Load().MessagerMap + return h.messagerContainer.Load().messagerMap } // SetMessagerMap sets hub's inner field messagerMap. @@ -360,6 +361,6 @@ func (h *Hub) onMutateDefault(name string, original, current proto.Message) { // GetLastLoadedTime returns the time when hub's messagerMap was last set. func (h *Hub) GetLastLoadedTime() time.Time { - return h.messagerContainer.Load().LoadedTime + return h.messagerContainer.Load().loadedTime } ` diff --git a/test/go-tableau-loader/protoconf/loader/hub.pc.go b/test/go-tableau-loader/protoconf/loader/hub.pc.go index 47dbe39a..8aee1194 100644 --- a/test/go-tableau-loader/protoconf/loader/hub.pc.go +++ b/test/go-tableau-loader/protoconf/loader/hub.pc.go @@ -195,13 +195,13 @@ func BoolToInt(ok bool) int { // Hub is the messager manager. type Hub struct { - messagerContainer atomic.Pointer[MessagerContainer] + messagerContainer atomic.Pointer[messagerContainer] opts *Options } func NewHub(options ...Option) *Hub { hub := &Hub{} - hub.messagerContainer.Store(&MessagerContainer{}) + hub.messagerContainer.Store(&messagerContainer{}) hub.opts = ParseOptions(options...) if hub.opts.MutableCheck != nil { go hub.mutableCheck() @@ -226,7 +226,7 @@ func (h *Hub) NewMessagerMap() MessagerMap { // GetMessagerMap returns hub's inner field messagerMap. func (h *Hub) GetMessagerMap() MessagerMap { - return h.messagerContainer.Load().MessagerMap + return h.messagerContainer.Load().messagerMap } // SetMessagerMap sets hub's inner field messagerMap. @@ -313,75 +313,75 @@ func (h *Hub) onMutateDefault(name string, original, current proto.Message) { // GetLastLoadedTime returns the time when hub's messagerMap was last set. func (h *Hub) GetLastLoadedTime() time.Time { - return h.messagerContainer.Load().LoadedTime -} - -type MessagerContainer struct { - MessagerMap MessagerMap - LoadedTime time.Time - // Auto-generated fields below - HeroConf *HeroConf - HeroBaseConf *HeroBaseConf - ItemConf *ItemConf - PatchReplaceConf *PatchReplaceConf - PatchMergeConf *PatchMergeConf - RecursivePatchConf *RecursivePatchConf - ActivityConf *ActivityConf - ChapterConf *ChapterConf - ThemeConf *ThemeConf -} - -func newMessagerContainer(messagerMap MessagerMap) *MessagerContainer { - messagerContainer := &MessagerContainer{ - MessagerMap: messagerMap, - LoadedTime: time.Now(), + return h.messagerContainer.Load().loadedTime +} + +type messagerContainer struct { + messagerMap MessagerMap + loadedTime time.Time + // all messagers as fields for fast access + heroConf *HeroConf + heroBaseConf *HeroBaseConf + itemConf *ItemConf + patchReplaceConf *PatchReplaceConf + patchMergeConf *PatchMergeConf + recursivePatchConf *RecursivePatchConf + activityConf *ActivityConf + chapterConf *ChapterConf + themeConf *ThemeConf +} + +func newMessagerContainer(messagerMap MessagerMap) *messagerContainer { + messagerContainer := &messagerContainer{ + messagerMap: messagerMap, + loadedTime: time.Now(), } - messagerContainer.HeroConf, _ = messagerMap["HeroConf"].(*HeroConf) - messagerContainer.HeroBaseConf, _ = messagerMap["HeroBaseConf"].(*HeroBaseConf) - messagerContainer.ItemConf, _ = messagerMap["ItemConf"].(*ItemConf) - messagerContainer.PatchReplaceConf, _ = messagerMap["PatchReplaceConf"].(*PatchReplaceConf) - messagerContainer.PatchMergeConf, _ = messagerMap["PatchMergeConf"].(*PatchMergeConf) - messagerContainer.RecursivePatchConf, _ = messagerMap["RecursivePatchConf"].(*RecursivePatchConf) - messagerContainer.ActivityConf, _ = messagerMap["ActivityConf"].(*ActivityConf) - messagerContainer.ChapterConf, _ = messagerMap["ChapterConf"].(*ChapterConf) - messagerContainer.ThemeConf, _ = messagerMap["ThemeConf"].(*ThemeConf) + messagerContainer.heroConf, _ = messagerMap["HeroConf"].(*HeroConf) + messagerContainer.heroBaseConf, _ = messagerMap["HeroBaseConf"].(*HeroBaseConf) + messagerContainer.itemConf, _ = messagerMap["ItemConf"].(*ItemConf) + messagerContainer.patchReplaceConf, _ = messagerMap["PatchReplaceConf"].(*PatchReplaceConf) + messagerContainer.patchMergeConf, _ = messagerMap["PatchMergeConf"].(*PatchMergeConf) + messagerContainer.recursivePatchConf, _ = messagerMap["RecursivePatchConf"].(*RecursivePatchConf) + messagerContainer.activityConf, _ = messagerMap["ActivityConf"].(*ActivityConf) + messagerContainer.chapterConf, _ = messagerMap["ChapterConf"].(*ChapterConf) + messagerContainer.themeConf, _ = messagerMap["ThemeConf"].(*ThemeConf) return messagerContainer } // Auto-generated getters below func (h *Hub) GetHeroConf() *HeroConf { - return h.messagerContainer.Load().HeroConf + return h.messagerContainer.Load().heroConf } func (h *Hub) GetHeroBaseConf() *HeroBaseConf { - return h.messagerContainer.Load().HeroBaseConf + return h.messagerContainer.Load().heroBaseConf } func (h *Hub) GetItemConf() *ItemConf { - return h.messagerContainer.Load().ItemConf + return h.messagerContainer.Load().itemConf } func (h *Hub) GetPatchReplaceConf() *PatchReplaceConf { - return h.messagerContainer.Load().PatchReplaceConf + return h.messagerContainer.Load().patchReplaceConf } func (h *Hub) GetPatchMergeConf() *PatchMergeConf { - return h.messagerContainer.Load().PatchMergeConf + return h.messagerContainer.Load().patchMergeConf } func (h *Hub) GetRecursivePatchConf() *RecursivePatchConf { - return h.messagerContainer.Load().RecursivePatchConf + return h.messagerContainer.Load().recursivePatchConf } func (h *Hub) GetActivityConf() *ActivityConf { - return h.messagerContainer.Load().ActivityConf + return h.messagerContainer.Load().activityConf } func (h *Hub) GetChapterConf() *ChapterConf { - return h.messagerContainer.Load().ChapterConf + return h.messagerContainer.Load().chapterConf } func (h *Hub) GetThemeConf() *ThemeConf { - return h.messagerContainer.Load().ThemeConf + return h.messagerContainer.Load().themeConf }