Guest User

Untitled

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