Move duplicated code into a function

This commit is contained in:
Sebastian Dröge 2016-11-16 22:55:54 +02:00
parent 20a2c7bd33
commit eac466040e

View file

@ -61,6 +61,26 @@ impl Adapter {
self.size self.size
} }
fn copy_data(deque: &VecDeque<ReadMappedBuffer>, 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> { pub fn peek(&mut self, size: usize) -> Result<&[u8], AdapterError> {
if self.size < size { if self.size < size {
return Err(AdapterError::NotEnoughData); return Err(AdapterError::NotEnoughData);
@ -80,24 +100,7 @@ impl Adapter {
self.scratch.reserve(size); self.scratch.reserve(size);
{ {
let data = self.scratch.as_mut_slice(); let data = self.scratch.as_mut_slice();
Self::copy_data(&self.deque, self.skip, data, size);
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);
} }
Ok(self.scratch.as_slice()) Ok(self.scratch.as_slice())
@ -132,24 +135,7 @@ impl Adapter {
{ {
let mut map = new.map_readwrite().unwrap(); let mut map = new.map_readwrite().unwrap();
let data = map.as_mut_slice(); let data = map.as_mut_slice();
Self::copy_data(&self.deque, self.skip, data, size);
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.flush(size).unwrap(); self.flush(size).unwrap();
Ok(new) Ok(new)