@@ -41,6 +41,13 @@ type EffectWorkElem struct {
4141 EffectIndex int
4242}
4343
44+ type genAtom interface {
45+ GetVal () any
46+ SetVal (any )
47+ SetUsedBy (string , bool )
48+ GetUsedBy () []string
49+ }
50+
4451type RootElem struct {
4552 OuterCtx context.Context
4653 Root * ComponentImpl
@@ -50,7 +57,7 @@ type RootElem struct {
5057 CompMap map [string ]* ComponentImpl // component waveid -> component
5158 EffectWorkQueue []* EffectWorkElem
5259 NeedsRenderMap map [string ]bool
53- Atoms map [string ]* atomImpl
60+ Atoms map [string ]genAtom
5461 atomLock sync.Mutex
5562 RefOperations []vdom.VDomRefOperation
5663}
@@ -99,7 +106,7 @@ func MakeRoot() *RootElem {
99106 Root : nil ,
100107 CFuncs : make (map [string ]any ),
101108 CompMap : make (map [string ]* ComponentImpl ),
102- Atoms : make (map [string ]* atomImpl ),
109+ Atoms : make (map [string ]genAtom ),
103110 }
104111}
105112
@@ -120,7 +127,7 @@ func (r *RootElem) cleanupUsedByForUnmount(waveId string) {
120127 defer r .atomLock .Unlock ()
121128
122129 for _ , atom := range r .Atoms {
123- delete ( atom .UsedBy , waveId )
130+ atom .SetUsedBy ( waveId , false )
124131 }
125132}
126133
@@ -132,11 +139,7 @@ func (r *RootElem) AtomSetUsedBy(atomName string, waveId string, used bool) {
132139 if ! ok {
133140 return
134141 }
135- if used {
136- atom .UsedBy [waveId ] = true
137- } else {
138- delete (atom .UsedBy , waveId )
139- }
142+ atom .SetUsedBy (waveId , used )
140143}
141144
142145func (r * RootElem ) AtomAddRenderWork (atomName string ) {
@@ -147,7 +150,7 @@ func (r *RootElem) AtomAddRenderWork(atomName string) {
147150 if ! ok {
148151 return
149152 }
150- for compId := range atom .UsedBy {
153+ for _ , compId := range atom .GetUsedBy () {
151154 r .AddRenderWork (compId )
152155 }
153156}
@@ -163,7 +166,7 @@ func (r *RootElem) GetAtomVal(name string) any {
163166 return atom .GetVal ()
164167}
165168
166- func (r * RootElem ) SetAtomVal (name string , val any , markDirty bool ) {
169+ func (r * RootElem ) SetAtomVal (name string , val any ) {
167170 r .atomLock .Lock ()
168171 defer r .atomLock .Unlock ()
169172
0 commit comments