#[cfg(not(feature = "std"))] use alloc::{vec, vec::Vec}; use std::collections::HashMap; use crate::geometry::Size; use crate::number::Number; use crate::result::{Cache, Layout, Result}; use crate::style::*; type MeasureFunc = Box) -> Result>>; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] pub struct Node(usize); pub(crate) type Storage = HashMap; struct Allocator { new_id: usize, free_ids: Vec, } impl Allocator { pub fn new() -> Self { Allocator { new_id: 0, free_ids: Vec::new() } } pub fn allocate(&mut self) -> Node { match self.free_ids.pop() { Some(id) => Node(id), None => { let id = self.new_id; self.new_id += 1; Node(id) } } } } pub struct Stretch { nodes: Allocator, pub(crate) style: Storage