Guest User

Untitled

a guest
Jul 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. use std::mem;
  2.  
  3. pub trait Split {
  4. type Buffer;
  5.  
  6. fn split(&mut self, usize) -> Option<Self::Buffer>;
  7.  
  8. fn fake_split(&mut self) -> Self;
  9. }
  10.  
  11. impl<'a> Split for &'a [u8] {
  12. type Buffer = Self;
  13.  
  14. fn split(&mut self, n: usize) -> Option<Self::Buffer> {
  15. if self.len() >= n {
  16. let (l, r) = mem::replace(self, &[]).split_at(n);
  17. *self = r;
  18. Some(l)
  19. } else {
  20. None
  21. }
  22. }
  23.  
  24. fn fake_split(&mut self) -> Self {
  25. self.split_at(self.len()).0
  26. }
  27. }
  28. impl<'a> Split for &'a mut [u8] {
  29. type Buffer = Self;
  30.  
  31. fn split(&mut self, n: usize) -> Option<Self::Buffer> {
  32. if self.len() >= n {
  33. let (l, r) = mem::replace(self, &mut []).split_at_mut(n);
  34. *self = r;
  35. Some(l)
  36. } else {
  37. None
  38. }
  39. }
  40.  
  41. fn fake_split(&mut self) -> Self {
  42. self.split_at_mut(self.len()).0
  43. }
  44. }
  45.  
  46. fn main() {}
Add Comment
Please, Sign In to add comment