1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use crossbeam_queue::ArrayQueue; pub struct ObjectManage<O>{ pool:ArrayQueue<O>, } impl<O:Default> ObjectManage<O> { pub fn new(cap:usize)->ObjectManage<O>{ ObjectManage{ pool:ArrayQueue::new(cap), } } } impl<O:Default> ObjectManage<O>{ pub fn get(&self)->O{ match self.pool.pop() { Some(s)=>{s} None=>{O::default()} } } pub fn drop(&self,obj: O){ match self.pool.push(obj){ Err(_)=>{} Ok(_)=>{} } } }