1
0
forked from Rativel/BurritOS

Moved to reference passing system

This commit is contained in:
François Autin
2023-03-15 15:20:20 +01:00
parent abb97d17d5
commit 1906ec836c
4 changed files with 64 additions and 109 deletions

View File

@@ -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
}