Guest User

Untitled

a guest
May 26th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. #[derive(Clone, Debug)]
  2. enum UVec<T> {
  3. Zero,
  4. One(T),
  5. Many(Vec<T>),
  6. }
  7.  
  8. impl<T> UVec<T> {
  9. fn new() -> UVec<T> {
  10. UVec::Zero
  11. }
  12.  
  13. fn push(&mut self, value: T) {
  14. match *self {
  15. UVec::Zero => { *self = UVec::One(value); }
  16. UVec::One(v) => { *self = UVec::Many(vec![v, value]); }
  17. UVec::Many(ref mut v) => { v.push(value); }
  18. };
  19. }
  20.  
  21. fn pop(&mut self) -> Option<T> {
  22. match *self {
  23. UVec::Zero => None,
  24. UVec::One(v) => { *self = UVec::Zero; Some(v) }
  25. UVec::Many(ref mut v) => v.pop()
  26. }
  27. }
  28.  
  29. fn truncate(&mut self, len: usize) {
  30. match *self {
  31. UVec::Zero => {},
  32. UVec::One(_) => { if len < 1 { *self = UVec::Zero } }
  33. UVec::Many(ref mut v) => v.truncate(len)
  34. }
  35. }
  36. }
  37.  
  38. fn main() {
  39. }
Add Comment
Please, Sign In to add comment