cog/Libraries/MAC/Files/Source/MACLib/BitArray.h

63 lines
1.4 KiB
C++
Executable File

#ifndef APE_BITARRAY_H
#define APE_BITARRAY_H
#include "IO.h"
#include "MD5.h"
//#define BUILD_RANGE_TABLE
struct RANGE_CODER_STRUCT_COMPRESS
{
unsigned int low; // low end of interval
unsigned int range; // length of interval
unsigned int help; // bytes_to_follow resp. intermediate value
unsigned char buffer; // buffer for input / output
};
struct BIT_ARRAY_STATE
{
uint32 k;
uint32 nKSum;
};
class CBitArray
{
public:
// construction / destruction
CBitArray(CIO *pIO);
~CBitArray();
// encoding
int EncodeUnsignedLong(unsigned int n);
int EncodeValue(int nEncode, BIT_ARRAY_STATE & BitArrayState);
int EncodeBits(unsigned int nValue, int nBits);
// output (saving)
int OutputBitArray(BOOL bFinalize = FALSE);
// other functions
void Finalize();
void AdvanceToByteBoundary();
inline uint32 GetCurrentBitIndex() { return m_nCurrentBitIndex; }
void FlushState(BIT_ARRAY_STATE & BitArrayState);
void FlushBitArray();
inline CMD5Helper & GetMD5Helper() { return m_MD5; }
private:
// data members
uint32 * m_pBitArray;
CIO * m_pIO;
uint32 m_nCurrentBitIndex;
RANGE_CODER_STRUCT_COMPRESS m_RangeCoderInfo;
CMD5Helper m_MD5;
#ifdef BUILD_RANGE_TABLE
void OutputRangeTable();
#endif
};
#endif // #ifndef APE_BITARRAY_H