@@ -11,19 +11,23 @@ public class ObserverBuilder {
1111 private final Flecs world ;
1212 private final Arena arena ;
1313 private final MemorySegment desc ;
14- private int termCount = 0 ;
15- private int eventCount = 0 ;
16- private static final long TERM_SIZE = ecs_term_t .layout ().byteSize ();
17- private static final int MAX_EVENTS = 8 ;
14+ private int termCount ;
15+ private int eventCount ;
1816 private Query .IterCallback iterCallback ;
1917 private Query .RunCallback runCallback ;
2018 private Query .EntityCallback entityCallback ;
19+ private Iter iter ;
20+ private static final long TERM_SIZE = ecs_term_t .layout ().byteSize ();
21+ private static final int MAX_EVENTS = 8 ;
2122
2223 public ObserverBuilder (Flecs world ) {
2324 this .world = world ;
2425 this .arena = Arena .ofConfined ();
2526 this .desc = ecs_observer_desc_t .allocate (this .arena );
27+ this .termCount = 0 ;
28+ this .eventCount = 0 ;
2629 this .desc .fill ((byte ) 0 );
30+ this .iter = null ;
2731 }
2832
2933 public ObserverBuilder (Flecs world , String name ) {
@@ -159,16 +163,13 @@ public ObserverBuilder observerFlags(int flags) {
159163 public FlecsObserver iter (Query .IterCallback callback ) {
160164 this .iterCallback = callback ;
161165
162- final ThreadLocal <Iter > iterHolder = new ThreadLocal <>();
163166 MemorySegment callbackStub = ecs_iter_action_t .allocate (it -> {
164- Iter iter = iterHolder .get ();
165- if (iter == null ) {
166- iter = new Iter (it , this .world );
167- iterHolder .set (iter );
167+ if (this .iter == null ) {
168+ this .iter = new Iter (it , this .world );
168169 } else {
169170 iter .setNativeIter (it );
170171 }
171- callback .accept (iter );
172+ callback .accept (this . iter );
172173 }, this .world .arena ());
173174
174175 ecs_observer_desc_t .callback (this .desc , callbackStub );
@@ -179,16 +180,13 @@ public FlecsObserver iter(Query.IterCallback callback) {
179180 public FlecsObserver run (Query .RunCallback callback ) {
180181 this .runCallback = callback ;
181182
182- final ThreadLocal <Iter > iterHolder = new ThreadLocal <>();
183183 MemorySegment callbackStub = ecs_run_action_t .allocate (it -> {
184- Iter iter = iterHolder .get ();
185- if (iter == null ) {
186- iter = new Iter (it , this .world );
187- iterHolder .set (iter );
184+ if (this .iter == null ) {
185+ this .iter = new Iter (it , this .world );
188186 } else {
189187 iter .setNativeIter (it );
190188 }
191- callback .accept (iter );
189+ callback .accept (this . iter );
192190 }, this .world .arena ());
193191
194192 ecs_observer_desc_t .run (this .desc , callbackStub );
0 commit comments