#[derive(Debug, Clone, Copy)]
pub struct ObjectHeader {
pub mark: bool,
pub age: u8,
pub size: usize,
pub ref_count: usize,
pub type_id: u8,
pub access_count: u32,
}
impl ObjectHeader {
pub fn new(size: usize, type_id: u8) -> Self {
Self { mark: false, age: 0, size, ref_count: 0, type_id, access_count: 0 }
}
pub fn increment_ref_count(&mut self) {
self.ref_count += 1;
}
pub fn decrement_ref_count(&mut self) -> usize {
if self.ref_count > 0 {
self.ref_count -= 1;
}
self.ref_count
}
pub fn increment_age(&mut self) {
if self.age < u8::MAX {
self.age += 1;
}
}
pub fn is_tenured(&self) -> bool {
self.age >= 3
}
pub fn clear_mark(&mut self) {
self.mark = false;
}
pub fn set_mark(&mut self) {
self.mark = true;
}
pub fn is_marked(&self) -> bool {
self.mark
}
pub fn get_age(&self) -> u8 {
self.age
}
pub fn reset_age(&mut self) {
self.age = 0;
}
pub fn increment_access_count(&mut self) {
if self.access_count < u32::MAX {
self.access_count += 1;
}
}
pub fn reset_access_count(&mut self) {
self.access_count = 0;
}
pub fn get_access_count(&self) -> u32 {
self.access_count
}
}