summaryrefslogtreecommitdiff
path: root/src/state/mod.rs
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2024-08-10 19:06:46 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2024-08-10 19:06:46 +0200
commit63cfcbe7a7745b276de58ec92e0141b958c44feb (patch)
tree990e33a83756e27187033579ee2f85d5c79169d5 /src/state/mod.rs
parentb747ca8af52129876b577a4f20f7105a05c6b002 (diff)
use unsafe blocks instead of mutexes
Diffstat (limited to 'src/state/mod.rs')
-rw-r--r--src/state/mod.rs18
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(())
})
}