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/sheet/register.rs | |
| parent | b747ca8af52129876b577a4f20f7105a05c6b002 (diff) | |
use unsafe blocks instead of mutexes
Diffstat (limited to 'src/sheet/register.rs')
| -rw-r--r-- | src/sheet/register.rs | 31 |
1 files changed, 11 insertions, 20 deletions
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<Vec<Arc<RwLock<Sheet>>>> = RwLock::new(Vec::new()); +static mut REGISTER: Vec<Sheet> = 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<SheetId> { - 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<Arc<RwLock<Sheet>>> { - 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) } } } |