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(_)=>{}
        }
    }
}