use super::index_lightweight::DsvIndexLightweight;
use crate::bits::BitVec;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct DsvIndex {
inner: DsvIndexLightweight,
}
impl DsvIndex {
pub fn new_lightweight(inner: DsvIndexLightweight) -> Self {
Self { inner }
}
pub fn new(markers: BitVec, newlines: BitVec, text_len: usize) -> Self {
let markers_words = markers.words().to_vec();
let newlines_words = newlines.words().to_vec();
let inner = DsvIndexLightweight::new(markers_words, newlines_words, text_len);
Self { inner }
}
#[inline]
pub fn as_lightweight(&self) -> &DsvIndexLightweight {
&self.inner
}
#[inline]
pub fn marker_count(&self) -> usize {
self.inner.marker_count()
}
#[inline]
pub fn row_count(&self) -> usize {
self.inner.row_count()
}
#[inline]
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
#[inline]
pub fn markers_rank1(&self, i: usize) -> usize {
self.inner.markers_rank1(i)
}
#[inline]
pub fn markers_select1(&self, k: usize) -> Option<usize> {
self.inner.markers_select1(k)
}
#[inline]
pub fn newlines_rank1(&self, i: usize) -> usize {
self.inner.newlines_rank1(i)
}
#[inline]
pub fn newlines_select1(&self, k: usize) -> Option<usize> {
self.inner.newlines_select1(k)
}
}