mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-05-11 14:41:16 -07:00
vec: make collect_range use into_iter
This commit is contained in:
@@ -75,3 +75,4 @@ Stores: `src/storage/stores/mod.rs`
|
|||||||
- mode: `raw`
|
- mode: `raw`
|
||||||
- disk usage: `208 GB`
|
- disk usage: `208 GB`
|
||||||
- overhead: `28%` (`208 GB / 744 GB`)
|
- overhead: `28%` (`208 GB / 744 GB`)
|
||||||
|
- peak memory: `5.7GB`
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ use axum::{
|
|||||||
response::{IntoResponse, Response},
|
response::{IntoResponse, Response},
|
||||||
};
|
};
|
||||||
use memmap2::Mmap;
|
use memmap2::Mmap;
|
||||||
use serde_json::Value;
|
|
||||||
|
|
||||||
use crate::{Error, Result, Version};
|
use crate::{Error, Result, Version};
|
||||||
|
|
||||||
@@ -161,7 +160,11 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn collect_range_serde_json(&self, from: Option<i64>, to: Option<i64>) -> Result<Vec<Value>> {
|
fn collect_range_serde_json(
|
||||||
|
&self,
|
||||||
|
from: Option<i64>,
|
||||||
|
to: Option<i64>,
|
||||||
|
) -> Result<Vec<serde_json::Value>> {
|
||||||
self.collect_signed_range(from, to)?
|
self.collect_signed_range(from, to)?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|v| serde_json::to_value(v).map_err(Error::from))
|
.map(|v| serde_json::to_value(v).map_err(Error::from))
|
||||||
|
|||||||
@@ -324,30 +324,21 @@ where
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_range(&self, from: Option<usize>, to: Option<usize>) -> Result<Vec<Self::T>> {
|
fn collect_range(&self, from: Option<usize>, to: Option<usize>) -> Result<Vec<T>> {
|
||||||
if !self.is_pushed_empty() {
|
|
||||||
return Err(Error::UnsupportedUnflushedState);
|
|
||||||
}
|
|
||||||
|
|
||||||
let stored_len = self.stored_len();
|
let stored_len = self.stored_len();
|
||||||
|
|
||||||
let from = from.unwrap_or_default();
|
let from = from.unwrap_or_default();
|
||||||
let to = to.map_or(stored_len, |i| i.min(stored_len));
|
let to = to.map_or(stored_len, |i| i.min(stored_len));
|
||||||
|
|
||||||
if from >= stored_len {
|
if from >= stored_len || from >= to {
|
||||||
return Ok(vec![]);
|
return Ok(vec![]);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mmap = self.mmap().load();
|
Ok(self
|
||||||
let pages_meta = self.pages_meta.load();
|
.into_iter()
|
||||||
let mut decoded_page: Option<(usize, Vec<T>)> = None;
|
.skip(from)
|
||||||
|
.take(to - from)
|
||||||
(from..to)
|
.map(|(_, v)| v.into_inner())
|
||||||
.map(|index| {
|
.collect::<Vec<_>>())
|
||||||
Self::cached_get_stored__(index, &mmap, stored_len, &mut decoded_page, &pages_meta)
|
|
||||||
.map(|opt| opt.unwrap())
|
|
||||||
})
|
|
||||||
.collect::<Result<Vec<_>>>()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flush(&mut self) -> Result<()> {
|
fn flush(&mut self) -> Result<()> {
|
||||||
|
|||||||
@@ -152,24 +152,20 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn collect_range(&self, from: Option<usize>, to: Option<usize>) -> Result<Vec<T>> {
|
fn collect_range(&self, from: Option<usize>, to: Option<usize>) -> Result<Vec<T>> {
|
||||||
if !self.is_pushed_empty() {
|
|
||||||
return Err(Error::UnsupportedUnflushedState);
|
|
||||||
}
|
|
||||||
|
|
||||||
let stored_len = self.stored_len();
|
let stored_len = self.stored_len();
|
||||||
|
|
||||||
let from = from.unwrap_or_default();
|
let from = from.unwrap_or_default();
|
||||||
let to = to.map_or(stored_len, |i| i.min(stored_len));
|
let to = to.map_or(stored_len, |i| i.min(stored_len));
|
||||||
|
|
||||||
if from >= stored_len {
|
if from >= stored_len || from >= to {
|
||||||
return Ok(vec![]);
|
return Ok(vec![]);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mmap = self.mmap.load();
|
Ok(self
|
||||||
|
.into_iter()
|
||||||
(from..to)
|
.skip(from)
|
||||||
.map(|index| self.get_stored_(index, &mmap).map(|opt| opt.unwrap()))
|
.take(to - from)
|
||||||
.collect::<Result<Vec<_>>>()
|
.map(|(_, v)| v.into_inner())
|
||||||
|
.collect::<Vec<_>>())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flush(&mut self) -> Result<()> {
|
fn flush(&mut self) -> Result<()> {
|
||||||
|
|||||||
Reference in New Issue
Block a user