From 63cfcbe7a7745b276de58ec92e0141b958c44feb Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Sat, 10 Aug 2024 19:06:46 +0200 Subject: use unsafe blocks instead of mutexes --- src/state/mod.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'src/state/mod.rs') 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 = 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(()) }) } -- cgit v1.2.3-70-g09d2