mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 16:44:06 +02:00
Merge pull request #6 from hussein-aitlahcen/master
fixup: decrement before indexing with `last_mut`
This commit is contained in:
commit
7422800014
4 changed files with 20 additions and 3 deletions
|
|
@ -88,7 +88,8 @@ pub use write::{BitWrite, BitWriteSized};
|
||||||
pub use writestream::BitWriteStream;
|
pub use writestream::BitWriteStream;
|
||||||
|
|
||||||
mod endianness;
|
mod endianness;
|
||||||
mod num_traits;
|
#[allow(missing_docs)]
|
||||||
|
pub mod num_traits;
|
||||||
mod read;
|
mod read;
|
||||||
mod readbuffer;
|
mod readbuffer;
|
||||||
mod readstream;
|
mod readstream;
|
||||||
|
|
|
||||||
|
|
@ -209,7 +209,7 @@ impl<'a, T: BitWrite<E> + ToOwned + ?Sized, E: Endianness> BitWrite<E> for Cow<'
|
||||||
|
|
||||||
macro_rules! impl_write_tuple {
|
macro_rules! impl_write_tuple {
|
||||||
($($i:tt: $type:ident),*) => {
|
($($i:tt: $type:ident),*) => {
|
||||||
impl<'a, E: Endianness, $($type: BitWrite<E>),*> BitWrite<E> for ($($type),*) {
|
impl<E: Endianness, $($type: BitWrite<E>),*> BitWrite<E> for ($($type),*) {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn write(&self, stream: &mut BitWriteStream<E>) -> Result<()> {
|
fn write(&self, stream: &mut BitWriteStream<E>) -> Result<()> {
|
||||||
$(self.$i.write(stream)?;)*
|
$(self.$i.write(stream)?;)*
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ impl<'a> WriteData<'a> {
|
||||||
fn last_mut(&mut self) -> Option<&mut u8> {
|
fn last_mut(&mut self) -> Option<&mut u8> {
|
||||||
match self {
|
match self {
|
||||||
WriteData::Vec(vec) => vec.last_mut(),
|
WriteData::Vec(vec) => vec.last_mut(),
|
||||||
WriteData::Slice { data, length } if *length > 0 => Some(&mut data[*length]),
|
WriteData::Slice { data, length } if *length > 0 => Some(&mut data[*length - 1]),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -227,3 +227,19 @@ fn test_write_to_slice() {
|
||||||
// 0 padded
|
// 0 padded
|
||||||
assert!(!read.read_bool().unwrap());
|
assert!(!read.read_bool().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_write_last_slice() {
|
||||||
|
let mut data = [0; 1];
|
||||||
|
{
|
||||||
|
let mut stream = BitWriteStream::from_slice(&mut data[..], LittleEndian);
|
||||||
|
|
||||||
|
stream.write_int::<u8>(0b1000, 4).unwrap();
|
||||||
|
stream.write_bool(true).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut read = BitReadStream::from(BitReadBuffer::new(&data[..], LittleEndian));
|
||||||
|
|
||||||
|
assert_eq!(0b1000, read.read_int::<u8>(4).unwrap());
|
||||||
|
assert_eq!(true, read.read_bool().unwrap());
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue