This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::{iter, slice, vec}; | |
use std::iter::FromIterator; | |
/// A unique identifier with an associated usize index. Indexes are valued proportional to the | |
/// number of indexes allocated, are reused after being freed, and do not grow without bound. When | |
/// an index is re-used, an associated "generation" is incremented, so that within the life of a | |
/// single allocator, no two GenerationalIndex values will ever be equal. Since the indexes do not | |
/// grow without bound, GenerationalIndex values are particularly suited to being stored by their | |
/// index in extremely fast contiguous arrays. | |
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Debug)] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::{cell::RefCell, marker::PhantomData, mem, rc::Rc}; | |
use thiserror::Error; | |
#[derive(Debug, Copy, Clone, Eq, PartialEq, Error)] | |
pub enum AccessError { | |
#[error("frozen value accessed outside of enclosing scope")] | |
Expired, | |
#[error("already borrowed incompatibly")] | |
BadBorrow, |