mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-06 10:32:10 +00:00
descriptor_utils: Add iter
method
Add an `iter` method to the `Reader` struct so that callers can iterate over the objects in place rather than having to store them in a separate collection. BUG=none TEST=unit tests Change-Id: I29671910a4244a8d7786ca2eb241416ae72b8c9f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2093966 Tested-by: Chirantan Ekbote <chirantan@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Chirantan Ekbote <chirantan@chromium.org>
This commit is contained in:
parent
8bb4faa662
commit
265967bcda
1 changed files with 11 additions and 4 deletions
|
@ -216,8 +216,8 @@ pub struct Reader<'a> {
|
||||||
buffer: DescriptorChainConsumer<'a>,
|
buffer: DescriptorChainConsumer<'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// An iterator over `DataInit` objects on readable descriptors in the descriptor chain.
|
/// An iterator over `DataInit` objects on readable descriptors in the descriptor chain.
|
||||||
struct ReaderIterator<'a, T: DataInit> {
|
pub struct ReaderIterator<'a, T: DataInit> {
|
||||||
reader: &'a mut Reader<'a>,
|
reader: &'a mut Reader<'a>,
|
||||||
phantom: PhantomData<T>,
|
phantom: PhantomData<T>,
|
||||||
}
|
}
|
||||||
|
@ -283,10 +283,17 @@ impl<'a> Reader<'a> {
|
||||||
/// them as a collection. Returns an error if the size of the remaining data is indivisible by
|
/// them as a collection. Returns an error if the size of the remaining data is indivisible by
|
||||||
/// the size of an object of type `T`.
|
/// the size of an object of type `T`.
|
||||||
pub fn collect<C: FromIterator<io::Result<T>>, T: DataInit>(&'a mut self) -> C {
|
pub fn collect<C: FromIterator<io::Result<T>>, T: DataInit>(&'a mut self) -> C {
|
||||||
C::from_iter(ReaderIterator {
|
C::from_iter(self.iter())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates an iterator for sequentially reading `DataInit` objects from the `Reader`. Unlike
|
||||||
|
/// `collect`, this doesn't consume all the remaining data in the `Reader` and doesn't require
|
||||||
|
/// the objects to be stored in a separate collection.
|
||||||
|
pub fn iter<T: DataInit>(&'a mut self) -> ReaderIterator<'a, T> {
|
||||||
|
ReaderIterator {
|
||||||
reader: self,
|
reader: self,
|
||||||
phantom: PhantomData,
|
phantom: PhantomData,
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reads data from the descriptor chain buffer into a file descriptor.
|
/// Reads data from the descriptor chain buffer into a file descriptor.
|
||||||
|
|
Loading…
Reference in a new issue