1 #![allow(
2 dead_code,
3 non_snake_case,
4 non_camel_case_types,
5 non_upper_case_globals
6 )]
7 #![cfg(not(target_os = "windows"))]
8
9 #[repr(C)]
10 #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
11 pub struct __BindgenBitfieldUnit<Storage> {
12 storage: Storage,
13 }
14 impl<Storage> __BindgenBitfieldUnit<Storage> {
15 #[inline]
new(storage: Storage) -> Self16 pub const fn new(storage: Storage) -> Self {
17 Self { storage }
18 }
19 }
20 impl<Storage> __BindgenBitfieldUnit<Storage>
21 where
22 Storage: AsRef<[u8]> + AsMut<[u8]>,
23 {
24 #[inline]
get_bit(&self, index: usize) -> bool25 pub fn get_bit(&self, index: usize) -> bool {
26 debug_assert!(index / 8 < self.storage.as_ref().len());
27 let byte_index = index / 8;
28 let byte = self.storage.as_ref()[byte_index];
29 let bit_index = if cfg!(target_endian = "big") {
30 7 - (index % 8)
31 } else {
32 index % 8
33 };
34 let mask = 1 << bit_index;
35 byte & mask == mask
36 }
37 #[inline]
set_bit(&mut self, index: usize, val: bool)38 pub fn set_bit(&mut self, index: usize, val: bool) {
39 debug_assert!(index / 8 < self.storage.as_ref().len());
40 let byte_index = index / 8;
41 let byte = &mut self.storage.as_mut()[byte_index];
42 let bit_index = if cfg!(target_endian = "big") {
43 7 - (index % 8)
44 } else {
45 index % 8
46 };
47 let mask = 1 << bit_index;
48 if val {
49 *byte |= mask;
50 } else {
51 *byte &= !mask;
52 }
53 }
54 #[inline]
get(&self, bit_offset: usize, bit_width: u8) -> u6455 pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 {
56 debug_assert!(bit_width <= 64);
57 debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
58 debug_assert!(
59 (bit_offset + (bit_width as usize)) / 8 <=
60 self.storage.as_ref().len()
61 );
62 let mut val = 0;
63 for i in 0..(bit_width as usize) {
64 if self.get_bit(i + bit_offset) {
65 let index = if cfg!(target_endian = "big") {
66 bit_width as usize - 1 - i
67 } else {
68 i
69 };
70 val |= 1 << index;
71 }
72 }
73 val
74 }
75 #[inline]
set(&mut self, bit_offset: usize, bit_width: u8, val: u64)76 pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) {
77 debug_assert!(bit_width <= 64);
78 debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
79 debug_assert!(
80 (bit_offset + (bit_width as usize)) / 8 <=
81 self.storage.as_ref().len()
82 );
83 for i in 0..(bit_width as usize) {
84 let mask = 1 << i;
85 let val_bit_is_set = val & mask == mask;
86 let index = if cfg!(target_endian = "big") {
87 bit_width as usize - 1 - i
88 } else {
89 i
90 };
91 self.set_bit(index + bit_offset, val_bit_is_set);
92 }
93 }
94 }
95 #[repr(C)]
96 #[repr(align(8))]
97 #[derive(Debug, Default, Copy, Clone)]
98 pub struct Foo {
99 pub _bitfield_align_1: [u64; 0],
100 pub _bitfield_1: __BindgenBitfieldUnit<[u8; 32usize]>,
101 }
102 #[test]
bindgen_test_layout_Foo()103 fn bindgen_test_layout_Foo() {
104 assert_eq!(
105 ::std::mem::size_of::<Foo>(),
106 32usize,
107 concat!("Size of: ", stringify!(Foo))
108 );
109 assert_eq!(
110 ::std::mem::align_of::<Foo>(),
111 8usize,
112 concat!("Alignment of ", stringify!(Foo))
113 );
114 }
115 impl Foo {
116 #[inline]
m_bitfield(&self) -> ::std::os::raw::c_ulong117 pub fn m_bitfield(&self) -> ::std::os::raw::c_ulong {
118 unsafe {
119 ::std::mem::transmute(self._bitfield_1.get(0usize, 64u8) as u64)
120 }
121 }
122 #[inline]
set_m_bitfield(&mut self, val: ::std::os::raw::c_ulong)123 pub fn set_m_bitfield(&mut self, val: ::std::os::raw::c_ulong) {
124 unsafe {
125 let val: u64 = ::std::mem::transmute(val);
126 self._bitfield_1.set(0usize, 64u8, val as u64)
127 }
128 }
129 #[inline]
m_bar(&self) -> ::std::os::raw::c_ulong130 pub fn m_bar(&self) -> ::std::os::raw::c_ulong {
131 unsafe {
132 ::std::mem::transmute(self._bitfield_1.get(64usize, 64u8) as u64)
133 }
134 }
135 #[inline]
set_m_bar(&mut self, val: ::std::os::raw::c_ulong)136 pub fn set_m_bar(&mut self, val: ::std::os::raw::c_ulong) {
137 unsafe {
138 let val: u64 = ::std::mem::transmute(val);
139 self._bitfield_1.set(64usize, 64u8, val as u64)
140 }
141 }
142 #[inline]
foo(&self) -> ::std::os::raw::c_ulong143 pub fn foo(&self) -> ::std::os::raw::c_ulong {
144 unsafe {
145 ::std::mem::transmute(self._bitfield_1.get(128usize, 1u8) as u64)
146 }
147 }
148 #[inline]
set_foo(&mut self, val: ::std::os::raw::c_ulong)149 pub fn set_foo(&mut self, val: ::std::os::raw::c_ulong) {
150 unsafe {
151 let val: u64 = ::std::mem::transmute(val);
152 self._bitfield_1.set(128usize, 1u8, val as u64)
153 }
154 }
155 #[inline]
bar(&self) -> ::std::os::raw::c_ulong156 pub fn bar(&self) -> ::std::os::raw::c_ulong {
157 unsafe {
158 ::std::mem::transmute(self._bitfield_1.get(192usize, 64u8) as u64)
159 }
160 }
161 #[inline]
set_bar(&mut self, val: ::std::os::raw::c_ulong)162 pub fn set_bar(&mut self, val: ::std::os::raw::c_ulong) {
163 unsafe {
164 let val: u64 = ::std::mem::transmute(val);
165 self._bitfield_1.set(192usize, 64u8, val as u64)
166 }
167 }
168 #[inline]
new_bitfield_1( m_bitfield: ::std::os::raw::c_ulong, m_bar: ::std::os::raw::c_ulong, foo: ::std::os::raw::c_ulong, bar: ::std::os::raw::c_ulong, ) -> __BindgenBitfieldUnit<[u8; 32usize]>169 pub fn new_bitfield_1(
170 m_bitfield: ::std::os::raw::c_ulong,
171 m_bar: ::std::os::raw::c_ulong,
172 foo: ::std::os::raw::c_ulong,
173 bar: ::std::os::raw::c_ulong,
174 ) -> __BindgenBitfieldUnit<[u8; 32usize]> {
175 let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 32usize]> =
176 Default::default();
177 __bindgen_bitfield_unit.set(0usize, 64u8, {
178 let m_bitfield: u64 = unsafe { ::std::mem::transmute(m_bitfield) };
179 m_bitfield as u64
180 });
181 __bindgen_bitfield_unit.set(64usize, 64u8, {
182 let m_bar: u64 = unsafe { ::std::mem::transmute(m_bar) };
183 m_bar as u64
184 });
185 __bindgen_bitfield_unit.set(128usize, 1u8, {
186 let foo: u64 = unsafe { ::std::mem::transmute(foo) };
187 foo as u64
188 });
189 __bindgen_bitfield_unit.set(192usize, 64u8, {
190 let bar: u64 = unsafe { ::std::mem::transmute(bar) };
191 bar as u64
192 });
193 __bindgen_bitfield_unit
194 }
195 }
196