Guest User

Untitled

a guest
Jul 17th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.59 KB | None | 0 0
  1. use std::sync::Arc;
  2. use std::sync::RwLock;
  3. use std::os::raw::c_void;
  4.  
  5. struct Counter {
  6. val: u32,
  7. }
  8.  
  9. impl Counter {
  10. fn inc(&mut self, n: &mut N) {
  11. self.val += n.val;
  12. n.val += 1;
  13. }
  14. }
  15.  
  16. struct N {
  17. val: u32,
  18. }
  19.  
  20. struct X {
  21. n: N,
  22. ctr: Counter,
  23. }
  24.  
  25. fn main() {
  26. let x = X{n: N{val:1}, ctr: Counter{val: 0}};
  27.  
  28. {
  29. f(&mut x as *mut _ as *mut c_void);
  30. f(&mut x as *mut _ as *mut c_void);
  31. }
  32.  
  33. println!("{}", x_ref.read().unwrap().ctr.val);
  34. }
  35.  
  36. fn f(x_ptr: *mut c_void) {
  37. let x = unsafe { &mut *(x_ptr as *mut X) };
  38. x.ctr.inc(&mut x.n);
  39. }
Add Comment
Please, Sign In to add comment