summaryrefslogtreecommitdiff
path: root/src/sheet/register.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sheet/register.rs')
-rw-r--r--src/sheet/register.rs31
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(&register[id]))
- } else {
- None
- }
+ pub fn get(id: SheetId) -> Option<&'static mut Sheet> {
+ unsafe { REGISTER.get_mut(id) }
}
}