OrderedVec copy_prefix

This commit is contained in:
Patrick Insinger
2021-10-05 12:57:58 -07:00
parent 77722b4c9d
commit 2ccc8f3e36
2 changed files with 14 additions and 6 deletions

View File

@@ -775,12 +775,7 @@ impl InMemoryLayer {
let end_lsn = self.end_lsn.unwrap();
let mut before_segsizes = OrderedVec::default();
for (lsn, size) in inner.segsizes.iter() {
if *lsn <= end_lsn {
before_segsizes.append(*lsn, *size);
}
}
let before_segsizes = inner.segsizes.copy_prefix(&Lsn(end_lsn.0 + 1));
let mut before_page_versions = inner.page_versions.ordered_iter(Some(end_lsn));
let mut frozen_layers: Vec<Arc<dyn Layer>> = Vec::new();

View File

@@ -91,6 +91,19 @@ impl<K: Ord + Copy, V> OrderedVec<K, V> {
self.0.is_empty()
}
pub fn copy_prefix(&self, key: &K) -> Self
where
K: Clone,
V: Clone,
{
let idx = match self.0.binary_search_by_key(key, extract_key) {
Ok(idx) => idx,
Err(idx) => idx,
};
OrderedVec(Vec::from(&self.0[..idx]))
}
pub fn copy_split(&self, key: &K) -> (Self, Self)
where
K: Clone,