use std::collections::BTreeSet; use std::io; use byteorder::{NativeEndian, WriteBytesExt}; use crate::DocumentId; pub struct UnorderedNegativeBlobBuilder { doc_ids: BTreeSet, // TODO: prefer a linked-list wrt: W, } impl UnorderedNegativeBlobBuilder> { pub fn memory() -> Self { UnorderedNegativeBlobBuilder::new(Vec::new()) } } impl UnorderedNegativeBlobBuilder { pub fn new(wrt: W) -> Self { Self { doc_ids: BTreeSet::new(), wrt: wrt, } } pub fn insert(&mut self, doc: DocumentId) -> bool { self.doc_ids.insert(doc) } pub fn into_inner(mut self) -> io::Result { for id in self.doc_ids { self.wrt.write_u64::(id.0)?; } Ok(self.wrt) } }