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

use vectors as byte source in examples

This commit is contained in:
Robin Appelman 2019-02-27 16:29:39 +01:00
commit 35b0325222
2 changed files with 69 additions and 67 deletions

View file

@ -16,11 +16,13 @@ const USIZE_SIZE: usize = size_of::<usize>();
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, LittleEndian}; /// use bitstream_reader::{BitBuffer, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// // read 7 bits as u8, starting from bit 3
/// let result: u8 = buffer.read_int(3, 7).unwrap();
/// ``` /// ```
pub struct BitBuffer<E> pub struct BitBuffer<E>
where where
@ -43,11 +45,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, LittleEndian}; /// use bitstream_reader::{BitBuffer, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// ``` /// ```
pub fn new(bytes: Vec<u8>, _endianness: E) -> Self { pub fn new(bytes: Vec<u8>, _endianness: E) -> Self {
let byte_len = bytes.len(); let byte_len = bytes.len();
@ -112,13 +114,13 @@ where
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, LittleEndian}; /// # use bitstream_reader::{BitBuffer, LittleEndian};
/// /// #
/// let bytes: &[u8] = &[ /// # let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// # 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// # 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// # ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// # let buffer = BitBuffer::new(bytes, LittleEndian);
/// let result = buffer.read_bool(5).unwrap(); /// let result = buffer.read_bool(5).unwrap();
/// assert_eq!(result, true); /// assert_eq!(result, true);
/// ``` /// ```
@ -148,13 +150,13 @@ where
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, LittleEndian}; /// # use bitstream_reader::{BitBuffer, LittleEndian};
/// /// #
/// let bytes: &[u8] = &[ /// # let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// # 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// # 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// # ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// # let buffer = BitBuffer::new(bytes, LittleEndian);
/// let result = buffer.read_int::<u16>(10, 9).unwrap(); /// let result = buffer.read_int::<u16>(10, 9).unwrap();
/// assert_eq!(result, 0b100_0110_10); /// assert_eq!(result, 0b100_0110_10);
/// ``` /// ```
@ -226,13 +228,13 @@ where
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, LittleEndian}; /// # use bitstream_reader::{BitBuffer, LittleEndian};
/// /// #
/// let bytes: &[u8] = &[ /// # let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// # 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// # 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// # ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// # let buffer = BitBuffer::new(bytes, LittleEndian);
/// assert_eq!(buffer.read_bytes(5, 3).unwrap(), &[0b0_1010_101, 0b0_1100_011, 0b1_1001_101]); /// assert_eq!(buffer.read_bytes(5, 3).unwrap(), &[0b0_1010_101, 0b0_1100_011, 0b1_1001_101]);
/// assert_eq!(buffer.read_bytes(0, 8).unwrap(), &[ /// assert_eq!(buffer.read_bytes(0, 8).unwrap(), &[
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
@ -268,15 +270,15 @@ where
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// # use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// /// #
/// let bytes: &[u8] = &[ /// # let bytes = vec![
/// 0x48, 0x65, 0x6c, 0x6c, /// # 0x48, 0x65, 0x6c, 0x6c,
/// 0x6f, 0x20, 0x77, 0x6f, /// # 0x6f, 0x20, 0x77, 0x6f,
/// 0x72, 0x6c, 0x64, 0, /// # 0x72, 0x6c, 0x64, 0,
/// 0, 0, 0, 0 /// # 0, 0, 0, 0
/// ]; /// # ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// # let buffer = BitBuffer::new(bytes, LittleEndian);
/// // Fixed length string /// // Fixed length string
/// assert_eq!(buffer.read_string(0, Some(13)).unwrap(), "Hello world".to_owned()); /// assert_eq!(buffer.read_string(0, Some(13)).unwrap(), "Hello world".to_owned());
/// // fixed length with null padding /// // fixed length with null padding
@ -315,13 +317,13 @@ where
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, LittleEndian}; /// # use bitstream_reader::{BitBuffer, LittleEndian};
/// /// #
/// let bytes: &[u8] = &[ /// # let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// # 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// # 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// # ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// # let buffer = BitBuffer::new(bytes, LittleEndian);
/// let result = buffer.read_float::<f32>(10).unwrap(); /// let result = buffer.read_float::<f32>(10).unwrap();
/// ``` /// ```
pub fn read_float<T>(&self, position: usize) -> Result<T> pub fn read_float<T>(&self, position: usize) -> Result<T>

View file

@ -16,11 +16,11 @@ use crate::{Read, ReadError, ReadSized, Result};
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// ``` /// ```
pub struct BitStream<E> pub struct BitStream<E>
@ -49,11 +49,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// ``` /// ```
pub fn new(buffer: BitBuffer<E>) -> Self { pub fn new(buffer: BitBuffer<E>) -> Self {
@ -87,11 +87,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// assert_eq!(stream.read_bool().unwrap(), true); /// assert_eq!(stream.read_bool().unwrap(), true);
/// assert_eq!(stream.read_bool().unwrap(), false); /// assert_eq!(stream.read_bool().unwrap(), false);
@ -118,11 +118,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// assert_eq!(stream.read_int::<u16>(3).unwrap(), 0b101); /// assert_eq!(stream.read_int::<u16>(3).unwrap(), 0b101);
/// assert_eq!(stream.read_int::<u16>(3).unwrap(), 0b110); /// assert_eq!(stream.read_int::<u16>(3).unwrap(), 0b110);
@ -151,11 +151,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// let result = stream.read_float::<f32>().unwrap(); /// let result = stream.read_float::<f32>().unwrap();
/// assert_eq!(stream.pos(), 32); /// assert_eq!(stream.pos(), 32);
@ -184,11 +184,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// assert_eq!(stream.read_bytes(3).unwrap(), &[0b1011_0101, 0b0110_1010, 0b1010_1100]); /// assert_eq!(stream.read_bytes(3).unwrap(), &[0b1011_0101, 0b0110_1010, 0b1010_1100]);
/// assert_eq!(stream.pos(), 24); /// assert_eq!(stream.pos(), 24);
@ -217,13 +217,13 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0x48, 0x65, 0x6c, 0x6c, /// 0x48, 0x65, 0x6c, 0x6c,
/// 0x6f, 0x20, 0x77, 0x6f, /// 0x6f, 0x20, 0x77, 0x6f,
/// 0x72, 0x6c, 0x64, 0, /// 0x72, 0x6c, 0x64, 0,
/// 0, 0, 0, 0 /// 0, 0, 0, 0
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// // Fixed length string /// // Fixed length string
/// stream.set_pos(0); /// stream.set_pos(0);
@ -259,11 +259,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// let mut bits = stream.read_bits(3).unwrap(); /// let mut bits = stream.read_bits(3).unwrap();
/// assert_eq!(stream.pos(), 3); /// assert_eq!(stream.pos(), 3);
@ -295,11 +295,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// stream.skip(3).unwrap(); /// stream.skip(3).unwrap();
/// assert_eq!(stream.pos(), 3); /// assert_eq!(stream.pos(), 3);
@ -322,11 +322,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// stream.set_pos(3).unwrap(); /// stream.set_pos(3).unwrap();
/// assert_eq!(stream.pos(), 3); /// assert_eq!(stream.pos(), 3);
@ -350,11 +350,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// assert_eq!(stream.bit_len(), 64); /// assert_eq!(stream.bit_len(), 64);
/// ``` /// ```
@ -369,11 +369,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// assert_eq!(stream.pos(), 0); /// assert_eq!(stream.pos(), 0);
/// stream.skip(5).unwrap(); /// stream.skip(5).unwrap();
@ -390,11 +390,11 @@ where
/// ``` /// ```
/// use bitstream_reader::{BitBuffer, BitStream, LittleEndian}; /// use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
/// ///
/// let bytes: &[u8] = &[ /// let bytes = vec![
/// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001, /// 0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111 /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
/// ]; /// ];
/// let buffer = BitBuffer::new(bytes.to_vec(), LittleEndian); /// let buffer = BitBuffer::new(bytes, LittleEndian);
/// let mut stream = BitStream::new(buffer); /// let mut stream = BitStream::new(buffer);
/// assert_eq!(stream.bits_left(), 64); /// assert_eq!(stream.bits_left(), 64);
/// stream.skip(5).unwrap(); /// stream.skip(5).unwrap();