63 lines
1.4 KiB
C++
Executable File
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
|