use crate::{shared::{PtrMagic, var::{pxs_Var, pxs_VarT}}};
#[allow(non_camel_case_types)]
pub struct pxs_PixelArena {
vars: Vec<pxs_VarT>
}
impl pxs_PixelArena {
pub fn new() -> pxs_PixelArena {
pxs_PixelArena { vars: Vec::new() }
}
pub fn alloc(&mut self, var: pxs_VarT) {
self.vars.push(var);
}
pub fn remove_var(&mut self, idx: u32) {
if idx >= self.vars.len() as u32 {
return;
}
self.vars.remove(idx as usize);
}
pub fn num_of_args(&self) -> usize {
self.vars.len()
}
}
impl PtrMagic for pxs_PixelArena {}
impl Drop for pxs_PixelArena {
fn drop(&mut self) {
#[cfg(feature = "pxs-debug")] {
let count = self.vars.len();
crate::pxs_debug!("Dropping {count} number of vars");
}
for v in self.vars.drain(0..self.vars.len()) {
let _ = pxs_Var::from_raw(v);
}
self.vars.clear();
}
}