pmd-red/src/data_serializer.c
2025-06-10 22:27:32 +02:00

111 lines
2.0 KiB
C

#include "global.h"
#include "globaldata.h"
#include "data_serializer.h"
#include "memory.h"
#include "items.h"
// arm9.bin::02064998
void InitBitReader(DataSerializer *r0, u8 *buffer, s32 bufLen)
{
r0->stream = buffer;
r0->count = 0;
r0->unkC = 0;
r0->end = buffer + bufLen;
}
// arm9.bin::0206496C
void InitBitWriter(DataSerializer *r0, u8 *buffer, s32 bufLen)
{
r0->stream = buffer;
r0->count = 0;
r0->unkC = 0;
r0->end = buffer + bufLen;
MemoryClear8(buffer, bufLen);
}
// arm9.bin::02064968
void FinishBitSerializer(DataSerializer *seri)
{
}
// arm9.bin::020648D0
void WriteBits(DataSerializer *r0, void *src, s32 numBits)
{
s32 curBit;
u8 *curByte;
curBit = 0;
curByte = src;
while (numBits != 0) {
if ((*curByte >> curBit) & 1)
*r0->stream |= (1 << r0->count);
curBit++;
if (curBit == 8) {
curByte++;
curBit = 0;
}
r0->count++;
if (r0->count == 8) {
r0->stream++;
r0->count = 0;
}
r0->unkC++;
numBits--;
}
}
static UNUSED void sub_80948E4(DataSerializer *seri, void *src, s32 numBytes)
{
s32 iVar1;
u8 *curByte;
curByte = src;
while (numBytes != 0) {
iVar1 = (*curByte << seri->count);
*seri->stream |= iVar1;
seri->stream++;
*seri->stream |= iVar1 >> 8;
curByte++;
seri->unkC += 8;
numBytes--;
}
}
// arm9.bin::0206482C
void ReadBits(DataSerializer *r0, void *dst, s32 numBits)
{
s32 curBit;
u8 *curByte;
curBit = 0;
curByte = dst;
while (numBits != 0) {
if (curBit == 0)
*curByte = 0;
if ((*r0->stream >> r0->count) & 1)
*curByte |= (1 << curBit);
curBit++;
if (curBit == 8) {
curByte++;
curBit = 0;
}
r0->count++;
if (r0->count == 8) {
r0->stream++;
r0->count = 0;
}
r0->unkC++;
numBits--;
}
}