Struct BitWriter
struct BitWriter<W: io::Write, E: Endianness> { ... }
For writing bit values to an underlying stream in a given endianness.
Because this only writes whole bytes to the underlying stream, it is important that output is byte-aligned before the bitstream writer's lifetime ends. Partial bytes will be lost if the writer is disposed of before they can be written.
Implementations
impl<W: io::Write, E: Endianness> BitWriter<W, E>
fn new(writer: W) -> BitWriter<W, E>Wraps a BitWriter around something that implements
Writefn endian(writer: W, _endian: E) -> BitWriter<W, E>Wraps a BitWriter around something that implements
Writewith the given endianness.fn into_writer(self: Self) -> WUnwraps internal writer and disposes of BitWriter.
Warning
Any unwritten partial bits are discarded.
fn writer(self: &mut Self) -> Option<&mut W>If stream is byte-aligned, provides mutable reference to internal writer. Otherwise returns
Nonefn into_bytewriter(self: Self) -> ByteWriter<W, E>Converts
BitWritertoByteWriterin the same endianness.Warning
Any written partial bits are discarded.
fn bytewriter(self: &mut Self) -> Option<ByteWriter<&mut W, E>>If stream is byte-aligned, provides temporary
ByteWriterin the same endianness. Otherwise returnsNoneWarning
Any unwritten bits left over when
ByteWriteris dropped are lost.fn into_unwritten(self: Self) -> (u32, u8)Consumes writer and returns any un-written partial byte as a
(bits, value)tuple.Examples
use Write; use ; let mut data = Vecnew; let = ; assert_eq!; assert_eq!; assert_eq!;use Write; use ; let mut data = Vecnew; let = ; assert_eq!; assert_eq!; assert_eq!;fn flush(self: &mut Self) -> Result<()>Flushes output stream to disk, if necessary. Any partial bytes are not flushed.
Errors
Passes along any errors from the underlying stream.
impl<T> Any for BitWriter<W, E>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for BitWriter<W, E>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for BitWriter<W, E>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> From for BitWriter<W, E>
fn from(t: T) -> TReturns the argument unchanged.
impl<T, U> Into for BitWriter<W, E>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for BitWriter<W, E>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for BitWriter<W, E>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>
impl<W, E> Freeze for BitWriter<W, E>
impl<W, E> RefUnwindSafe for BitWriter<W, E>
impl<W, E> Send for BitWriter<W, E>
impl<W, E> Sync for BitWriter<W, E>
impl<W, E> Unpin for BitWriter<W, E>
impl<W, E> UnsafeUnpin for BitWriter<W, E>
impl<W, E> UnwindSafe for BitWriter<W, E>
impl<W: io::Write, E: Endianness> BitWrite for BitWriter<W, E>
fn write_bit(self: &mut Self, bit: bool) -> Result<()>Examples
use Write; use ; let mut writer = endian; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; assert_eq!;use Write; use ; let mut writer = endian; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; writer.write_bit.unwrap; assert_eq!;fn write<U>(self: &mut Self, bits: u32, value: U) -> Result<()> where U: NumericExamples
use Write; use ; let mut writer = endian; writer.write.unwrap; writer.write.unwrap; writer.write.unwrap; assert_eq!;use Write; use ; let mut writer = endian; writer.write.unwrap; writer.write.unwrap; writer.write.unwrap; assert_eq!;use ; use ; let mut w = endian; assert!; // can't write u8 in 9 bits assert!; // can't write u16 in 17 bits assert!; // can't write u32 in 33 bits assert!; // can't write u64 in 65 bits assert!; // can't write 2 in 1 bit assert!; // can't write 4 in 2 bits assert!; // can't write 8 in 3 bits assert!; // can't write 16 in 4 bitsfn write_out<BITS: u32, U>(self: &mut Self, value: U) -> Result<()> where U: NumericExamples
use Write; use ; let mut writer = endian; writer..unwrap; writer..unwrap; writer..unwrap; assert_eq!;use Write; use ; let mut writer = endian; writer..unwrap; writer..unwrap; writer..unwrap; assert_eq!;use ; use ; let mut w = endian; assert!; // can't write 2 in 1 bit assert!; // can't write 4 in 2 bits assert!; // can't write 8 in 3 bits assert!; // can't write 16 in 4 bitsfn write_signed<S>(self: &mut Self, bits: u32, value: S) -> Result<()> where S: SignedNumericExamples
use Write; use ; let mut writer = endian; writer.write_signed.unwrap; writer.write_signed.unwrap; assert_eq!;use Write; use ; let mut writer = endian; writer.write_signed.unwrap; writer.write_signed.unwrap; assert_eq!;fn write_signed_out<BITS: u32, S>(self: &mut Self, value: S) -> Result<()> where S: SignedNumericExamples
use Write; use ; let mut writer = endian; writer..unwrap; writer..unwrap; assert_eq!;use Write; use ; let mut writer = endian; writer..unwrap; writer..unwrap; assert_eq!;fn write_from<V>(self: &mut Self, value: V) -> Result<()> where V: Primitivefn write_as_from<F, V>(self: &mut Self, value: V) -> Result<()> where F: Endianness, V: Primitivefn write_bytes(self: &mut Self, buf: &[u8]) -> Result<()>fn byte_aligned(self: &Self) -> boolExample
use ; use ; let mut writer = endian; assert_eq!; writer.write.unwrap; assert_eq!; writer.write.unwrap; assert_eq!;
impl<W: io::Write, E: Endianness> HuffmanWrite for BitWriter<W, E>
fn write_huffman<T>(self: &mut Self, tree: &WriteHuffmanTree<E, T>, symbol: T) -> Result<()> where T: Ord + CopyExample
use Write; use ; use compile_write_tree; let tree = compile_write_tree.unwrap; let mut writer = endian; writer.write_huffman.unwrap; writer.write_huffman.unwrap; writer.write_huffman.unwrap; assert_eq!;