tiny_os/lib/utils/src/container_of.rs

23 lines
604 B
Rust

// yet another kernel's container_of macro for Rust
#[macro_export]
macro_rules! container_of {
($ptr:expr, $type:ty, $field:ident) => {
($ptr as *const _ as *const u8).sub(core::mem::offset_of!($type, $field) as usize) as *const $type
};
}
#[macro_export]
macro_rules! container_of_offset {
($ptr:expr, $type:ty, $offset:expr) => {
($ptr as *const _ as *const u8).sub($offset) as *const $type
};
}
#[macro_export]
macro_rules! to_field_offset {
($ptr:expr, $type:ty, $offset:expr) => {
($ptr as *const _ as *const u8).add($offset) as *const $type
};
}