use crate::arrays::VarBinViewArray;
use crate::arrays::varbinview::BinaryView;
pub struct ResolvedViews<'a> {
views: &'a [BinaryView],
buffers: Vec<&'a [u8]>,
}
impl<'a> ResolvedViews<'a> {
pub(super) fn new(array: &'a VarBinViewArray) -> Self {
Self {
views: array.views(),
buffers: (0..array.data_buffers().len())
.map(|idx| array.buffer(idx).as_slice())
.collect(),
}
}
#[inline]
pub fn views(&self) -> &'a [BinaryView] {
self.views
}
#[inline]
pub fn buffers(&self) -> &[&'a [u8]] {
&self.buffers
}
#[inline]
pub fn len(&self) -> usize {
self.views.len()
}
#[inline]
pub fn is_empty(&self) -> bool {
self.views.is_empty()
}
#[inline]
pub unsafe fn view_unchecked(&self, index: usize) -> &'a BinaryView {
unsafe { self.views.get_unchecked(index) }
}
#[inline]
pub fn bytes(&self, index: usize) -> &'a [u8] {
self.view_bytes(&self.views[index])
}
#[inline]
pub fn view_bytes(&self, view: &'a BinaryView) -> &'a [u8] {
view.bytes(&self.buffers)
}
}
#[cfg(test)]
mod tests;