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}