Guest User

Untitled

a guest
Oct 20th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. fn main() {
  2. unsafe {
  3. let mut ctx1 = Context::new();
  4. println!("&ctx1 = {:p}", &ctx1);
  5. println!("&CURRENT_CONTEXT = {:p}", &CURRENT_CONTEXT);
  6. set_current_context(&mut ctx1);
  7.  
  8. let current_context = current_context();
  9. println!("current_context = {:p}", current_context);
  10. }
  11. unsafe {
  12. let mut ctx2 = Context::new();
  13. println!("&ctx2 = {:p}", &ctx2);
  14. println!("&CURRENT_CONTEXT = {:p}", &CURRENT_CONTEXT);
  15. set_current_context(&mut ctx2);
  16.  
  17. let current_context = current_context();
  18. println!("current_context = {:p}", current_context);
  19. }
  20. {
  21. let current_context = current_context();
  22. println!("block3--current_context = {:p}", current_context);
  23. }
  24. {
  25. let current_context = current_context_mut();
  26. println!("block4--current_context = {:p}", current_context);
  27. current_context.state_manager.frame_buffer_id = 30;
  28. println!("block4--current_context = {}", current_context.state_manager.frame_buffer_id);
  29. }
  30. {
  31. let current_context = current_context();
  32. println!("block5--current_context = {}", current_context.state_manager.frame_buffer_id);
  33. }
  34. {
  35. let current_context = current_context_mut();
  36. println!("block6--current_context = {:p}", current_context);
  37. current_context.state_manager.frame_buffer_id = 30;
  38. println!("block6--current_context = {}", current_context.state_manager.frame_buffer_id);
  39. }
  40. }
  41.  
  42. static mut CURRENT_CONTEXT: *mut Context = std::ptr::null_mut();
  43.  
  44. fn set_current_context(context: *mut Context) {
  45. unsafe {
  46. CURRENT_CONTEXT = context;
  47. }
  48. }
  49.  
  50. fn current_context<'a>() -> &'a Context {
  51. unsafe { &*CURRENT_CONTEXT }
  52. }
  53.  
  54. fn current_context_mut<'a>() -> &'a mut Context {
  55. unsafe { &mut *CURRENT_CONTEXT }
  56. }
  57.  
  58. pub struct Context {
  59. pub resource_manager: ResourceManager,
  60. pub state_manager: StateManager,
  61. }
  62.  
  63. impl Context{
  64. pub fn new() -> Self {
  65. Self {
  66. resource_manager: ResourceManager::new(),
  67. state_manager: StateManager::new(),
  68. }
  69. }
  70. }
  71.  
  72. pub struct ResourceManager {
  73.  
  74. }
  75.  
  76. impl ResourceManager {
  77. pub fn new() -> Self {
  78. Self {
  79.  
  80. }
  81. }
  82. }
  83.  
  84. pub struct StateManager {
  85. pub frame_buffer_id: i32,
  86. }
  87.  
  88. impl StateManager {
  89. pub fn new() -> Self {
  90. Self {
  91. frame_buffer_id: 0,
  92. }
  93. }
  94. }
Add Comment
Please, Sign In to add comment