Added sc_v call
This commit is contained in:
@ -4,12 +4,7 @@
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
/// This trait allows ObjAddr to hold references to Multiple kinds of structs
|
||||
///
|
||||
/// - Lock
|
||||
/// - Condition
|
||||
/// - Sémaphore
|
||||
pub trait SynchObj { }
|
||||
use crate::kernel::synch::{ Semaphore, Lock };
|
||||
|
||||
/// Brief Definition of object identifiers:
|
||||
///
|
||||
@ -20,36 +15,55 @@ pub trait SynchObj { }
|
||||
/// A method allows to detect of an object corresponding to a given
|
||||
/// identifier exists; this is used to check the parameters of system
|
||||
/// calls.
|
||||
pub struct ObjAddr<'a> {
|
||||
pub struct ObjAddr {
|
||||
last_id: i32,
|
||||
map: HashMap<i32, &'a dyn SynchObj>
|
||||
semaphores: HashMap<i32, Semaphore>,
|
||||
locks: HashMap<i32, Lock>
|
||||
}
|
||||
|
||||
impl<'a> ObjAddr<'a> {
|
||||
impl ObjAddr {
|
||||
|
||||
/// Initializes and returns a ObjAddr struct
|
||||
pub fn init() -> Self {
|
||||
Self {
|
||||
last_id: 3,
|
||||
map: HashMap::<i32, &dyn SynchObj>::new()
|
||||
semaphores: HashMap::<i32, Semaphore>::new(),
|
||||
locks: HashMap::<i32, Lock>::new()
|
||||
}
|
||||
}
|
||||
|
||||
/// Adds the **obj** SynchObj to self
|
||||
pub fn add_object(&mut self, obj: &'a dyn SynchObj) -> i32 {
|
||||
/// Adds the **obj** Semaphore to self
|
||||
pub fn add_semaphore(&mut self, obj: Semaphore) -> i32 {
|
||||
self.last_id = self.last_id + 1;
|
||||
self.map.insert(self.last_id, obj);
|
||||
self.semaphores.insert(self.last_id, obj);
|
||||
self.last_id
|
||||
}
|
||||
|
||||
/// Searches for an object of id **id** in self
|
||||
pub fn search_object(&self, id: i32) -> Option<&& dyn SynchObj> {
|
||||
self.map.get(&id)
|
||||
/// Adds the **obj** Lock to self
|
||||
pub fn add_lock(&mut self, obj: Lock) -> i32 {
|
||||
self.last_id = self.last_id + 1;
|
||||
self.locks.insert(self.last_id, obj);
|
||||
self.last_id
|
||||
}
|
||||
|
||||
/// Searches for a semaphore of id **id** in self
|
||||
pub fn search_semaphore(&self, id: i32) -> Option<&mut Semaphore> {
|
||||
self.semaphores.get(&id)
|
||||
}
|
||||
|
||||
/// Searches for a lock of id **id** in self
|
||||
pub fn search_lock(&self, id:i32) -> Option<&mut Lock> {
|
||||
self.locks.get(&id)
|
||||
}
|
||||
|
||||
/// Removes the object of id **id** from self if it exists
|
||||
pub fn remove_object_from_key(&mut self, id: i32) {
|
||||
self.map.remove(&id);
|
||||
pub fn remove_semaphore(&mut self, id: i32) {
|
||||
self.semaphores.remove(&id)
|
||||
}
|
||||
|
||||
pub fn remove_semaphore(&mut self, id:i32) {
|
||||
self.locks.remove(&id)
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user