use std::collections::BTreeMap; use brk_vec::{IndexedVec, StoredIndex, StoredType}; #[derive(Debug)] pub struct RangeMap(BTreeMap); impl RangeMap where I: StoredIndex, T: StoredIndex, { pub fn get(&self, key: I) -> Option<&T> { self.0.range(..=key).next_back().map(|(&min, value)| { if min > key { unreachable!() } value }) } } impl From<&IndexedVec> for RangeMap where I: StoredIndex, T: StoredIndex + StoredType, { fn from(vec: &IndexedVec) -> Self { Self( vec.into_iter() .map(|(i, v)| (v.into_owned(), i)) .collect::>(), ) } }