1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 16:44:06 +02:00

fix box/rc/arc write

This commit is contained in:
Robin Appelman 2021-07-16 21:15:34 +02:00
commit 309a3b1f6f
2 changed files with 29 additions and 9 deletions

View file

@ -161,21 +161,21 @@ impl<E: Endianness, T: BitWrite<E>, const N: usize> BitWrite<E> for [T; N] {
impl<T: BitWrite<E>, E: Endianness> BitWrite<E> for Box<T> {
#[inline]
fn write(&self, stream: &mut BitWriteStream<E>) -> Result<()> {
stream.write(self)
stream.write(self.as_ref())
}
}
impl<T: BitWrite<E>, E: Endianness> BitWrite<E> for Rc<T> {
#[inline]
fn write(&self, stream: &mut BitWriteStream<E>) -> Result<()> {
stream.write(self)
stream.write(self.as_ref())
}
}
impl<T: BitWrite<E>, E: Endianness> BitWrite<E> for Arc<T> {
#[inline]
fn write(&self, stream: &mut BitWriteStream<E>) -> Result<()> {
stream.write(self)
stream.write(self.as_ref())
}
}
@ -318,23 +318,23 @@ impl<E: Endianness, T: BitWriteSized<E>, const N: usize> BitWriteSized<E> for [T
}
}
impl<T: BitWrite<E>, E: Endianness> BitWriteSized<E> for Box<T> {
impl<T: BitWriteSized<E>, E: Endianness> BitWriteSized<E> for Box<T> {
#[inline]
fn write_sized(&self, stream: &mut BitWriteStream<E>, len: usize) -> Result<()> {
stream.write_sized(self, len)
stream.write_sized(self.as_ref(), len)
}
}
impl<T: BitWrite<E>, E: Endianness> BitWriteSized<E> for Rc<T> {
impl<T: BitWriteSized<E>, E: Endianness> BitWriteSized<E> for Rc<T> {
#[inline]
fn write_sized(&self, stream: &mut BitWriteStream<E>, len: usize) -> Result<()> {
stream.write_sized(self, len)
stream.write_sized(self.as_ref(), len)
}
}
impl<T: BitWrite<E>, E: Endianness> BitWriteSized<E> for Arc<T> {
impl<T: BitWriteSized<E>, E: Endianness> BitWriteSized<E> for Arc<T> {
#[inline]
fn write_sized(&self, stream: &mut BitWriteStream<E>, len: usize) -> Result<()> {
stream.write_sized(self, len)
stream.write_sized(self.as_ref(), len)
}
}

View file

@ -1,4 +1,6 @@
use bitbuffer::{BigEndian, BitReadBuffer, BitReadStream, BitWriteStream, LittleEndian};
use std::rc::Rc;
use std::sync::Arc;
#[test]
fn test_write_bool_le() {
@ -184,3 +186,21 @@ fn test_write_signed() {
assert_eq!(-17i32, read.read_int(32).unwrap());
assert_eq!(-9i32, read.read_int(8).unwrap());
}
#[test]
fn test_write_container() {
let mut data = Vec::new();
{
let mut stream = BitWriteStream::new(&mut data, LittleEndian);
stream.write(&Box::new(true)).unwrap();
stream.write(&Rc::new(true)).unwrap();
stream.write(&Arc::new(true)).unwrap();
}
let mut read = BitReadStream::from(BitReadBuffer::new(&data, LittleEndian));
assert_eq!(Box::new(true), read.read().unwrap());
assert_eq!(Rc::new(true), read.read().unwrap());
assert_eq!(Arc::new(true), read.read().unwrap());
}