mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 08:34:07 +02:00
Merge pull request #5 from jbangelo/fix-unchecked-bool-endianness
Fix unchecked reading boolean values
This commit is contained in:
commit
5e9f0e7a59
2 changed files with 16 additions and 2 deletions
|
|
@ -314,8 +314,13 @@ where
|
|||
let bit_offset = position & 7;
|
||||
|
||||
let byte = self.slice.get_unchecked(byte_index);
|
||||
let shifted = byte >> bit_offset;
|
||||
shifted & 1u8 == 1
|
||||
if E::is_le() {
|
||||
let shifted = byte >> bit_offset;
|
||||
shifted & 1u8 == 1
|
||||
} else {
|
||||
let shifted = byte << bit_offset;
|
||||
shifted & 0b1000_0000u8 == 0b1000_0000u8
|
||||
}
|
||||
}
|
||||
|
||||
/// Read a sequence of bits from the buffer as integer
|
||||
|
|
|
|||
|
|
@ -82,6 +82,13 @@ fn test_bare_enum() {
|
|||
|
||||
#[test]
|
||||
fn test_field_enum() {
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite)]
|
||||
struct CompoundVariant(
|
||||
#[size = 15]
|
||||
u16,
|
||||
bool,
|
||||
);
|
||||
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite)]
|
||||
#[discriminant_bits = 4]
|
||||
enum Enum {
|
||||
|
|
@ -89,11 +96,13 @@ fn test_field_enum() {
|
|||
B(String),
|
||||
C(f32),
|
||||
D(#[size = 15] i64),
|
||||
E(CompoundVariant),
|
||||
}
|
||||
roundtrip(Enum::A);
|
||||
roundtrip(Enum::B("foobar".into()));
|
||||
roundtrip(Enum::C(12.0));
|
||||
roundtrip(Enum::D(-12345));
|
||||
roundtrip(Enum::E(CompoundVariant(6789, true)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue