diff options
author | Sven Hesse | 2011-07-19 01:48:45 +0200 |
---|---|---|
committer | Sven Hesse | 2011-07-19 01:48:45 +0200 |
commit | 45f1f1275c31de8dd2a61de49f20747e442165d4 (patch) | |
tree | 7402d41336ec5fd2474dce4ccca2e3b48e62c648 | |
parent | 6370984b2238f90aa3e03ac70725b3cfc671d581 (diff) | |
download | scummvm-rg350-45f1f1275c31de8dd2a61de49f20747e442165d4.tar.gz scummvm-rg350-45f1f1275c31de8dd2a61de49f20747e442165d4.tar.bz2 scummvm-rg350-45f1f1275c31de8dd2a61de49f20747e442165d4.zip |
COMMON: Document the BitStream a bit more
-rw-r--r-- | common/bitstream.h | 80 |
1 files changed, 73 insertions, 7 deletions
diff --git a/common/bitstream.h b/common/bitstream.h index d9610b269a..7be0dccf45 100644 --- a/common/bitstream.h +++ b/common/bitstream.h @@ -32,7 +32,7 @@ namespace Common { class SeekableReadStream; /** - * A bit stream. + * A bit stream, giving access to data one bit at a time. * * Used in engines: * - scumm @@ -42,33 +42,66 @@ public: BitStream(); virtual ~BitStream(); - /** Read a bit. */ + /** Read a bit from the bitstream. */ virtual uint32 getBit() = 0; - /** Read a number of bits. */ + /** Read a number of bits, creating a multi-bit value. */ virtual uint32 getBits(uint32 n) = 0; - /** Adding another bit. */ + /** Add more bits, creating a multi-bit value in stages. */ virtual void addBit(uint32 &x, uint32 n) = 0; /** Skip a number of bits. */ void skip(uint32 n); - /** Get the current position. */ + /** Get the current position, in bits. */ virtual uint32 pos() const = 0; /** Return the number of bits in the stream. */ virtual uint32 size() const = 0; }; -/** A big endian bit stream. */ +/** + * A big-endian bit stream. + * + * The input data is read one byte at a time. Their bits are handed out + * in the order of MSB to LSB. When all 8 bits of a byte have been consumed, + * another input data byte is read. + */ class BitStreamBE : public BitStream { public: + /** + * Create a big endian bit stream. + * + * Reads and copies bitCount bits from the provided stream. + * Ownership of the stream is not transferred. + */ BitStreamBE(SeekableReadStream &stream, uint32 bitCount); + + /** + * Create a big endian bit stream. + * + * Reads and copies bitCount bits from the provided data. + * Ownership of the data is not transferred. + */ BitStreamBE(const byte *data, uint32 bitCount); + ~BitStreamBE(); uint32 getBit(); + + /** + * Read a number of bits, creating a multi-bit value. + * + * The bits are read one at a time, in the order MSB to LSB and + * or'd together to create a multi-bit value. + */ uint32 getBits(uint32 n); + + /** + * Add more bits, creating a multi-bit value in stages. + * + * Shifts in n new bits into the value x, in the order of MSB to LSB. + */ void addBit(uint32 &x, uint32 n); uint32 pos() const; @@ -81,15 +114,48 @@ private: uint8 _inValue; ///< Position within the current byte. }; -/** A 32bit little endian bit stream. */ +/** + * A little-endian bit stream, reading 32bit values at a time. + * + * The input data is read one little-endian uint32 at a time. Their bits are + * handed out in the order of LSB to MSB. When all 8 bits of a byte have been + * consumed, another little-endian input data uint32 is read. + */ class BitStream32LE : public BitStream { public: + /** + * Create a little-endian bit stream. + * + * Reads and copies bitCount bits from the provided stream. + * Ownership of the stream is not transferred. + */ BitStream32LE(SeekableReadStream &stream, uint32 bitCount); + + /** + * Create a little-endian bit stream. + * + * Reads and copies bitCount bits from the provided data. + * Ownership of the data is not transferred. + */ BitStream32LE(const byte *data, uint32 bitCount); + ~BitStream32LE(); uint32 getBit(); + + /** + * Read a number of bits, creating a multi-bit value. + * + * The bits are read one at a time, in the order LSB to MSB and + * or'd together to create a multi-bit value. + */ uint32 getBits(uint32 n); + + /** + * Add more bits, creating a multi-bit value in stages. + * + * Shifts in n new bits into the value x, in the order of LSB to MSB. + */ void addBit(uint32 &x, uint32 n); uint32 pos() const; |