From f8612ca59781630ab4c3bea71248b09733e3a64b Mon Sep 17 00:00:00 2001 From: Zachary Harrold Date: Sat, 2 Dec 2023 12:11:24 +1100 Subject: [PATCH] Resolve upstream conflicts Added `assert` in `QueryIter::fold_over_table_range` out of the loop to hint compiler on optimisation. --- crates/bevy_ecs/src/query/iter.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/bevy_ecs/src/query/iter.rs b/crates/bevy_ecs/src/query/iter.rs index 99c710e64b3ab..1d5247423de11 100644 --- a/crates/bevy_ecs/src/query/iter.rs +++ b/crates/bevy_ecs/src/query/iter.rs @@ -106,6 +106,11 @@ impl<'w, 's, Q: WorldQueryData, F: WorldQueryFilter> QueryIter<'w, 's, Q, F> { where Func: FnMut(B, Q::Item<'w>) -> B, { + assert!( + rows.end <= u32::MAX as usize, + "TableRow is only valid up to u32::MAX" + ); + Q::set_table(&mut self.cursor.fetch, &self.query_state.fetch_state, table); F::set_table( &mut self.cursor.filter, @@ -117,7 +122,7 @@ impl<'w, 's, Q: WorldQueryData, F: WorldQueryFilter> QueryIter<'w, 's, Q, F> { for row in rows { // SAFETY: Caller assures `row` in range of the current archetype. let entity = entities.get_unchecked(row); - let row = TableRow::new(row); + let row = TableRow::from_usize(row); // SAFETY: set_table was called prior. // Caller assures `row` in range of the current archetype. if !F::filter_fetch(&mut self.cursor.filter, *entity, row) {