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/sheet/register.rs | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) (limited to 'src/sheet/register.rs') diff --git a/src/sheet/register.rs b/src/sheet/register.rs index aaf9c35..82982e9 100644 --- a/src/sheet/register.rs +++ b/src/sheet/register.rs @@ -1,10 +1,8 @@ -use std::sync::{Arc, RwLock}; - use mlua::{Table, UserData, Value}; use super::{cell::Cell, loader::Loader, luaref::SheetLuaRef, Sheet}; -static REGISTER: RwLock>>> = RwLock::new(Vec::new()); +static mut REGISTER: Vec = Vec::new(); pub type SheetId = usize; @@ -13,17 +11,16 @@ pub struct Register; impl Register { pub fn create(width: usize, height: usize) -> SheetId { - let mut register = REGISTER.write().unwrap(); - - let id = register.len(); - let sheet = Sheet::new(width, height, id); - register.push(Arc::new(RwLock::new(sheet))); - id + unsafe { + let id = REGISTER.len(); + let sheet = Sheet::new(width, height, id); + REGISTER.push(sheet); + id + } } pub fn create_from_table(table: Table) -> mlua::Result { - let mut register = REGISTER.write().unwrap(); - let id = register.len(); + let id = unsafe { REGISTER.len() }; let height = table.len()? as usize; let mut width: usize = 0; @@ -42,18 +39,12 @@ impl Register { } } - register.push(Arc::new(RwLock::new(sheet))); + unsafe { REGISTER.push(sheet) }; Ok(id) } - pub fn get(id: SheetId) -> Option>> { - let register = REGISTER.read().unwrap(); - - if id < register.len() { - Some(Arc::clone(®ister[id])) - } else { - None - } + pub fn get(id: SheetId) -> Option<&'static mut Sheet> { + unsafe { REGISTER.get_mut(id) } } } -- cgit v1.2.3-70-g09d2