AsyncIndexReader: avoid memcpy, add clippy lint fixup comment

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
Wolfgang Bumiller 2020-10-14 14:10:28 +02:00
parent 8db1468952
commit 61c6eafc08
1 changed files with 13 additions and 3 deletions

View File

@ -15,6 +15,17 @@ use super::IndexFile;
use super::read_chunk::AsyncReadChunk; use super::read_chunk::AsyncReadChunk;
use super::index::ChunkReadInfo; use super::index::ChunkReadInfo;
// FIXME: This enum may not be required?
// - Put the `WaitForData` case directly into a `read_future: Option<>`
// - make the read loop as follows:
// * if read_buffer is not empty:
// use it
// * else if read_future is there:
// poll it
// if read: move data to read_buffer
// * else
// create read future
#[allow(clippy::enum_variant_names)]
enum AsyncIndexReaderState<S> { enum AsyncIndexReaderState<S> {
NoData, NoData,
WaitForData(Pin<Box<dyn Future<Output = Result<(S, Vec<u8>), Error>> + Send + 'static>>), WaitForData(Pin<Box<dyn Future<Output = Result<(S, Vec<u8>), Error>> + Send + 'static>>),
@ -118,9 +129,8 @@ where
} }
AsyncIndexReaderState::WaitForData(ref mut future) => { AsyncIndexReaderState::WaitForData(ref mut future) => {
match ready!(future.as_mut().poll(cx)) { match ready!(future.as_mut().poll(cx)) {
Ok((store, mut chunk_data)) => { Ok((store, chunk_data)) => {
this.read_buffer.clear(); this.read_buffer = chunk_data;
this.read_buffer.append(&mut chunk_data);
this.state = AsyncIndexReaderState::HaveData; this.state = AsyncIndexReaderState::HaveData;
this.store = Some(store); this.store = Some(store);
} }