use alloc::boxed::Box;
use crate::reader::Reader;
use crate::sym::Sym;
pub(crate) struct FlatReader {
offsets: Box<[u32]>,
buffer: Box<[u8]>,
}
impl FlatReader {
pub(crate) fn new(offsets: Box<[u32]>, buffer: Box<[u8]>) -> Self {
Self { offsets, buffer }
}
}
impl crate::reader::Sealed for FlatReader {}
impl Reader for FlatReader {
#[inline]
fn try_resolve(&self, sym: Sym) -> Option<&str> {
crate::storage::resolve(&self.offsets, &self.buffer, sym.dense())
}
#[inline]
fn len(&self) -> usize {
self.offsets.len() - 1
}
fn iter(&self) -> Box<dyn Iterator<Item = (Sym, &str)> + '_> {
let offsets = &self.offsets;
let buffer = &self.buffer;
Box::new((0..offsets.len() - 1).map(move |i| (Sym::pack_dense(i), crate::storage::str_at(offsets, buffer, i))))
}
}