• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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