Skip to content

Commit

Permalink
Try #4484:
Browse files Browse the repository at this point in the history
  • Loading branch information
bors[bot] authored Apr 23, 2022
2 parents 46acb77 + 7a2a6c4 commit 5e79dd9
Showing 1 changed file with 32 additions and 3 deletions.
35 changes: 32 additions & 3 deletions crates/bevy_reflect/src/type_registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl TypeRegistry {
.and_then(move |id| self.get_mut(id))
}

/// Returns a mutable reference to the [`TypeRegistration`] of the type with
/// Returns a reference to the [`TypeRegistration`] of the type with
/// the given short name.
///
/// If the short name is ambiguous, or if no type with the given short name
Expand All @@ -115,7 +115,21 @@ impl TypeRegistry {
.and_then(|id| self.registrations.get(id))
}

/// Returns the [`TypeData`] of type `T` associated with the given `TypeId`.
/// Returns a mutable reference to the [`TypeRegistration`] of the type with
/// the given short name.
///
/// If the short name is ambiguous, or if no type with the given short name
/// has been registered, returns `None`.
pub fn get_with_short_name_mut(
&mut self,
short_type_name: &str,
) -> Option<&mut TypeRegistration> {
self.short_name_to_id
.get(short_type_name)
.and_then(|id| self.registrations.get_mut(id))
}

/// Returns a reference to the [`TypeData`] of type `T` associated with the given `TypeId`.
///
/// The returned value may be used to downcast [`Reflect`] trait objects to
/// trait objects of the trait used to generate `T`, provided that the
Expand All @@ -129,11 +143,26 @@ impl TypeRegistry {
.and_then(|registration| registration.data::<T>())
}

/// Returns an iterator overed the [`TypeRegistration`]s of the registered
/// Returns a mutable reference to the [`TypeData`] of type `T` associated with the given `TypeId`.
///
/// If the specified type has not been registered, or if `T` is not present
/// in its type registration, returns `None`.
pub fn get_type_data_mut<T: TypeData>(&mut self, type_id: TypeId) -> Option<&mut T> {
self.get_mut(type_id)
.and_then(|registration| registration.data_mut::<T>())
}

/// Returns an iterator over the [`TypeRegistration`]s of the registered
/// types.
pub fn iter(&self) -> impl Iterator<Item = &TypeRegistration> {
self.registrations.values()
}

/// Returns a mutable iterator over the [`TypeRegistration`]s of the registered
/// types.
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut TypeRegistration> {
self.registrations.values_mut()
}
}

impl TypeRegistryArc {
Expand Down

0 comments on commit 5e79dd9

Please sign in to comment.