@@ -21,7 +21,10 @@ type PrePhonWordStepsRepository struct {
21
21
steps * interfaces.PrePhonemizationSteps
22
22
}
23
23
24
- type prephonlanguages map [string ]* prephonlanguage
24
+ type prephonlanguages struct {
25
+ mut sync.RWMutex
26
+ lang map [string ]* prephonlanguage
27
+ }
25
28
26
29
type prephonlanguage struct {
27
30
PrePhonWordSteps []PrePhonWordStep `json:"PrePhonWordSteps"`
@@ -38,45 +41,57 @@ func (p *prephonlanguages) Len(isReverse bool, lang string) int {
38
41
if isReverse {
39
42
reverse = "_reverse"
40
43
}
41
- if p == nil || (* p )[lang + reverse ] == nil {
44
+ p .mut .RLock ()
45
+ defer p .mut .RUnlock ()
46
+ if p .lang == nil || (p .lang )[lang + reverse ] == nil {
42
47
return 0
43
48
}
44
- return len ((* p )[lang + reverse ].PrePhonWordSteps )
49
+ return len ((p . lang )[lang + reverse ].PrePhonWordSteps )
45
50
}
46
51
func (p * prephonlanguages ) IsNormalize (isReverse bool , lang string , n int ) bool {
47
52
var reverse string
48
53
if isReverse {
49
54
reverse = "_reverse"
50
55
}
51
- return len ((* p )[lang + reverse ].PrePhonWordSteps [n ].Normalize ) > 0
56
+ p .mut .RLock ()
57
+ defer p .mut .RUnlock ()
58
+ return len ((p .lang )[lang + reverse ].PrePhonWordSteps [n ].Normalize ) > 0
52
59
}
53
60
func (p * prephonlanguages ) IsTrim (isReverse bool , lang string , n int ) bool {
54
61
var reverse string
55
62
if isReverse {
56
63
reverse = "_reverse"
57
64
}
58
- return len ((* p )[lang + reverse ].PrePhonWordSteps [n ].Trim ) > 0
65
+ p .mut .RLock ()
66
+ defer p .mut .RUnlock ()
67
+ return len ((p .lang )[lang + reverse ].PrePhonWordSteps [n ].Trim ) > 0
59
68
}
60
69
func (p * prephonlanguages ) IsToLower (isReverse bool , lang string , n int ) bool {
61
70
var reverse string
62
71
if isReverse {
63
72
reverse = "_reverse"
64
73
}
65
- return (* p )[lang + reverse ].PrePhonWordSteps [n ].ToLower
74
+ p .mut .RLock ()
75
+ defer p .mut .RUnlock ()
76
+ return (p .lang )[lang + reverse ].PrePhonWordSteps [n ].ToLower
66
77
}
67
78
func (p * prephonlanguages ) GetNormalize (isReverse bool , lang string , n int ) string {
68
79
var reverse string
69
80
if isReverse {
70
81
reverse = "_reverse"
71
82
}
72
- return (* p )[lang + reverse ].PrePhonWordSteps [n ].Normalize
83
+ p .mut .RLock ()
84
+ defer p .mut .RUnlock ()
85
+ return (p .lang )[lang + reverse ].PrePhonWordSteps [n ].Normalize
73
86
}
74
87
func (p * prephonlanguages ) GetTrim (isReverse bool , lang string , n int ) string {
75
88
var reverse string
76
89
if isReverse {
77
90
reverse = "_reverse"
78
91
}
79
- return (* p )[lang + reverse ].PrePhonWordSteps [n ].Trim
92
+ p .mut .RLock ()
93
+ defer p .mut .RUnlock ()
94
+ return (p .lang )[lang + reverse ].PrePhonWordSteps [n ].Trim
80
95
}
81
96
func (p * PrePhonWordStepsRepository ) LoadLanguage (isReverse bool , lang string ) {
82
97
@@ -85,9 +100,10 @@ func (p *PrePhonWordStepsRepository) LoadLanguage(isReverse bool, lang string) {
85
100
reverse = "_reverse"
86
101
}
87
102
88
- p .mut .RLock ()
89
- existing_lang := (* p .lang )[lang + reverse ]
90
- p .mut .RUnlock ()
103
+ p .mut .Lock ()
104
+ defer p .mut .Unlock ()
105
+
106
+ existing_lang := (p .lang .lang )[lang + reverse ]
91
107
92
108
if existing_lang != nil {
93
109
return
@@ -105,13 +121,12 @@ func (p *PrePhonWordStepsRepository) LoadLanguage(isReverse bool, lang string) {
105
121
log .Now ().Errorf ("Error parsing JSON: %v\n " , err )
106
122
continue
107
123
}
108
- p .mut . Lock ( )
109
- (* p .lang )[lang + reverse ] = & langone
124
+ p .lang . lang = make ( map [ string ] * prephonlanguage )
125
+ (p . lang .lang )[lang + reverse ] = & langone
110
126
111
- iface := (interfaces .PrePhonemizationSteps )(& ( * p .lang ))
127
+ iface := (interfaces .PrePhonemizationSteps )(( p .lang ))
112
128
113
129
p .steps = & iface
114
- p .mut .Unlock ()
115
130
}
116
131
}
117
132
@@ -183,7 +198,7 @@ func (s *PrePhonWordStepsRepository) PrePhonemizeWord(isReverse bool, lang strin
183
198
184
199
func NewPrePhonWordStepsRepository (di * DependencyInjection ) * PrePhonWordStepsRepository {
185
200
getter := MustAny [interfaces.DictGetter ](di )
186
- langs := make ( prephonlanguages )
201
+ langs := prephonlanguages {}
187
202
188
203
return & PrePhonWordStepsRepository {
189
204
getter : & getter ,
0 commit comments