Guest User

Untitled

a guest
Jul 19th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. use std::cell::{Ref, RefCell, RefMut};
  2. use std::rc::Rc;
  3.  
  4. #[derive(Clone)]
  5. struct Servizio {
  6. inner: Rc<RefCell<ServizioInner>>,
  7. }
  8.  
  9. struct ServizioInner {
  10. x: u32,
  11. }
  12.  
  13. impl Servizio {
  14. fn new() -> Self {
  15. Self {
  16. inner: Rc::new(RefCell::new(ServizioInner { x: 0 })),
  17. }
  18. }
  19. fn state(&self) -> Ref<ServizioInner> {
  20. self.inner.borrow()
  21. }
  22. fn state_mut(&self) -> RefMut<ServizioInner> {
  23. self.inner.borrow_mut()
  24. }
  25.  
  26. fn inc_x(&self) {
  27. let mut s = self.state_mut();
  28. s.x += 1;
  29. }
  30.  
  31. fn get_x(&self) -> u32 {
  32. let s = self.state();
  33. s.x
  34. }
  35. }
  36.  
  37. fn main() {
  38. let servizio = Servizio::new();
  39. let servizio2 = servizio.clone();
  40. servizio.inc_x();
  41. println!("{}", servizio2.get_x());
  42. }
Add Comment
Please, Sign In to add comment