Add pop method for List trait. (#5797)
# Objective - The reflection `List` trait does not have a `pop` function. - Popping elements off a list is a common use case and is almost always supported by `List`-like types. ## Solution - Add the `pop()` method to the `List` trait and add the appropriate implementations of this function. ## Migration Guide - Any custom type that implements the `List` trait will now need to implement the `pop` method. Co-authored-by: Carter Anderson <mcanders1@gmail.com>
This commit is contained in:
parent
e9661bea1a
commit
bb2303a654
@ -54,6 +54,10 @@ where
|
|||||||
});
|
});
|
||||||
SmallVec::push(self, value);
|
SmallVec::push(self, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pop(&mut self) -> Option<Box<dyn Reflect>> {
|
||||||
|
self.pop().map(|value| Box::new(value) as Box<dyn Reflect>)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: smallvec::Array + Send + Sync + 'static> Reflect for SmallVec<T>
|
impl<T: smallvec::Array + Send + Sync + 'static> Reflect for SmallVec<T>
|
||||||
|
|||||||
@ -137,6 +137,10 @@ impl<T: FromReflect> List for Vec<T> {
|
|||||||
});
|
});
|
||||||
Vec::push(self, value);
|
Vec::push(self, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pop(&mut self) -> Option<Box<dyn Reflect>> {
|
||||||
|
self.pop().map(|value| Box::new(value) as Box<dyn Reflect>)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: FromReflect> Reflect for Vec<T> {
|
impl<T: FromReflect> Reflect for Vec<T> {
|
||||||
|
|||||||
@ -15,6 +15,9 @@ pub trait List: Reflect + Array {
|
|||||||
/// Appends an element to the list.
|
/// Appends an element to the list.
|
||||||
fn push(&mut self, value: Box<dyn Reflect>);
|
fn push(&mut self, value: Box<dyn Reflect>);
|
||||||
|
|
||||||
|
/// Removes the last element from the list (highest index in the array) and returns it, or [`None`] if it is empty.
|
||||||
|
fn pop(&mut self) -> Option<Box<dyn Reflect>>;
|
||||||
|
|
||||||
/// Clones the list, producing a [`DynamicList`].
|
/// Clones the list, producing a [`DynamicList`].
|
||||||
fn clone_dynamic(&self) -> DynamicList {
|
fn clone_dynamic(&self) -> DynamicList {
|
||||||
DynamicList {
|
DynamicList {
|
||||||
@ -151,6 +154,10 @@ impl List for DynamicList {
|
|||||||
DynamicList::push_box(self, value);
|
DynamicList::push_box(self, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pop(&mut self) -> Option<Box<dyn Reflect>> {
|
||||||
|
self.values.pop()
|
||||||
|
}
|
||||||
|
|
||||||
fn clone_dynamic(&self) -> DynamicList {
|
fn clone_dynamic(&self) -> DynamicList {
|
||||||
DynamicList {
|
DynamicList {
|
||||||
name: self.name.clone(),
|
name: self.name.clone(),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user