saving extra cb info in savegames
This commit is contained in:
58
src/bitstream.cpp
Normal file
58
src/bitstream.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include "bitstream.h"
|
||||
|
||||
// Returns 8 higher bits of s-bit integer x
|
||||
#define FIRST8(x, s) (((x) >> ((s) - 8)) & 0xFF)
|
||||
|
||||
void BitOStream::WriteBytes(uint32 value, int amount)
|
||||
{
|
||||
do {
|
||||
v = (v << 8) | FIRST8(value, amount << 3);
|
||||
f.push_back(FIRST8(v, c + 8));
|
||||
} while (--amount);
|
||||
}
|
||||
|
||||
void BitOStream::WriteBytes64(uint64 value, int amount)
|
||||
{
|
||||
do {
|
||||
v = (v << 8) | FIRST8(value, amount << 3);
|
||||
f.push_back(FIRST8(v, c + 8));
|
||||
} while (--amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reserves memory for encoded data. Use to avoid reallocation of vector.
|
||||
*/
|
||||
void BitOStream::Reserve(int bytes)
|
||||
{
|
||||
f.reserve(bytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns encoded data
|
||||
*/
|
||||
const u8vector &BitOStream::GetVector()
|
||||
{
|
||||
return f;
|
||||
}
|
||||
|
||||
/**
|
||||
* Size of encoded data in bytes
|
||||
*/
|
||||
uint BitOStream::GetByteSize() const
|
||||
{
|
||||
return f.size() + (c ? 1 : 0);
|
||||
}
|
||||
|
||||
BitIStreamUnexpectedEnd _bit_i_stream_unexpected_end;
|
||||
|
||||
uint32 BitIStream::ReadBytes(uint amount)
|
||||
{
|
||||
uint32 res = 0;
|
||||
while (amount--) {
|
||||
if (i >= f.size()) {
|
||||
throw _bit_i_stream_unexpected_end;
|
||||
}
|
||||
res = (res << 8) | f[i++];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
Reference in New Issue
Block a user