Skip to content

Commit

Permalink
bevy_reflect: Allow construction of MapIter outside of the bevy_refle…
Browse files Browse the repository at this point in the history
…ct crate. (#8723)

# Objective

Right now it's impossible to construct a MapIter outside of the
bevy_reflect crate, making it impossible to implement the Map trait for
custom map types.

## Solution

Addition of a pub constructor to MapIter.
  • Loading branch information
gakit authored Jun 1, 2023
1 parent bea7fd1 commit acf1362
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
5 changes: 1 addition & 4 deletions crates/bevy_reflect/src/impls/std.rs
Original file line number Diff line number Diff line change
Expand Up @@ -379,10 +379,7 @@ macro_rules! impl_reflect_for_hashmap {
}

fn iter(&self) -> MapIter {
MapIter {
map: self,
index: 0,
}
MapIter::new(self)
}

fn drain(self: Box<Self>) -> Vec<(Box<dyn Reflect>, Box<dyn Reflect>)> {
Expand Down
17 changes: 11 additions & 6 deletions crates/bevy_reflect/src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,10 +245,7 @@ impl Map for DynamicMap {
}

fn iter(&self) -> MapIter {
MapIter {
map: self,
index: 0,
}
MapIter::new(self)
}

fn get_at(&self, index: usize) -> Option<(&dyn Reflect, &dyn Reflect)> {
Expand Down Expand Up @@ -377,8 +374,16 @@ impl Debug for DynamicMap {

/// An iterator over the key-value pairs of a [`Map`].
pub struct MapIter<'a> {
pub(crate) map: &'a dyn Map,
pub(crate) index: usize,
map: &'a dyn Map,
index: usize,
}

impl<'a> MapIter<'a> {
/// Creates a new [`MapIter`].
#[inline]
pub const fn new(map: &'a dyn Map) -> MapIter {
MapIter { map, index: 0 }
}
}

impl<'a> Iterator for MapIter<'a> {
Expand Down

0 comments on commit acf1362

Please sign in to comment.