Guest User

Untitled

a guest
Jun 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. trait Stepper {
  2. fn inc(&mut self) -> ();
  3. fn get(&self) -> u32;
  4. }
  5.  
  6. // Big Stepper
  7. struct BigStepper {
  8. value: u32,
  9. }
  10.  
  11. impl BigStepper {
  12. fn new() -> BigStepper { BigStepper{ value: 1u32 } }
  13. }
  14.  
  15. impl Stepper for BigStepper {
  16. fn inc(&mut self) {
  17. self.value = self.value*3 + 1;
  18. }
  19.  
  20. fn get(&self) -> u32 {
  21. self.value
  22. }
  23. }
  24. // END Big Stepper
  25.  
  26. // Little Stepper
  27. struct LittleStepper {
  28. value: u32
  29. }
  30.  
  31. impl LittleStepper {
  32. fn new() -> LittleStepper { LittleStepper{ value: 0u32 } }
  33. }
  34.  
  35. impl Stepper for LittleStepper {
  36. fn inc(&mut self) {
  37. self.value = self.value / 2;
  38. }
  39. fn get(&self) -> u32 {
  40. self.value
  41. }
  42. }
  43. // END Little Stepper
  44.  
  45. fn main() {
  46. let mut big_stepper: Box<Stepper> = Box::new(BigStepper::new());
  47. let mut little_stepper: Box<Stepper> = Box::new(LittleStepper::new());
  48. let mut stepper: &mut Box<Stepper> = &mut big_stepper;
  49. while stepper.get() != 1 {
  50. stepper.inc();
  51. println!("{}", stepper.get());
  52. stepper = match stepper.get() % 2 {
  53. 0 => &mut little_stepper,
  54. 1 => &mut big_stepper,
  55. _ => break
  56. };
  57. }
  58. }
Add Comment
Please, Sign In to add comment