gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/versionx/cachez-source.go (about) 1 package versionx 2 3 import ( 4 "gitee.com/zhongguo168a/gocodes/datax" 5 "gitee.com/zhongguo168a/gocodes/datax/mapx" 6 ) 7 8 func NewSource() *Source { 9 return &Source{ 10 enableVersion: false, 11 origin: datax.M{}, 12 versions: map[string]int{}, 13 } 14 } 15 16 func NewSourceWith(origin datax.M) *Source { 17 return &Source{ 18 enableVersion: false, 19 origin: origin, 20 versions: map[string]int{}, 21 } 22 } 23 24 type Source struct { 25 // 数据 26 origin datax.M 27 // 版本信息 28 versions map[string]int 29 // 最后的版本号 30 lastVersion int 31 // 开启版本记录 32 enableVersion bool 33 // 34 removed bool 35 // 36 onChange func(path, field string, val interface{}) 37 } 38 39 func (s *Source) RefReset(val map[string]interface{}) { 40 s.origin = val 41 s.versions = map[string]int{} 42 s.lastVersion = 0 43 s.removed = false 44 } 45 46 func (s *Source) WithVersion() *Source { 47 s.enableVersion = true 48 s.versions = map[string]int{} 49 return s 50 } 51 52 func (s *Source) RefIsRemove() bool { 53 return s.removed 54 } 55 56 func (s *Source) Clone() (r *Source) { 57 r = &Source{} 58 r.origin = mapx.CloneMap(s.origin) 59 if s.enableVersion { 60 r.versions = map[string]int{} 61 for key, val := range s.versions { 62 r.versions[key] = val 63 } 64 r.lastVersion = s.lastVersion 65 } 66 67 return 68 } 69 70 func (s *Source) Dispose() { 71 s.origin = nil 72 s.versions = nil 73 } 74 75 func (s *Source) RefRemove() { 76 s.removed = true 77 } 78 79 // 实例最后更新的版本号 80 func (s *Source) RefLastVersion() int { 81 return s.lastVersion 82 } 83 84 // 实例的版本信息 85 func (s *Source) RefVersions() (r map[string]int) { 86 r = s.versions 87 return 88 } 89 90 // 版本更新完成 91 func (s *Source) RefVersionComplete() { 92 s.lastVersion++ 93 } 94 95 // 重置版本号, 所有字段都发生变化 96 func (s *Source) KeyVersionReset() { 97 s.lastVersion = -1 98 } 99 100 // 增加字段的版本 101 func (s *Source) KeyVersionNew(parents []string, path string) { 102 for _, val := range parents { 103 s.versions[val] = s.lastVersion + 1 104 } 105 s.versions[path] = s.lastVersion + 1 106 }