diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-08-10 19:06:46 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-08-10 19:06:46 +0200 |
| commit | 63cfcbe7a7745b276de58ec92e0141b958c44feb (patch) | |
| tree | 990e33a83756e27187033579ee2f85d5c79169d5 /src/state/mod.rs | |
| parent | b747ca8af52129876b577a4f20f7105a05c6b002 (diff) | |
use unsafe blocks instead of mutexes
Diffstat (limited to 'src/state/mod.rs')
| -rw-r--r-- | src/state/mod.rs | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/state/mod.rs b/src/state/mod.rs index 138b597..1b1430d 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -1,4 +1,4 @@ -use std::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}; +use std::ptr::addr_of_mut; use mlua::{UserData, UserDataFields}; @@ -19,7 +19,6 @@ pub struct GlobalState { pub exit: bool, } -static GLOBAL_STATE: RwLock<GlobalState> = RwLock::new(GlobalState::new()); const DUMMY_STATE: GlobalState = GlobalState::new(); impl GlobalState { @@ -33,12 +32,9 @@ impl GlobalState { } } - pub fn instance() -> RwLockReadGuard<'static, Self> { - GLOBAL_STATE.read().unwrap() - } - - pub fn instance_mut() -> RwLockWriteGuard<'static, Self> { - GLOBAL_STATE.write().unwrap() + pub fn get() -> &'static mut Self { + static mut GLOBAL_STATE: GlobalState = GlobalState::new(); + unsafe { &mut *addr_of_mut!(GLOBAL_STATE) } } pub fn set_focus(&mut self, win: window::Window) { @@ -58,17 +54,17 @@ impl UserData for GlobalState { fields.add_field_function_get("editor", |_, _| Ok(DUMMY_STATE.editor)); fields.add_field_function_get("log", |_, _| Ok(DUMMY_STATE.log)); fields.add_field_function_get("active_window", |_, _| { - Ok(GlobalState::instance().active_window) + Ok(GlobalState::get().active_window) }); fields.add_field_function_set("active_window", |_, _, win: window::Window| { - GlobalState::instance_mut().set_focus(win); + GlobalState::get().set_focus(win); Ok(()) }); } fn add_methods<'lua, M: mlua::prelude::LuaUserDataMethods<'lua, Self>>(methods: &mut M) { methods.add_function("quit", |_, _: ()| { - GlobalState::instance_mut().exit = true; + GlobalState::get().exit = true; Ok(()) }) } |