pub trait BitWrite {
    fn write_bit(&mut self, bit: bool) -> Result<()>;
    fn write<U>(&mut self, bits: u32, value: U) -> Result<()>
    where
        U: Numeric
; fn write_signed<S>(&mut self, bits: u32, value: S) -> Result<()>
    where
        S: SignedNumeric
; fn byte_aligned(&self) -> bool; fn write_bytes(&mut self, buf: &[u8]) -> Result<()> { ... } fn write_unary0(&mut self, value: u32) -> Result<()> { ... } fn write_unary1(&mut self, value: u32) -> Result<()> { ... } fn byte_align(&mut self) -> Result<()> { ... } }
Expand description

A trait for anything that can write a variable number of potentially un-aligned values to an output stream

Required Methods

Writes a single bit to the stream. true indicates 1, false indicates 0

Errors

Passes along any I/O error from the underlying stream.

Writes an unsigned value to the stream using the given number of bits.

Errors

Passes along any I/O error from the underlying stream. Returns an error if the input type is too small to hold the given number of bits. Returns an error if the value is too large to fit the given number of bits.

Writes a twos-complement signed value to the stream with the given number of bits.

Errors

Passes along any I/O error from the underlying stream. Returns an error if the input type is too small to hold the given number of bits. Returns an error if the value is too large to fit the given number of bits.

Returns true if the stream is aligned at a whole byte.

Provided Methods

Writes the entirety of a byte buffer to the stream.

Errors

Passes along any I/O error from the underlying stream.

Example
use std::io::Write;
use bitstream_io::{BigEndian, BitWriter, BitWrite};
let mut writer = BitWriter::endian(Vec::new(), BigEndian);
writer.write(8, 0x66).unwrap();
writer.write(8, 0x6F).unwrap();
writer.write(8, 0x6F).unwrap();
writer.write_bytes(b"bar").unwrap();
assert_eq!(writer.into_writer(), b"foobar");

Writes value number of 1 bits to the stream and then writes a 0 bit. This field is variably-sized.

Errors

Passes along any I/O error from the underyling stream.

Examples
use std::io::Write;
use bitstream_io::{BigEndian, BitWriter, BitWrite};
let mut writer = BitWriter::endian(Vec::new(), BigEndian);
writer.write_unary0(0).unwrap();
writer.write_unary0(3).unwrap();
writer.write_unary0(10).unwrap();
assert_eq!(writer.into_writer(), [0b01110111, 0b11111110]);
use std::io::Write;
use bitstream_io::{LittleEndian, BitWriter, BitWrite};
let mut writer = BitWriter::endian(Vec::new(), LittleEndian);
writer.write_unary0(0).unwrap();
writer.write_unary0(3).unwrap();
writer.write_unary0(10).unwrap();
assert_eq!(writer.into_writer(), [0b11101110, 0b01111111]);

Writes value number of 0 bits to the stream and then writes a 1 bit. This field is variably-sized.

Errors

Passes along any I/O error from the underyling stream.

Example
use std::io::Write;
use bitstream_io::{BigEndian, BitWriter, BitWrite};
let mut writer = BitWriter::endian(Vec::new(), BigEndian);
writer.write_unary1(0).unwrap();
writer.write_unary1(3).unwrap();
writer.write_unary1(10).unwrap();
assert_eq!(writer.into_writer(), [0b10001000, 0b00000001]);
use std::io::Write;
use bitstream_io::{LittleEndian, BitWriter, BitWrite};
let mut writer = BitWriter::endian(Vec::new(), LittleEndian);
writer.write_unary1(0).unwrap();
writer.write_unary1(3).unwrap();
writer.write_unary1(10).unwrap();
assert_eq!(writer.into_writer(), [0b00010001, 0b10000000]);

Pads the stream with 0 bits until it is aligned at a whole byte. Does nothing if the stream is already aligned.

Errors

Passes along any I/O error from the underyling stream.

Example
use std::io::Write;
use bitstream_io::{BigEndian, BitWriter, BitWrite};
let mut writer = BitWriter::endian(Vec::new(), BigEndian);
writer.write(1, 0).unwrap();
writer.byte_align().unwrap();
writer.write(8, 0xFF).unwrap();
assert_eq!(writer.into_writer(), [0x00, 0xFF]);

Implementors