mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 17:55:20 +08:00
23 lines
604 B
Rust
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
|
|
};
|
|
}
|