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
// #[cfg(test)]
// mod tests {
//     #[test]
//     fn it_works() {
//         assert_eq!(2 + 2, 4);
//     }
// }

#[macro_export]
macro_rules! var_stack_zeroed {
    ($var_name: ident, $var_type: ty) => {
        let mut $var_name: &mut $var_type;
        unsafe {
            $var_name = &mut *(((&mut ([ 0 as u8; std::mem::size_of::<$var_type>() ])) as *mut [u8; std::mem::size_of::<$var_type>()]) as *mut $var_type)
        }
    };
}

#[macro_export]
macro_rules! var_heap_zeroed {
    ($var_name: ident, $var_type: ty) => {
        let mut $var_name: *mut $var_type;
        unsafe {
            let layout = std::alloc::Layout::new::<$var_type>();
            $var_name = std::alloc::alloc_zeroed(layout) as *mut $var_type;
        }
    };
}