@@ -43,8 +43,8 @@ class QuickSorter extends Reactor {
4343 resultArr : State < number [ ] > ;
4444 numFragments : State < number > ;
4545
46- leftReactor : Reactor | undefined ;
47- rightReactor : Reactor | undefined ;
46+ leftReactor : State < QuickSorter | undefined > ;
47+ rightReactor : State < QuickSorter | undefined > ;
4848
4949 constructor ( parent : Reactor , name = "root" ) {
5050 super ( parent , name ) ;
@@ -57,6 +57,9 @@ class QuickSorter extends Reactor {
5757 this . resultArr = new State ( [ ] ) ;
5858 this . numFragments = new State ( 0 ) ;
5959
60+ this . leftReactor = new State ( void 114514 ) ;
61+ this . rightReactor = new State ( void 1919810 ) ;
62+
6063 // When the parent sends a message, we send it to children.
6164 this . addMutation (
6265 [ this . parentReadPort ] ,
@@ -68,7 +71,9 @@ class QuickSorter extends Reactor {
6871 this . leftReadPort ,
6972 this . rightReadPort ,
7073 this . resultArr ,
71- this . numFragments
74+ this . numFragments ,
75+ this . leftReactor ,
76+ this . rightReactor
7277 ] ,
7378 function (
7479 this ,
@@ -79,7 +84,9 @@ class QuickSorter extends Reactor {
7984 leftread ,
8085 rightread ,
8186 resultArr ,
82- numFragments
87+ numFragments ,
88+ s_leftreactor , // This is really cursed, but s_ is to indicate that this is a state
89+ s_rightreactor
8390 ) {
8491 const hierarchyImplementation = (
8592 useHierarchy
@@ -118,6 +125,9 @@ class QuickSorter extends Reactor {
118125 `${ this . getReactor ( ) . _name } /r`
119126 ) ;
120127
128+ s_leftreactor . set ( leftReactor ) ;
129+ s_rightreactor . set ( rightReactor ) ;
130+
121131 // Connect ports accoringly
122132 this . connect ( leftWritePort , leftReactor . parentReadPort ) ;
123133 this . connect ( rightWritePort , rightReactor . parentReadPort ) ;
@@ -130,17 +140,26 @@ class QuickSorter extends Reactor {
130140 }
131141 ) ;
132142
133- this . addReaction (
143+ this . addMutation (
134144 [ this . leftReadPort ] ,
135145 [
136146 this . leftReadPort ,
137147 this . resultArr ,
138148 this . numFragments ,
139- this . writable ( this . parentWritePort )
149+ this . writable ( this . parentWritePort ) ,
150+ this . leftReactor
140151 ] ,
141- function ( this , leftreadport , resultArr , numFragments , parentWrite ) {
152+ function (
153+ this ,
154+ leftreadport ,
155+ resultArr ,
156+ numFragments ,
157+ parentWrite ,
158+ s_leftreactor
159+ ) {
142160 const leftResult = leftreadport . get ( ) ;
143161 const myResult = resultArr . get ( ) ;
162+ const leftReactor = s_leftreactor . get ( ) ;
144163 if ( leftResult == null ) {
145164 throw Error ( "Left return null" ) ;
146165 }
@@ -149,28 +168,43 @@ class QuickSorter extends Reactor {
149168 "Result length is 0, but should contain at least the pivots."
150169 ) ;
151170 }
171+ if ( leftReactor == null ) {
172+ throw Error ( "Right reactor is null." ) ;
173+ }
152174
153175 console . log ( `I received a result from my left! ${ leftResult } !` ) ;
154176 resultArr . set ( [ ...leftResult , ...myResult ] ) ;
155177
178+ this . delete ( leftReactor ) ;
179+ s_leftreactor . set ( void "kksk" ) ;
180+
156181 numFragments . set ( numFragments . get ( ) + 1 ) ;
157182 if ( numFragments . get ( ) === 3 ) {
158183 parentWrite . set ( resultArr . get ( ) ) ;
159184 }
160185 }
161186 ) ;
162187
163- this . addReaction (
188+ this . addMutation (
164189 [ this . rightReadPort ] ,
165190 [
166191 this . rightReadPort ,
167192 this . resultArr ,
168193 this . numFragments ,
169- this . writable ( this . parentWritePort )
194+ this . writable ( this . parentWritePort ) ,
195+ this . rightReactor
170196 ] ,
171- function ( this , rightreadport , resultArr , numFragments , parentWrite ) {
197+ function (
198+ this ,
199+ rightreadport ,
200+ resultArr ,
201+ numFragments ,
202+ parentWrite ,
203+ s_rightreactor
204+ ) {
172205 const rightResult = rightreadport . get ( ) ;
173206 const myResult = resultArr . get ( ) ;
207+ const rightReactor = s_rightreactor . get ( ) ;
174208 if ( rightResult == null ) {
175209 throw Error ( "Right return null" ) ;
176210 }
@@ -179,10 +213,18 @@ class QuickSorter extends Reactor {
179213 "Result length is 0, but should contain at least the pivots."
180214 ) ;
181215 }
216+ if ( rightReactor == null ) {
217+ throw Error ( "Right reactor is null." ) ;
218+ }
182219
183220 console . log ( `I received a result from my right! ${ rightResult } !` ) ;
184221 resultArr . set ( [ ...myResult , ...rightResult ] ) ;
185222
223+ // Destroy right reactor and the connection
224+
225+ this . delete ( rightReactor ) ;
226+ s_rightreactor . set ( void "tnok" ) ;
227+
186228 numFragments . set ( numFragments . get ( ) + 1 ) ;
187229 if ( numFragments . get ( ) === 3 ) {
188230 parentWrite . set ( resultArr . get ( ) ) ;
0 commit comments