Match COutputStream::FlushShiftRegister, start DoFlush/WriteBits

Former-commit-id: 9510f70f9d
This commit is contained in:
2022-10-11 20:18:01 -07:00
parent 49a74b70e9
commit 637de45b40
11 changed files with 119 additions and 91 deletions

View File

@@ -18,7 +18,7 @@ public:
COutputStream(int len);
virtual ~COutputStream();
virtual void Write(const void* ptr, u32 len);
void WriteBits(int val, int bitCount);
void WriteBits(uint val, uint bitCount);
void FlushShiftRegister();
void Put(const void* ptr, size_t len) {
@@ -40,22 +40,22 @@ public:
void WriteChar(u8 c) {
FlushShiftRegister();
if (mBufLen <= mPosition) {
if (mBufLen <= mUnwrittenLen) {
DoFlush();
}
++mNumWrites;
*(reinterpret_cast< u8* >(mBufPtr) + mPosition) = c;
++mPosition;
*(reinterpret_cast< u8* >(mBufPtr) + mUnwrittenLen) = c;
++mUnwrittenLen;
}
private:
uint mPosition;
uint mUnwrittenLen;
uint mBufLen;
void* mBufPtr;
uint mNumWrites;
uint mShiftRegister;
uint mShiftRegisterOffset;
volatile uint mShiftRegisterOffset;
uchar mScratch[96];
};