Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn main() {
- unsafe {
- let mut ctx1 = Context::new();
- println!("&ctx1 = {:p}", &ctx1);
- println!("&CURRENT_CONTEXT = {:p}", &CURRENT_CONTEXT);
- set_current_context(&mut ctx1);
- let current_context = current_context();
- println!("current_context = {:p}", current_context);
- }
- unsafe {
- let mut ctx2 = Context::new();
- println!("&ctx2 = {:p}", &ctx2);
- println!("&CURRENT_CONTEXT = {:p}", &CURRENT_CONTEXT);
- set_current_context(&mut ctx2);
- let current_context = current_context();
- println!("current_context = {:p}", current_context);
- }
- {
- let current_context = current_context();
- println!("block3--current_context = {:p}", current_context);
- }
- {
- let current_context = current_context_mut();
- println!("block4--current_context = {:p}", current_context);
- current_context.state_manager.frame_buffer_id = 30;
- println!("block4--current_context = {}", current_context.state_manager.frame_buffer_id);
- }
- {
- let current_context = current_context();
- println!("block5--current_context = {}", current_context.state_manager.frame_buffer_id);
- }
- {
- let current_context = current_context_mut();
- println!("block6--current_context = {:p}", current_context);
- current_context.state_manager.frame_buffer_id = 30;
- println!("block6--current_context = {}", current_context.state_manager.frame_buffer_id);
- }
- }
- static mut CURRENT_CONTEXT: *mut Context = std::ptr::null_mut();
- fn set_current_context(context: *mut Context) {
- unsafe {
- CURRENT_CONTEXT = context;
- }
- }
- fn current_context<'a>() -> &'a Context {
- unsafe { &*CURRENT_CONTEXT }
- }
- fn current_context_mut<'a>() -> &'a mut Context {
- unsafe { &mut *CURRENT_CONTEXT }
- }
- pub struct Context {
- pub resource_manager: ResourceManager,
- pub state_manager: StateManager,
- }
- impl Context{
- pub fn new() -> Self {
- Self {
- resource_manager: ResourceManager::new(),
- state_manager: StateManager::new(),
- }
- }
- }
- pub struct ResourceManager {
- }
- impl ResourceManager {
- pub fn new() -> Self {
- Self {
- }
- }
- }
- pub struct StateManager {
- pub frame_buffer_id: i32,
- }
- impl StateManager {
- pub fn new() -> Self {
- Self {
- frame_buffer_id: 0,
- }
- }
- }
Add Comment
Please, Sign In to add comment