diff options
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) } } } |