@@ -55,8 +55,7 @@ impl Default for BoxedRunCriteria {
5555 Self {
5656 criteria_system : None ,
5757 initialized : false ,
58- // MAX ensures access information will be initialized on first run.
59- archetype_generation : ArchetypeGeneration :: new ( usize:: MAX ) ,
58+ archetype_generation : ArchetypeGeneration :: initial ( ) ,
6059 }
6160 }
6261}
@@ -74,20 +73,14 @@ impl BoxedRunCriteria {
7473 self . initialized = true ;
7574 }
7675 let archetypes = world. archetypes ( ) ;
77- let old_generation = self . archetype_generation ;
7876 let new_generation = archetypes. generation ( ) ;
79- if old_generation != new_generation {
80- let archetype_index_range = if old_generation. value ( ) == usize:: MAX {
81- 0 ..archetypes. len ( )
82- } else {
83- old_generation. value ( ) ..archetypes. len ( )
84- } ;
85- for archetype in archetypes. archetypes [ archetype_index_range] . iter ( ) {
86- run_criteria. new_archetype ( archetype) ;
87- }
77+ let old_generation = std:: mem:: replace ( & mut self . archetype_generation , new_generation) ;
78+ let archetype_index_range = old_generation. value ( ) ..new_generation. value ( ) ;
8879
89- self . archetype_generation = new_generation;
80+ for archetype in archetypes. archetypes [ archetype_index_range] . iter ( ) {
81+ run_criteria. new_archetype ( archetype) ;
9082 }
83+
9184 let should_run = run_criteria. run ( ( ) , world) ;
9285 run_criteria. apply_buffers ( world) ;
9386 should_run
@@ -125,8 +118,7 @@ impl RunCriteriaContainer {
125118 label : descriptor. label ,
126119 before : descriptor. before ,
127120 after : descriptor. after ,
128- // MAX ensures access information will be initialized on first run.
129- archetype_generation : ArchetypeGeneration :: new ( usize:: MAX ) ,
121+ archetype_generation : ArchetypeGeneration :: initial ( ) ,
130122 }
131123 }
132124
@@ -146,16 +138,9 @@ impl RunCriteriaContainer {
146138
147139 pub fn update_archetypes ( & mut self , world : & World ) {
148140 let archetypes = world. archetypes ( ) ;
149- let old_generation = self . archetype_generation ;
150141 let new_generation = archetypes. generation ( ) ;
151- if old_generation == new_generation {
152- return ;
153- }
154- let archetype_index_range = if old_generation. value ( ) == usize:: MAX {
155- 0 ..archetypes. len ( )
156- } else {
157- old_generation. value ( ) ..archetypes. len ( )
158- } ;
142+ let old_generation = std:: mem:: replace ( & mut self . archetype_generation , new_generation) ;
143+ let archetype_index_range = old_generation. value ( ) ..new_generation. value ( ) ;
159144 for archetype in archetypes. archetypes [ archetype_index_range] . iter ( ) {
160145 match & mut self . inner {
161146 RunCriteriaInner :: Single ( system) => {
0 commit comments