From eac466040ecae69aec474a06c67c5ff423fd74a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 16 Nov 2016 22:55:54 +0200 Subject: [PATCH] Move duplicated code into a function --- src/adapter.rs | 58 +++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/src/adapter.rs b/src/adapter.rs index 96bf0c85..0c44e504 100644 --- a/src/adapter.rs +++ b/src/adapter.rs @@ -61,6 +61,26 @@ impl Adapter { self.size } + fn copy_data(deque: &VecDeque, skip: usize, data: &mut [u8], size: usize) { + let mut skip = skip; + let mut left = size; + let mut idx = 0; + + for item in deque { + let data_item = item.as_slice(); + + let to_copy = cmp::min(left, data_item.len() - skip); + data[idx..idx + to_copy].copy_from_slice(&data_item[skip..skip + to_copy]); + skip = 0; + idx += to_copy; + left -= to_copy; + if left == 0 { + break; + } + } + assert_eq!(left, 0); + } + pub fn peek(&mut self, size: usize) -> Result<&[u8], AdapterError> { if self.size < size { return Err(AdapterError::NotEnoughData); @@ -80,24 +100,7 @@ impl Adapter { self.scratch.reserve(size); { let data = self.scratch.as_mut_slice(); - - let mut skip = self.skip; - let mut left = size; - let mut idx = 0; - - for item in &self.deque { - let data_item = item.as_slice(); - - let to_copy = cmp::min(left, data_item.len() - skip); - data[idx..idx + to_copy].copy_from_slice(&data_item[skip..skip + to_copy]); - skip = 0; - idx += to_copy; - left -= to_copy; - if left == 0 { - break; - } - } - assert_eq!(left, 0); + Self::copy_data(&self.deque, self.skip, data, size); } Ok(self.scratch.as_slice()) @@ -132,24 +135,7 @@ impl Adapter { { let mut map = new.map_readwrite().unwrap(); let data = map.as_mut_slice(); - - let mut skip = self.skip; - let mut left = size; - let mut idx = 0; - - for item in &self.deque { - let data_item = item.as_slice(); - - let to_copy = cmp::min(left, data_item.len() - skip); - data[idx..idx + to_copy].copy_from_slice(&data_item[skip..skip + to_copy]); - skip = 0; - idx += to_copy; - left -= to_copy; - if left == 0 { - break; - } - } - assert_eq!(left, 0); + Self::copy_data(&self.deque, self.skip, data, size); } self.flush(size).unwrap(); Ok(new)