Created
October 16, 2017 16:18
-
-
Save glyn/e27f41b4ae746b0814e394a24f445252 to your computer and use it in GitHub Desktop.
bindgen applied to https://users.rust-lang.org/t/bitfield-and-union-for-low-level-data-structures-and-type-conversion-in-rust/13221/15
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* automatically generated by rust-bindgen */ | |
#[repr(C, packed)] | |
#[derive(Copy)] | |
pub struct header_t { | |
pub __bindgen_anon_1: header_t__bindgen_ty_1, | |
} | |
#[repr(C)] | |
#[derive(Copy)] | |
pub union header_t__bindgen_ty_1 { | |
pub __bindgen_anon_1: header_t__bindgen_ty_1__bindgen_ty_1, | |
pub unmap: [::std::os::raw::c_uchar; 6usize], | |
_bindgen_union_align: [u8; 6usize], | |
} | |
#[repr(C, packed)] | |
#[derive(Debug, Copy)] | |
pub struct header_t__bindgen_ty_1__bindgen_ty_1 { | |
pub _bitfield_1: [u16; 2usize], | |
pub cmd: ::std::os::raw::c_uchar, | |
pub size: ::std::os::raw::c_uchar, | |
} | |
#[test] | |
fn bindgen_test_layout_header_t__bindgen_ty_1__bindgen_ty_1() { | |
assert_eq!(::std::mem::size_of::<header_t__bindgen_ty_1__bindgen_ty_1>() , | |
6usize , concat ! ( | |
"Size of: " , stringify ! ( | |
header_t__bindgen_ty_1__bindgen_ty_1 ) )); | |
assert_eq! (::std::mem::align_of::<header_t__bindgen_ty_1__bindgen_ty_1>() | |
, 1usize , concat ! ( | |
"Alignment of " , stringify ! ( | |
header_t__bindgen_ty_1__bindgen_ty_1 ) )); | |
assert_eq! (unsafe { | |
& ( * ( 0 as * const header_t__bindgen_ty_1__bindgen_ty_1 ) ) | |
. cmd as * const _ as usize } , 4usize , concat ! ( | |
"Alignment of field: " , stringify ! ( | |
header_t__bindgen_ty_1__bindgen_ty_1 ) , "::" , stringify ! ( | |
cmd ) )); | |
assert_eq! (unsafe { | |
& ( * ( 0 as * const header_t__bindgen_ty_1__bindgen_ty_1 ) ) | |
. size as * const _ as usize } , 5usize , concat ! ( | |
"Alignment of field: " , stringify ! ( | |
header_t__bindgen_ty_1__bindgen_ty_1 ) , "::" , stringify ! ( | |
size ) )); | |
} | |
impl Clone for header_t__bindgen_ty_1__bindgen_ty_1 { | |
fn clone(&self) -> Self { *self } | |
} | |
impl header_t__bindgen_ty_1__bindgen_ty_1 { | |
#[inline] | |
pub fn protocol(&self) -> ::std::os::raw::c_ushort { | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
let mask = 15u64 as u32; | |
let val = (unit_field_val & mask) >> 0usize; | |
unsafe { ::std::mem::transmute(val as u16) } | |
} | |
#[inline] | |
pub fn set_protocol(&mut self, val: ::std::os::raw::c_ushort) { | |
let mask = 15u64 as u32; | |
let val = val as u16 as u32; | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
unit_field_val &= !mask; | |
unit_field_val |= (val << 0usize) & mask; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as | |
*const u8, | |
&mut self._bitfield_1 as *mut _ as | |
*mut u8, | |
::std::mem::size_of::<u32>()); | |
} | |
} | |
#[inline] | |
pub fn target(&self) -> ::std::os::raw::c_ushort { | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
let mask = 65520u64 as u32; | |
let val = (unit_field_val & mask) >> 4usize; | |
unsafe { ::std::mem::transmute(val as u16) } | |
} | |
#[inline] | |
pub fn set_target(&mut self, val: ::std::os::raw::c_ushort) { | |
let mask = 65520u64 as u32; | |
let val = val as u16 as u32; | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
unit_field_val &= !mask; | |
unit_field_val |= (val << 4usize) & mask; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as | |
*const u8, | |
&mut self._bitfield_1 as *mut _ as | |
*mut u8, | |
::std::mem::size_of::<u32>()); | |
} | |
} | |
#[inline] | |
pub fn target_mode(&self) -> ::std::os::raw::c_ushort { | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
let mask = 983040u64 as u32; | |
let val = (unit_field_val & mask) >> 16usize; | |
unsafe { ::std::mem::transmute(val as u16) } | |
} | |
#[inline] | |
pub fn set_target_mode(&mut self, val: ::std::os::raw::c_ushort) { | |
let mask = 983040u64 as u32; | |
let val = val as u16 as u32; | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
unit_field_val &= !mask; | |
unit_field_val |= (val << 16usize) & mask; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as | |
*const u8, | |
&mut self._bitfield_1 as *mut _ as | |
*mut u8, | |
::std::mem::size_of::<u32>()); | |
} | |
} | |
#[inline] | |
pub fn source(&self) -> ::std::os::raw::c_ushort { | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
let mask = 4293918720u64 as u32; | |
let val = (unit_field_val & mask) >> 20usize; | |
unsafe { ::std::mem::transmute(val as u16) } | |
} | |
#[inline] | |
pub fn set_source(&mut self, val: ::std::os::raw::c_ushort) { | |
let mask = 4293918720u64 as u32; | |
let val = val as u16 as u32; | |
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() }; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as | |
*const u8, | |
&mut unit_field_val as *mut u32 as | |
*mut u8, | |
::std::mem::size_of::<u32>()) | |
}; | |
unit_field_val &= !mask; | |
unit_field_val |= (val << 20usize) & mask; | |
unsafe { | |
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as | |
*const u8, | |
&mut self._bitfield_1 as *mut _ as | |
*mut u8, | |
::std::mem::size_of::<u32>()); | |
} | |
} | |
#[inline] | |
pub fn new_bitfield_1(protocol: ::std::os::raw::c_ushort, | |
target: ::std::os::raw::c_ushort, | |
target_mode: ::std::os::raw::c_ushort, | |
source: ::std::os::raw::c_ushort) -> u32 { | |
({ | |
({ | |
({ | |
({ 0 } | | |
((protocol as u16 as u32) << 0usize) & | |
(15u64 as u32)) | |
} | ((target as u16 as u32) << 4usize) & (65520u64 as u32)) | |
} | | |
((target_mode as u16 as u32) << 16usize) & | |
(983040u64 as u32)) | |
} | ((source as u16 as u32) << 20usize) & (4293918720u64 as u32)) | |
} | |
} | |
#[test] | |
fn bindgen_test_layout_header_t__bindgen_ty_1() { | |
assert_eq!(::std::mem::size_of::<header_t__bindgen_ty_1>() , 6usize , | |
concat ! ( "Size of: " , stringify ! ( header_t__bindgen_ty_1 ) | |
)); | |
assert_eq! (::std::mem::align_of::<header_t__bindgen_ty_1>() , 1usize , | |
concat ! ( | |
"Alignment of " , stringify ! ( header_t__bindgen_ty_1 ) )); | |
assert_eq! (unsafe { | |
& ( * ( 0 as * const header_t__bindgen_ty_1 ) ) . unmap as * | |
const _ as usize } , 0usize , concat ! ( | |
"Alignment of field: " , stringify ! ( header_t__bindgen_ty_1 | |
) , "::" , stringify ! ( unmap ) )); | |
} | |
impl Clone for header_t__bindgen_ty_1 { | |
fn clone(&self) -> Self { *self } | |
} | |
#[test] | |
fn bindgen_test_layout_header_t() { | |
assert_eq!(::std::mem::size_of::<header_t>() , 6usize , concat ! ( | |
"Size of: " , stringify ! ( header_t ) )); | |
assert_eq! (::std::mem::align_of::<header_t>() , 1usize , concat ! ( | |
"Alignment of " , stringify ! ( header_t ) )); | |
} | |
impl Clone for header_t { | |
fn clone(&self) -> Self { *self } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment