diff --git a/crates/bevy_reflect/src/list.rs b/crates/bevy_reflect/src/list.rs index 95da87edeb..2ecb8f52b2 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -149,8 +149,15 @@ impl<'a> Iterator for ListIter<'a> { self.index += 1; value } + + fn size_hint(&self) -> (usize, Option) { + let size = self.list.len(); + (size, Some(size)) + } } +impl<'a> ExactSizeIterator for ListIter<'a> {} + #[inline] pub fn list_apply(a: &mut L, b: &dyn Reflect) { if let ReflectRef::List(list_value) = b.reflect_ref() { diff --git a/crates/bevy_reflect/src/map.rs b/crates/bevy_reflect/src/map.rs index 135cf9df1b..f87e369113 100644 --- a/crates/bevy_reflect/src/map.rs +++ b/crates/bevy_reflect/src/map.rs @@ -167,8 +167,15 @@ impl<'a> Iterator for MapIter<'a> { self.index += 1; value } + + fn size_hint(&self) -> (usize, Option) { + let size = self.map.len(); + (size, Some(size)) + } } +impl<'a> ExactSizeIterator for MapIter<'a> {} + #[inline] pub fn map_partial_eq(a: &M, b: &dyn Reflect) -> Option { let map = if let ReflectRef::Map(map) = b.reflect_ref() { diff --git a/crates/bevy_reflect/src/struct_trait.rs b/crates/bevy_reflect/src/struct_trait.rs index 756cbdbcd3..c644c902ee 100644 --- a/crates/bevy_reflect/src/struct_trait.rs +++ b/crates/bevy_reflect/src/struct_trait.rs @@ -37,8 +37,15 @@ impl<'a> Iterator for FieldIter<'a> { self.index += 1; value } + + fn size_hint(&self) -> (usize, Option) { + let size = self.struct_val.field_len(); + (size, Some(size)) + } } +impl<'a> ExactSizeIterator for FieldIter<'a> {} + pub trait GetField { fn get_field(&self, name: &str) -> Option<&T>; fn get_field_mut(&mut self, name: &str) -> Option<&mut T>; diff --git a/crates/bevy_reflect/src/tuple.rs b/crates/bevy_reflect/src/tuple.rs index 70692fd8a0..75366d2a6b 100644 --- a/crates/bevy_reflect/src/tuple.rs +++ b/crates/bevy_reflect/src/tuple.rs @@ -32,8 +32,15 @@ impl<'a> Iterator for TupleFieldIter<'a> { self.index += 1; value } + + fn size_hint(&self) -> (usize, Option) { + let size = self.tuple.field_len(); + (size, Some(size)) + } } +impl<'a> ExactSizeIterator for TupleFieldIter<'a> {} + pub trait GetTupleField { fn get_field(&self, index: usize) -> Option<&T>; fn get_field_mut(&mut self, index: usize) -> Option<&mut T>; diff --git a/crates/bevy_reflect/src/tuple_struct.rs b/crates/bevy_reflect/src/tuple_struct.rs index d827e79158..63385df6bb 100644 --- a/crates/bevy_reflect/src/tuple_struct.rs +++ b/crates/bevy_reflect/src/tuple_struct.rs @@ -32,8 +32,15 @@ impl<'a> Iterator for TupleStructFieldIter<'a> { self.index += 1; value } + + fn size_hint(&self) -> (usize, Option) { + let size = self.tuple_struct.field_len(); + (size, Some(size)) + } } +impl<'a> ExactSizeIterator for TupleStructFieldIter<'a> {} + pub trait GetTupleStructField { fn get_field(&self, index: usize) -> Option<&T>; fn get_field_mut(&mut self, index: usize) -> Option<&mut T>; diff --git a/crates/bevy_render/src/renderer/render_resource/render_resource.rs b/crates/bevy_render/src/renderer/render_resource/render_resource.rs index 616c8b65e9..c7bdf5905e 100644 --- a/crates/bevy_render/src/renderer/render_resource/render_resource.rs +++ b/crates/bevy_render/src/renderer/render_resource/render_resource.rs @@ -118,8 +118,15 @@ impl<'a> Iterator for RenderResourceIterator<'a> { Some(render_resource) } } + + fn size_hint(&self) -> (usize, Option) { + let size = self.render_resources.render_resources_len(); + (size, Some(size)) + } } +impl<'a> ExactSizeIterator for RenderResourceIterator<'a> {} + #[macro_export] macro_rules! impl_render_resource_bytes { ($ty:ident) => { diff --git a/crates/bevy_render/src/shader/shader.rs b/crates/bevy_render/src/shader/shader.rs index 66376c11c6..9672dfdfac 100644 --- a/crates/bevy_render/src/shader/shader.rs +++ b/crates/bevy_render/src/shader/shader.rs @@ -228,8 +228,17 @@ impl<'a> Iterator for ShaderStagesIterator<'a> { self.state += 1; ret } + + fn size_hint(&self) -> (usize, Option) { + if self.shader_stages.fragment.is_some() { + return (2, Some(2)); + } + (1, Some(1)) + } } +impl<'a> ExactSizeIterator for ShaderStagesIterator<'a> {} + impl ShaderStages { pub fn new(vertex_shader: Handle) -> Self { ShaderStages { diff --git a/crates/bevy_render/src/shader/shader_defs.rs b/crates/bevy_render/src/shader/shader_defs.rs index 12ad56e29c..1e61b1d9ed 100644 --- a/crates/bevy_render/src/shader/shader_defs.rs +++ b/crates/bevy_render/src/shader/shader_defs.rs @@ -49,6 +49,10 @@ impl<'a> Iterator for ShaderDefIterator<'a> { } } } + + fn size_hint(&self) -> (usize, Option) { + (0, Some(self.shader_defs.shader_defs_len())) + } } impl ShaderDef for bool {