Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct MetaBuffer<'a> {
- buffers: &'a [&'a [u8]]
- }
- impl <'a> MetaBuffer<'a> {
- fn slice<'b>(&self, mut start: usize, mut length: usize, slice_buffer: &'b mut Vec<&'a [u8]>) -> &'b [&[u8]] {
- let mut i = 0;
- for buffer in self.buffers {
- if buffer.len() <= start {
- start -= buffer.len();
- i += 1;
- } else {
- break;
- }
- }
- let to_take = (self.buffers[i].len() - start).min(length);
- slice_buffer.push(&self.buffers[i][start .. start + to_take]);
- length -= to_take;
- while length > 0 {
- i += 1;
- let to_take = self.buffers[i].len().min(length);
- slice_buffer.push(&self.buffers[i][..to_take]);
- length -= to_take;
- }
- &slice_buffer[..]
- }
- }
- pub fn main() {
- let a = [1,2,3];
- let b = [4,5];
- let c = [6,7,8];
- let buffers = [&a[..], &b[..], &c[..]];
- let meta_buffer = MetaBuffer { buffers: &buffers[..] };
- let mut result_buffer = vec![];
- let my_slice = meta_buffer.slice(2, 4, &mut result_buffer);
- println!("{:?}", my_slice);
- }
Add Comment
Please, Sign In to add comment