forked from Rativel/BurritOS
Moved to reference passing system
This commit is contained in:
@@ -16,10 +16,7 @@ macro_rules! init_system {
|
||||
init_system!(m)
|
||||
}};
|
||||
($a:expr) => {{
|
||||
let sys = std::rc::Rc::new(std::cell::RefCell::new(crate::System::new($a)));
|
||||
crate::System::freeze(std::rc::Rc::clone(&sys));
|
||||
sys
|
||||
|
||||
$crate::System::new($a)
|
||||
}};
|
||||
}
|
||||
|
||||
@@ -36,7 +33,7 @@ macro_rules! init_system {
|
||||
#[derive(PartialEq)]
|
||||
pub struct System {
|
||||
machine: Machine,
|
||||
thread_manager: Rc<RefCell<ThreadManager>>
|
||||
thread_manager: ThreadManager
|
||||
}
|
||||
|
||||
impl System {
|
||||
@@ -45,34 +42,26 @@ impl System {
|
||||
pub fn new(machine: Machine) -> System {
|
||||
Self {
|
||||
machine,
|
||||
thread_manager: Rc::new(RefCell::new(ThreadManager::new()))
|
||||
thread_manager: ThreadManager::new()
|
||||
}
|
||||
}
|
||||
|
||||
/// use thread_manager setter to send it system instance
|
||||
pub fn freeze(this: Rc<RefCell<System>>) {
|
||||
let copy = Rc::clone(&this);
|
||||
let tm = &this.borrow_mut().thread_manager;
|
||||
tm.borrow_mut().system = Option::Some(copy);
|
||||
ThreadManager::freeze(tm);
|
||||
}
|
||||
|
||||
// GETTERS
|
||||
|
||||
/// Returns the Machine
|
||||
///
|
||||
/// Useful to access RAM, devices, ...
|
||||
pub fn get_machine(&self) -> Machine {
|
||||
self.machine
|
||||
pub fn get_machine(&self) -> &Machine {
|
||||
&self.machine
|
||||
}
|
||||
|
||||
pub fn get_thread_manager(&self) -> Rc<RefCell<ThreadManager>> {
|
||||
Rc::clone(&self.thread_manager)
|
||||
pub fn get_thread_manager(&self) -> &ThreadManager {
|
||||
&self.thread_manager
|
||||
}
|
||||
|
||||
// Setters
|
||||
|
||||
/// Assign a machine to the system
|
||||
/// Assign a machine to the system
|
||||
pub fn set_machine(&mut self, machine: Machine) {
|
||||
self.machine = machine
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user