1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#[macro_export]
macro_rules! rw_read {
    ($e:expr) => {
        $e.read().unwrap()
    };
}

#[macro_export]
macro_rules! rw_write {
    ($e:expr) => {
        $e.write().unwrap()
    };
}

#[macro_export]
macro_rules! mutex_lock {
    ($e:expr) => {
        $e.lock().unwrap()
    };
}

#[macro_export]
macro_rules! field_size {
    ( $t:ty, $($f:tt),+ $(,)? ) => {
        {
            let mut size = 0_usize;
            $(
                let dummy = ::std::mem::MaybeUninit::uninit();
                let r: &$t = unsafe { dummy.assume_init_ref() };
                size += ::std::mem::size_of_val(&r.$f);
            )*
            size
        }
    }
}