use crate::qintr::*; use std::{cell::RefCell, fs}; use memmap::Mmap; use maraiah::map; pub struct Project { emit: ProjectEmitter, wad: RefCell>, } impl Drop for Project { fn drop(&mut self) { if cfg!(debug_assertions) { eprintln!("drop Project"); } } } impl ProjectTrait for Project { fn new(emit: ProjectEmitter) -> Project { if cfg!(debug_assertions) { eprintln!("new Project"); } Project{emit, wad: RefCell::new(None)} } fn emit(&mut self) -> &mut ProjectEmitter { &mut self.emit } fn open(&mut self, path: String) -> bool { if cfg!(debug_assertions) { eprintln!("opening project: {}", &path); } let fp = fs::File::open(path); let fp = if let Ok(fp) = fp {fp} else {return false;}; let mm = unsafe {Mmap::map(&fp)}; let mm = if let Ok(mm) = mm {mm} else {return false;}; if let Ok(wad) = map::read(&mm) { self.wad.replace(Some(wad)); return true; } false } } // EOF