2026-01-16 22:45:06 -05:00
|
|
|
#ifndef AXIO_CBITSTREAMINWRAPPER_H
|
|
|
|
|
#define AXIO_CBITSTREAMINWRAPPER_H
|
2018-12-08 23:44:41 -07:00
|
|
|
|
2025-12-17 13:44:30 -05:00
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
|
|
class IInputStream;
|
2018-12-08 23:44:41 -07:00
|
|
|
|
|
|
|
|
class CBitStreamInWrapper
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum EChunkSize
|
|
|
|
|
{
|
2018-12-16 13:52:10 -07:00
|
|
|
k8Bit = 8, k16Bit = 16, k32Bit = 32
|
2018-12-08 23:44:41 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private:
|
2025-12-17 13:44:30 -05:00
|
|
|
IInputStream *mpSourceStream = nullptr;
|
|
|
|
|
EChunkSize mChunkSize{};
|
|
|
|
|
uint32_t mBitPool = 0;
|
|
|
|
|
uint32_t mBitsRemaining = 0;
|
2018-12-08 23:44:41 -07:00
|
|
|
|
|
|
|
|
public:
|
2025-12-17 13:44:30 -05:00
|
|
|
explicit CBitStreamInWrapper(IInputStream *pStream, EChunkSize ChunkSize = k32Bit);
|
2018-12-08 23:44:41 -07:00
|
|
|
void SetChunkSize(EChunkSize Size);
|
2025-12-17 13:44:30 -05:00
|
|
|
long ReadBits(uint32_t NumBits, bool ExtendSignBit = true);
|
2018-12-08 23:44:41 -07:00
|
|
|
bool ReadBit();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void ReplenishPool();
|
|
|
|
|
};
|
|
|
|
|
|
2026-01-16 22:45:06 -05:00
|
|
|
#endif // AXIO_CBITSTREAMINWRAPPER_H
|