mxmlextrema_as3parser/util/
arena.rs

1use std::{cell::RefCell, rc::{Rc, Weak}};
2
3pub struct Arena<T> {
4    data: RefCell<Vec<Rc<T>>>,
5}
6
7impl<T> Arena<T> {
8    pub fn new() -> Self {
9        Self {
10            data: RefCell::new(vec![]),
11        }
12    }
13
14    pub fn allocate(&self, value: T) -> Weak<T> {
15        let obj = Rc::new(value);
16        self.data.borrow_mut().push(obj.clone());
17        Rc::downgrade(&obj)
18    }
19}