use crate::{ConfClass, ConfObject, Result};
pub trait ClassAlloc {
unsafe fn alloc<T>(_cls: *mut ConfClass) -> Result<*mut ConfObject> {
let size = std::mem::size_of::<T>();
let ptr = crate::simics_alloc!(crate::api::ConfObject, size)?;
Ok(Into::into(ptr))
}
}
pub trait ClassInit {
unsafe fn init(instance: *mut ConfObject) -> Result<*mut ConfObject> {
Ok(instance)
}
}
pub trait ClassFinalize {
unsafe fn finalize(_instance: *mut ConfObject) -> Result<()> {
Ok(())
}
}
pub trait ClassObjectsFinalize {
unsafe fn objects_finalized(_instance: *mut ConfObject) -> Result<()> {
Ok(())
}
}
pub trait ClassDeinit {
unsafe fn deinit(_instance: *mut ConfObject) -> Result<()> {
Ok(())
}
}
pub trait ClassDealloc {
unsafe fn dealloc(instance: *mut ConfObject) -> Result<()> {
crate::api::free(instance);
Ok(())
}
}
pub trait ClassCreate {
fn create() -> Result<*mut ConfClass>;
}
pub trait Class:
ClassAlloc
+ ClassInit
+ ClassFinalize
+ ClassObjectsFinalize
+ ClassDeinit
+ ClassDealloc
+ ClassCreate
{
}