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
	 Nathan Ward
						Nathan Ward