Guest User

Untitled

a guest
Sep 20th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. struct MetaBuffer<'a> {
  2. buffers: &'a [&'a [u8]]
  3. }
  4.  
  5. impl <'a> MetaBuffer<'a> {
  6. fn slice<'b>(&self, mut start: usize, mut length: usize, slice_buffer: &'b mut Vec<&'a [u8]>) -> &'b [&[u8]] {
  7.  
  8. let mut i = 0;
  9. for buffer in self.buffers {
  10. if buffer.len() <= start {
  11. start -= buffer.len();
  12. i += 1;
  13. } else {
  14. break;
  15. }
  16. }
  17. let to_take = (self.buffers[i].len() - start).min(length);
  18. slice_buffer.push(&self.buffers[i][start .. start + to_take]);
  19. length -= to_take;
  20. while length > 0 {
  21. i += 1;
  22. let to_take = self.buffers[i].len().min(length);
  23. slice_buffer.push(&self.buffers[i][..to_take]);
  24. length -= to_take;
  25. }
  26. &slice_buffer[..]
  27. }
  28. }
  29.  
  30. pub fn main() {
  31. let a = [1,2,3];
  32. let b = [4,5];
  33. let c = [6,7,8];
  34. let buffers = [&a[..], &b[..], &c[..]];
  35. let meta_buffer = MetaBuffer { buffers: &buffers[..] };
  36. let mut result_buffer = vec![];
  37. let my_slice = meta_buffer.slice(2, 4, &mut result_buffer);
  38. println!("{:?}", my_slice);
  39. }
Add Comment
Please, Sign In to add comment