Further storage iterator refactoring (#13445)

* Remove `Backend::apply_to_key_values_while`

* Add `IterArgs::start_at_exclusive`

* Use `start_at_exclusive` in functions which used `Backend::apply_to_key_values_while`

* Remove `Backend::apply_to_keys_while`

* Remove `for_keys_with_prefix`, `for_key_values_with_prefix` and `for_child_keys_with_prefix`

* Remove unnecessary `to_vec` calls

* Fix unused method warning in no_std

* Remove unnecessary import

* Also check proof sizes in the test

* Iterate over both keys and values in `prove_range_read_with_size` and add a test
This commit is contained in:
Koute
2023-02-27 19:45:42 +09:00
committed by GitHub
parent bb00b262d7
commit 91c595bc78
6 changed files with 226 additions and 370 deletions
+9 -40
View File
@@ -324,7 +324,6 @@ where
{
inner: <State as StateBackend<HashFor<Block>>>::RawIter,
state: State,
skip_if_first: Option<StorageKey>,
}
impl<State, Block> KeysIter<State, Block>
@@ -341,13 +340,9 @@ where
let mut args = IterArgs::default();
args.prefix = prefix.as_ref().map(|prefix| prefix.0.as_slice());
args.start_at = start_at.as_ref().map(|start_at| start_at.0.as_slice());
args.start_at_exclusive = true;
let start_at = args.start_at;
Ok(Self {
inner: state.raw_iter(args)?,
state,
skip_if_first: start_at.map(|key| StorageKey(key.to_vec())),
})
Ok(Self { inner: state.raw_iter(args)?, state })
}
/// Create a new iterator over a child storage's keys.
@@ -361,13 +356,9 @@ where
args.prefix = prefix.as_ref().map(|prefix| prefix.0.as_slice());
args.start_at = start_at.as_ref().map(|start_at| start_at.0.as_slice());
args.child_info = Some(child_info);
args.start_at_exclusive = true;
let start_at = args.start_at;
Ok(Self {
inner: state.raw_iter(args)?,
state,
skip_if_first: start_at.map(|key| StorageKey(key.to_vec())),
})
Ok(Self { inner: state.raw_iter(args)?, state })
}
}
@@ -379,15 +370,7 @@ where
type Item = StorageKey;
fn next(&mut self) -> Option<Self::Item> {
let key = self.inner.next_key(&self.state)?.ok().map(StorageKey)?;
if let Some(skipped_key) = self.skip_if_first.take() {
if key == skipped_key {
return self.next()
}
}
Some(key)
self.inner.next_key(&self.state)?.ok().map(StorageKey)
}
}
@@ -399,7 +382,6 @@ where
{
inner: <State as StateBackend<HashFor<Block>>>::RawIter,
state: State,
skip_if_first: Option<StorageKey>,
}
impl<State, Block> Iterator for PairsIter<State, Block>
@@ -410,19 +392,10 @@ where
type Item = (StorageKey, StorageData);
fn next(&mut self) -> Option<Self::Item> {
let (key, value) = self
.inner
self.inner
.next_pair(&self.state)?
.ok()
.map(|(key, value)| (StorageKey(key), StorageData(value)))?;
if let Some(skipped_key) = self.skip_if_first.take() {
if key == skipped_key {
return self.next()
}
}
Some((key, value))
.map(|(key, value)| (StorageKey(key), StorageData(value)))
}
}
@@ -440,13 +413,9 @@ where
let mut args = IterArgs::default();
args.prefix = prefix.as_ref().map(|prefix| prefix.0.as_slice());
args.start_at = start_at.as_ref().map(|start_at| start_at.0.as_slice());
args.start_at_exclusive = true;
let start_at = args.start_at;
Ok(Self {
inner: state.raw_iter(args)?,
state,
skip_if_first: start_at.map(|key| StorageKey(key.to_vec())),
})
Ok(Self { inner: state.raw_iter(args)?, state })
}
}