mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-27 18:58:10 -07:00
computer: lazy part 2
This commit is contained in:
+21
-25
@@ -218,31 +218,6 @@ where
|
||||
Compressed(CompressedVecIterator<'a, I, T>),
|
||||
}
|
||||
|
||||
// impl<I, T> StoredVecIterator<'_, I, T>
|
||||
// impl<'a, I, T> VecIterator<'a> for StoredVecIterator<'a, I, T>
|
||||
// where
|
||||
// I: StoredIndex,
|
||||
// T: StoredType,
|
||||
// {
|
||||
// type I = I;
|
||||
// type T = T;
|
||||
|
||||
// #[inline]
|
||||
// fn mut_index(&mut self) -> &mut usize {
|
||||
// match self {
|
||||
// Self::Compressed(iter) => iter.mut_index(),
|
||||
// Self::Raw(iter) => iter.mut_index(),
|
||||
// }
|
||||
// }
|
||||
|
||||
// fn len(&self) -> usize {
|
||||
// match self {
|
||||
// Self::Compressed(i) => i.len(),
|
||||
// Self::Raw(i) => i.len(),
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
impl<'a, I, T> Iterator for StoredVecIterator<'a, I, T>
|
||||
where
|
||||
I: StoredIndex,
|
||||
@@ -257,6 +232,27 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
impl<I, T> BaseVecIterator for StoredVecIterator<'_, I, T>
|
||||
where
|
||||
I: StoredIndex,
|
||||
T: StoredType,
|
||||
{
|
||||
#[inline]
|
||||
fn mut_index(&mut self) -> &mut usize {
|
||||
match self {
|
||||
Self::Compressed(iter) => iter.mut_index(),
|
||||
Self::Raw(iter) => iter.mut_index(),
|
||||
}
|
||||
}
|
||||
|
||||
fn len(&self) -> usize {
|
||||
match self {
|
||||
Self::Compressed(i) => i.len(),
|
||||
Self::Raw(i) => i.len(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I, T> IntoIterator for &'a StoredVec<I, T>
|
||||
where
|
||||
I: StoredIndex,
|
||||
|
||||
@@ -1,83 +1,49 @@
|
||||
use std::iter::Skip;
|
||||
|
||||
use crate::Value;
|
||||
|
||||
use super::{StoredIndex, StoredType};
|
||||
|
||||
// pub trait BaseVecIterator: Iterator {
|
||||
// fn mut_index(&mut self) -> &mut usize;
|
||||
|
||||
// fn len(&self) -> usize;
|
||||
|
||||
// fn is_empty(&self) -> bool {
|
||||
// self.len() == 0
|
||||
// }
|
||||
|
||||
// #[inline]
|
||||
// fn set_(&mut self, i: usize) -> &mut Self {
|
||||
// *self.mut_index() = i;
|
||||
// self
|
||||
// }
|
||||
|
||||
// fn skip(self, _: usize) -> std::iter::Skip<Self>
|
||||
// where
|
||||
// Self: Sized,
|
||||
// {
|
||||
// todo!("")
|
||||
// }
|
||||
// }
|
||||
|
||||
pub trait VecIterator<'a>: Iterator<Item = (Self::I, Value<'a, Self::T>)> + 'a {
|
||||
type I: StoredIndex;
|
||||
type T: StoredType;
|
||||
|
||||
pub trait BaseVecIterator: Iterator {
|
||||
fn mut_index(&mut self) -> &mut usize;
|
||||
|
||||
#[inline]
|
||||
fn set_(&mut self, i: usize) {
|
||||
*self.mut_index() = i;
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn next_at(&mut self, i: usize) -> Option<Self::Item> {
|
||||
self.set_(i);
|
||||
self.next()
|
||||
}
|
||||
|
||||
fn len(&self) -> usize;
|
||||
|
||||
fn is_empty(&self) -> bool {
|
||||
self.len() == 0
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn set_(&mut self, i: usize) -> &mut Self {
|
||||
*self.mut_index() = i;
|
||||
self
|
||||
}
|
||||
|
||||
fn skip(self, _: usize) -> std::iter::Skip<Self>
|
||||
fn skip(self, _: usize) -> Skip<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
todo!("")
|
||||
}
|
||||
}
|
||||
|
||||
// fn set(&mut self, i: Self::I) -> &mut Self;
|
||||
pub trait VecIterator<'a>: BaseVecIterator<Item = (Self::I, Value<'a, Self::T>)> + 'a {
|
||||
type I: StoredIndex;
|
||||
type T: StoredType;
|
||||
|
||||
// fn get_(&mut self, i: usize) -> Option<Value<'a, Self::T>>;
|
||||
|
||||
// fn get(&mut self, i: Self::I) -> Option<Value<'a, Self::T>>;
|
||||
|
||||
// fn unwrap_get_inner(&mut self, i: Self::I) -> Self::T;
|
||||
|
||||
// fn get_inner(&mut self, i: Self::I) -> Option<Self::T>;
|
||||
|
||||
// fn last(self) -> Option<Self::Item>;
|
||||
// }
|
||||
|
||||
// impl<'a, I, T, Iter> VecIterator<'a, I, T> for Iter
|
||||
// where
|
||||
// I: StoredIndex,
|
||||
// T: StoredType + 'a,
|
||||
// Iter: Iterator<Item = (I, Value<'a, T>)> + BaseVecIterator,
|
||||
// {
|
||||
#[inline]
|
||||
fn set(&mut self, i: Self::I) -> &mut Self {
|
||||
fn set(&mut self, i: Self::I) {
|
||||
self.set_(i.unwrap_to_usize())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn get_(&mut self, i: usize) -> Option<Value<'a, Self::T>> {
|
||||
self.set_(i);
|
||||
self.next().map(|(_, v)| v)
|
||||
self.next_at(i).map(|(_, v)| v)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@@ -111,19 +77,10 @@ pub trait VecIterator<'a>: Iterator<Item = (Self::I, Value<'a, Self::T>)> + 'a {
|
||||
|
||||
impl<'a, I, T, Iter> VecIterator<'a> for Iter
|
||||
where
|
||||
Iter: Iterator<Item = (I, Value<'a, T>)> + 'a,
|
||||
Iter: BaseVecIterator<Item = (I, Value<'a, T>)> + 'a,
|
||||
I: StoredIndex,
|
||||
T: StoredType + 'a,
|
||||
{
|
||||
type I = I;
|
||||
type T = T;
|
||||
|
||||
fn len(&self) -> usize {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn mut_index(&mut self) -> &mut usize {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
// pub trait VecIterator<'a>: Iterator<Item = (Self::I, Value<'a, Self::T>)> + 'a {
|
||||
|
||||
@@ -11,8 +11,8 @@ use rayon::prelude::*;
|
||||
use zstd::DEFAULT_COMPRESSION_LEVEL;
|
||||
|
||||
use crate::{
|
||||
CompressedPageMetadata, CompressedPagesMetadata, DynamicVec, Error, GenericVec, RawVec, Result,
|
||||
StoredIndex, StoredType, UnsafeSlice, Value, VecIterator, Version,
|
||||
BaseVecIterator, CompressedPageMetadata, CompressedPagesMetadata, DynamicVec, Error,
|
||||
GenericVec, RawVec, Result, StoredIndex, StoredType, UnsafeSlice, Value, Version,
|
||||
};
|
||||
|
||||
const ONE_KIB: usize = 1024;
|
||||
@@ -392,24 +392,21 @@ where
|
||||
const PER_PAGE: usize = MAX_PAGE_SIZE / Self::SIZE_OF_T;
|
||||
}
|
||||
|
||||
// impl<'a, I, T> VecIterator<'a> for CompressedVecIterator<'a, I, T>
|
||||
// where
|
||||
// I: StoredIndex,
|
||||
// T: StoredType,
|
||||
// {
|
||||
// type I = I;
|
||||
// type T = T;
|
||||
impl<I, T> BaseVecIterator for CompressedVecIterator<'_, I, T>
|
||||
where
|
||||
I: StoredIndex,
|
||||
T: StoredType,
|
||||
{
|
||||
#[inline]
|
||||
fn mut_index(&mut self) -> &mut usize {
|
||||
&mut self.index
|
||||
}
|
||||
|
||||
// #[inline]
|
||||
// fn mut_index(&mut self) -> &mut usize {
|
||||
// &mut self.index
|
||||
// }
|
||||
|
||||
// #[inline]
|
||||
// fn len(&self) -> usize {
|
||||
// self.vec.len()
|
||||
// }
|
||||
// }
|
||||
#[inline]
|
||||
fn len(&self) -> usize {
|
||||
self.vec.len()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I, T> Iterator for CompressedVecIterator<'a, I, T>
|
||||
where
|
||||
|
||||
@@ -11,8 +11,8 @@ use memmap2::Mmap;
|
||||
use rayon::prelude::*;
|
||||
|
||||
use crate::{
|
||||
DynamicVec, Error, GenericVec, Result, StoredIndex, StoredType, UnsafeSlice, Value,
|
||||
VecIterator, Version,
|
||||
BaseVecIterator, DynamicVec, Error, GenericVec, Result, StoredIndex, StoredType, UnsafeSlice,
|
||||
Value, Version,
|
||||
};
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -217,24 +217,21 @@ pub struct RawVecIterator<'a, I, T> {
|
||||
index: usize,
|
||||
}
|
||||
|
||||
// impl<'a, I, T> VecIterator<'a> for RawVecIterator<'a, I, T>
|
||||
// where
|
||||
// I: StoredIndex,
|
||||
// T: StoredType,
|
||||
// {
|
||||
// type I = I;
|
||||
// type T = T;
|
||||
impl<I, T> BaseVecIterator for RawVecIterator<'_, I, T>
|
||||
where
|
||||
I: StoredIndex,
|
||||
T: StoredType,
|
||||
{
|
||||
#[inline]
|
||||
fn mut_index(&mut self) -> &mut usize {
|
||||
&mut self.index
|
||||
}
|
||||
|
||||
// #[inline]
|
||||
// fn mut_index(&mut self) -> &mut usize {
|
||||
// &mut self.index
|
||||
// }
|
||||
|
||||
// #[inline]
|
||||
// fn len(&self) -> usize {
|
||||
// self.vec.len()
|
||||
// }
|
||||
// }
|
||||
#[inline]
|
||||
fn len(&self) -> usize {
|
||||
self.vec.len()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I, T> Iterator for RawVecIterator<'a, I, T>
|
||||
where
|
||||
|
||||
Reference in New Issue
Block a user