//////////////////////////////////////////////////////////////////////////// // // Bit input and output classes // (c)2003 Jeremy Collake and Bitsum Technologies // jeremy@bitsum.com // // This code may not be used without the permission of Bitsum Technologies. // To use this code in your application, please email us at support@bitsum.com // and we will be happy to grant you a free license. // ////////////////////////////////////////////////////////////////////////////// // // bitin and bitout class definitions. // // These classes facilitate bit i/o. // // // #pragma once #include "types.h" // data types /////////////////////////////////////////////////////////////////////////////// // // bitin class // /////////////////////////////////////////////////////////////////////////////// class bitin { private: DWORD nBitCount; // current count of bits in cByte BYTE cByte; // current byte being read for input PSTREAM pStream; // pointer to the input buffer public: bitin(PSTREAM); // constructor, supply pointer to input buffer BIT GetBit(); // read a single bit DWORD GetBits(DWORD dwBits); // read X number of bits BYTE GetByte(); // read a byte WORD GetWord(); // read a word DWORD GetDword(); // read a dword PSTREAM *ptr(); // get a pointer to the input stream }; /////////////////////////////////////////////////////////////////////////////// // // bitout class // /////////////////////////////////////////////////////////////////////////////// class bitout { private: BYTE nBitCount; // current count of bits in cByte BYTE cByte; // holder of bits PSTREAM pStream; // pointer to the output stream BYTE pushed_nBitCount; // holder for pushed position in output stream (bit count) BYTE pushed_cByte; // holder for pushed position in output stream (current bits) PSTREAM pushed_pStream; // holder for pushed position in output stream (pointer) public: bitout(PSTREAM); // constructor, supply the output buffer ~bitout(); // destructor, flushes output buffer void EmitBit(BIT nbBit); // emit a bit void EmitBits(DWORD dwBits, DWORD dwBitCount); // emit a number of bits void EmitByte(BYTE nbByte); // emit a byte void EmitWord(WORD wWord); // emit a word void EmitDword(DWORD dwDword); // emit a dword void Flush(); // flush the output buffer void push(); // push the current position of the output stream (only one position in stack) void pop(); // pop the output stream position PSTREAM ptr(); // pointer to the output stream };