bevy_reflect/impls/alloc/
vec.rs1use bevy_reflect_derive::impl_type_path;
2
3use crate::impls::macros::impl_reflect_for_veclike;
4#[cfg(feature = "functions")]
5use crate::{
6 from_reflect::FromReflect, type_info::MaybeTyped, type_path::TypePath,
7 type_registry::GetTypeRegistration,
8};
9
10const _: () =
{
impl<T: crate::from_reflect::FromReflect +
crate::type_info::MaybeTyped + crate::type_path::TypePath +
crate::type_registry::GetTypeRegistration> crate::list::List for
::alloc::vec::Vec<T> {
#[inline]
fn get(&self, index: usize)
-> Option<&dyn crate::reflect::PartialReflect> {
<[T]>::get(self,
index).map(|value|
value as &dyn crate::reflect::PartialReflect)
}
#[inline]
fn get_mut(&mut self, index: usize)
-> Option<&mut dyn crate::reflect::PartialReflect> {
<[T]>::get_mut(self,
index).map(|value|
value as &mut dyn crate::reflect::PartialReflect)
}
fn insert(&mut self, index: usize,
value:
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>) {
let value =
value.try_take::<T>().unwrap_or_else(|value|
{
T::from_reflect(&*value).unwrap_or_else(||
{
{
::core::panicking::panic_fmt(format_args!("Attempted to insert invalid value of type {0}.",
value.reflect_type_path()));
}
})
});
::alloc::vec::Vec::insert(self, index, value);
}
fn remove(&mut self, index: usize)
->
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect> {
bevy_platform::prelude::Box::new(::alloc::vec::Vec::remove(self,
index))
}
fn push(&mut self,
value:
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>) {
let value =
T::take_from_reflect(value).unwrap_or_else(|value|
{
{
::core::panicking::panic_fmt(format_args!("Attempted to push invalid value of type {0}.",
value.reflect_type_path()));
}
});
::alloc::vec::Vec::push(self, value);
}
fn pop(&mut self)
->
Option<bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>> {
::alloc::vec::Vec::pop(self).map(|value|
bevy_platform::prelude::Box::new(value) as
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>)
}
#[inline]
fn len(&self) -> usize { <[T]>::len(self) }
#[inline]
fn iter(&self) -> crate::list::ListIter<'_> {
crate::list::ListIter::new(self)
}
#[inline]
fn drain(&mut self)
->
alloc::vec::Vec<bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>> {
self.drain(..).map(|value|
bevy_platform::prelude::Box::new(value) as
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>).collect()
}
}
impl<T: crate::from_reflect::FromReflect +
crate::type_info::MaybeTyped + crate::type_path::TypePath +
crate::type_registry::GetTypeRegistration>
crate::reflect::PartialReflect for ::alloc::vec::Vec<T> {
#[inline]
fn get_represented_type_info(&self)
-> Option<&'static crate::type_info::TypeInfo> {
Some(<Self as crate::type_info::Typed>::type_info())
}
fn into_partial_reflect(self: bevy_platform::prelude::Box<Self>)
->
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect> {
self
}
#[inline]
fn as_partial_reflect(&self)
-> &dyn crate::reflect::PartialReflect {
self
}
#[inline]
fn as_partial_reflect_mut(&mut self)
-> &mut dyn crate::reflect::PartialReflect {
self
}
fn try_into_reflect(self: bevy_platform::prelude::Box<Self>)
->
Result<bevy_platform::prelude::Box<dyn crate::reflect::Reflect>,
bevy_platform::prelude::Box<dyn crate::reflect::PartialReflect>> {
Ok(self)
}
fn try_as_reflect(&self) -> Option<&dyn crate::reflect::Reflect> {
Some(self)
}
fn try_as_reflect_mut(&mut self)
-> Option<&mut dyn crate::reflect::Reflect> {
Some(self)
}
fn reflect_kind(&self) -> crate::kind::ReflectKind {
crate::kind::ReflectKind::List
}
fn reflect_ref(&self) -> crate::kind::ReflectRef<'_> {
crate::kind::ReflectRef::List(self)
}
fn reflect_mut(&mut self) -> crate::kind::ReflectMut<'_> {
crate::kind::ReflectMut::List(self)
}
fn reflect_owned(self: bevy_platform::prelude::Box<Self>)
-> crate::kind::ReflectOwned {
crate::kind::ReflectOwned::List(self)
}
fn reflect_clone(&self)
->
Result<bevy_platform::prelude::Box<dyn crate::reflect::Reflect>,
crate::error::ReflectCloneError> {
Ok(bevy_platform::prelude::Box::new(self.iter().map(|value|
value.reflect_clone_and_take()).collect::<Result<Self,
crate::error::ReflectCloneError>>()?))
}
fn reflect_hash(&self) -> Option<u64> {
crate::list::list_hash(self)
}
fn reflect_partial_eq(&self,
value: &dyn crate::reflect::PartialReflect) -> Option<bool> {
crate::list::list_partial_eq(self, value)
}
fn reflect_partial_cmp(&self,
value: &dyn crate::reflect::PartialReflect)
-> Option<::core::cmp::Ordering> {
crate::list::list_partial_cmp(self, value)
}
fn apply(&mut self, value: &dyn crate::reflect::PartialReflect) {
crate::list::list_apply(self, value);
}
fn try_apply(&mut self,
value: &dyn crate::reflect::PartialReflect)
-> Result<(), crate::reflect::ApplyError> {
crate::list::list_try_apply(self, value)
}
}
impl<T> crate::Reflect for ::alloc::vec::Vec<T> where
T: crate::from_reflect::FromReflect +
crate::type_info::MaybeTyped + crate::type_path::TypePath +
crate::type_registry::GetTypeRegistration {
fn into_any(self: bevy_platform::prelude::Box<Self>)
-> bevy_platform::prelude::Box<dyn ::core::any::Any> {
self
}
fn as_any(&self) -> &dyn ::core::any::Any { self }
fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
fn into_reflect(self: bevy_platform::prelude::Box<Self>)
-> bevy_platform::prelude::Box<dyn crate::Reflect> {
self
}
fn as_reflect(&self) -> &dyn crate::Reflect { self }
fn as_reflect_mut(&mut self) -> &mut dyn crate::Reflect { self }
fn set(&mut self,
value: bevy_platform::prelude::Box<dyn crate::Reflect>)
->
Result<(),
bevy_platform::prelude::Box<dyn crate::Reflect>> {
*self = <dyn crate::Reflect>::take(value)?;
Ok(())
}
}
impl<T: crate::from_reflect::FromReflect +
crate::type_info::MaybeTyped + crate::type_path::TypePath +
crate::type_registry::GetTypeRegistration> crate::type_info::Typed
for ::alloc::vec::Vec<T> {
fn type_info() -> &'static crate::type_info::TypeInfo {
static CELL: crate::utility::GenericTypeInfoCell =
crate::utility::GenericTypeInfoCell::new();
CELL.get_or_insert::<Self,
_>(||
{
crate::type_info::TypeInfo::List(crate::list::ListInfo::new::<Self,
T>().with_generics(crate::generics::Generics::from_iter([crate::generics::TypeParamInfo::new::<T>("T")])))
})
}
}
impl<T: crate::from_reflect::FromReflect +
crate::type_info::MaybeTyped + crate::type_path::TypePath +
crate::type_registry::GetTypeRegistration>
crate::type_registry::GetTypeRegistration for ::alloc::vec::Vec<T>
{
fn get_type_registration()
-> crate::type_registry::TypeRegistration {
let mut registration =
crate::type_registry::TypeRegistration::of::<::alloc::vec::Vec<T>>();
registration.insert::<crate::type_registry::ReflectFromPtr>(crate::type_registry::FromType::<::alloc::vec::Vec<T>>::from_type());
registration.insert::<crate::from_reflect::ReflectFromReflect>(crate::type_registry::FromType::<::alloc::vec::Vec<T>>::from_type());
registration
}
fn register_type_dependencies(registry:
&mut crate::type_registry::TypeRegistry) {
registry.register::<T>();
}
}
impl<T: crate::from_reflect::FromReflect +
crate::type_info::MaybeTyped + crate::type_path::TypePath +
crate::type_registry::GetTypeRegistration>
crate::from_reflect::FromReflect for ::alloc::vec::Vec<T> {
fn from_reflect(reflect: &dyn crate::reflect::PartialReflect)
-> Option<Self> {
let ref_list = reflect.reflect_ref().as_list().ok()?;
let mut new_list = Self::with_capacity(ref_list.len());
for field in ref_list.iter() {
::alloc::vec::Vec::push(&mut new_list,
T::from_reflect(field)?);
}
Some(new_list)
}
}
};impl_reflect_for_veclike!(
11 ::alloc::vec::Vec<T>,
12 ::alloc::vec::Vec::insert,
13 ::alloc::vec::Vec::remove,
14 ::alloc::vec::Vec::push,
15 ::alloc::vec::Vec::pop,
16 [T]
17);
18const _: () =
{
#[allow(deprecated, reason =
"derives on a deprecated type shouldn't be considered a usage")]
impl<T> bevy_reflect::TypePath for ::alloc::vec::Vec<T> where
::alloc::vec::Vec<T>: ::core::any::Any + ::core::marker::Send +
::core::marker::Sync, T: bevy_reflect::TypePath {
fn type_path() -> &'static str {
static CELL: bevy_reflect::utility::GenericTypePathCell =
bevy_reflect::utility::GenericTypePathCell::new();
CELL.get_or_insert::<Self,
_>(||
{
::core::ops::Add::<&str>::add(::core::ops::Add::<&str>::add(bevy_reflect::__macro_exports::alloc_utils::ToString::to_string("alloc::vec::Vec<"),
<T as bevy_reflect::TypePath>::type_path()), ">")
})
}
fn short_type_path() -> &'static str {
static CELL: bevy_reflect::utility::GenericTypePathCell =
bevy_reflect::utility::GenericTypePathCell::new();
CELL.get_or_insert::<Self,
_>(||
{
::core::ops::Add::<&str>::add(::core::ops::Add::<&str>::add(bevy_reflect::__macro_exports::alloc_utils::ToString::to_string("Vec<"),
<T as bevy_reflect::TypePath>::short_type_path()), ">")
})
}
fn type_ident() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("Vec")
}
fn crate_name() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("alloc")
}
fn module_path() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("alloc::vec")
}
}
};impl_type_path!(::alloc::vec::Vec<T>);
19#[cfg(feature = "functions")]
20impl<T: FromReflect + MaybeTyped + TypePath + GetTypeRegistration>
crate::func::args::GetOwnership for ::alloc::vec::Vec<T> {}
impl<T: FromReflect + MaybeTyped + TypePath + GetTypeRegistration>
crate::func::args::FromArg for ::alloc::vec::Vec<T> {
type This<'from_arg> = ::alloc::vec::Vec<T>;
fn from_arg(arg: crate::func::args::Arg<'_>)
-> Result<Self::This<'_>, crate::func::args::ArgError> {
arg.take_owned()
}
}
impl<T: FromReflect + MaybeTyped + TypePath + GetTypeRegistration>
crate::func::IntoReturn for ::alloc::vec::Vec<T> {
fn into_return<'into_return>(self) -> crate::func::Return<'into_return>
where Self: 'into_return {
crate::func::Return::Owned(bevy_platform::prelude::Box::new(self))
}
}crate::func::macros::impl_function_traits!(::alloc::vec::Vec<T>; <T: FromReflect + MaybeTyped + TypePath + GetTypeRegistration>);
21
22#[cfg(test)]
23mod tests {
24 use alloc::vec;
25 use bevy_reflect::PartialReflect;
26
27 #[test]
28 fn should_partial_eq_vec() {
29 let a: &dyn PartialReflect = &vec![1, 2, 3];
30 let b: &dyn PartialReflect = &vec![1, 2, 3];
31 let c: &dyn PartialReflect = &vec![3, 2, 1];
32 assert!(a.reflect_partial_eq(b).unwrap_or_default());
33 assert!(!a.reflect_partial_eq(c).unwrap_or_default());
34 }
35}