Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[derive(Clone, Debug)]
- enum UVec<T> {
- Zero,
- One(T),
- Many(Vec<T>),
- }
- impl<T> UVec<T> {
- fn new() -> UVec<T> {
- UVec::Zero
- }
- fn push(&mut self, value: T) {
- match *self {
- UVec::Zero => { *self = UVec::One(value); }
- UVec::One(v) => { *self = UVec::Many(vec![v, value]); }
- UVec::Many(ref mut v) => { v.push(value); }
- };
- }
- fn pop(&mut self) -> Option<T> {
- match *self {
- UVec::Zero => None,
- UVec::One(v) => { *self = UVec::Zero; Some(v) }
- UVec::Many(ref mut v) => v.pop()
- }
- }
- fn truncate(&mut self, len: usize) {
- match *self {
- UVec::Zero => {},
- UVec::One(_) => { if len < 1 { *self = UVec::Zero } }
- UVec::Many(ref mut v) => v.truncate(len)
- }
- }
- }
- fn main() {
- }
Add Comment
Please, Sign In to add comment