First Commit
Some checks failed
CI (main) / build (push) Has been cancelled
CI (main) / deploy (push) Has been cancelled

This commit is contained in:
ECROF88
2025-10-20 20:12:40 +08:00
parent f484bc5e6c
commit 8fb4176e71
17 changed files with 1822 additions and 97 deletions

View File

@@ -39,19 +39,25 @@ impl StorageIterator for LsmIterator {
type KeyType<'a> = &'a [u8];
fn is_valid(&self) -> bool {
unimplemented!()
self.inner.is_valid()
}
fn key(&self) -> &[u8] {
unimplemented!()
self.inner.key().into_inner()
}
fn value(&self) -> &[u8] {
unimplemented!()
self.inner.value()
}
fn next(&mut self) -> Result<()> {
unimplemented!()
// TODO: I dont know if I need use ? to return the Error or not
self.inner.next()?;
// 跳过已经删除的key
while self.inner.is_valid() && self.inner.value().is_empty() {
self.inner.next()?;
}
Ok(())
}
}
@@ -79,18 +85,40 @@ impl<I: StorageIterator> StorageIterator for FusedIterator<I> {
Self: 'a;
fn is_valid(&self) -> bool {
unimplemented!()
// self.iter.is_valid() && !self.has_errored
if self.has_errored {
false
} else {
self.iter.is_valid()
}
}
fn key(&self) -> Self::KeyType<'_> {
unimplemented!()
self.iter.key()
}
fn value(&self) -> &[u8] {
unimplemented!()
self.iter.value()
}
fn next(&mut self) -> Result<()> {
unimplemented!()
// 按照测试用例出现错误就要返回err
if self.has_errored {
return Err(anyhow::anyhow!("iterator has errored previously"));
}
// 但是对于迭代器已经失效,不应该报错
if !self.iter.is_valid() {
return Ok(());
}
//
match self.iter.next() {
Ok(()) => Ok(()),
Err(e) => {
self.has_errored = true;
Err(e)
}
}
}
}