bitview_query 0.12.1

Query interface for indexed and computed Bitview data
Documentation
use brk_types::Index;

use super::SeriesEntry;

#[derive(Default)]
pub struct IndexToVec<'a> {
    entries: Vec<SeriesEntry<'a>>,
}

impl<'a> IndexToVec<'a> {
    pub fn insert(&mut self, entry: SeriesEntry<'a>) -> Option<SeriesEntry<'a>> {
        match self
            .entries
            .binary_search_by_key(&entry.index(), |entry| entry.index())
        {
            Ok(position) => {
                let previous = self.entries[position];
                self.entries[position] = entry;
                Some(previous)
            }
            Err(position) => {
                self.entries.insert(position, entry);
                None
            }
        }
    }

    pub fn get(&self, index: Index) -> Option<&SeriesEntry<'a>> {
        self.entries
            .binary_search_by_key(&index, |entry| entry.index())
            .ok()
            .map(|position| &self.entries[position])
    }

    pub fn indexes(&self) -> impl Iterator<Item = Index> + '_ {
        self.entries.iter().map(|entry| entry.index())
    }

    pub fn first(&self) -> Option<&SeriesEntry<'a>> {
        self.entries.first()
    }
}