1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Use some more loops in WDLEntry::init

And remove a lot of code.
This commit is contained in:
Marco Costalba 2016-04-28 15:48:12 +02:00
parent bfa2d923a7
commit a0d7801405

View file

@ -862,11 +862,12 @@ uint32_t ReadUint32(uint8_t* d)
return d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24);
}
PairsData* setup_pairs(uint8_t *data, uint64_t tb_size, uint64_t *size, unsigned char **next, uint8_t *flags, int wdl)
PairsData* setup_pairs(uint8_t *data, uint64_t tb_size, uint64_t *size, unsigned char **next, int wdl, uint8_t* flags = nullptr)
{
int i;
*flags = data[0];
if (flags)
*flags = data[0];
if (data[0] & 0x80) {
PairsData* d = new PairsData();
@ -929,7 +930,6 @@ bool WDLEntry::init(const std::string& fname)
uint8_t* next;
uint64_t tb_size[8];
uint64_t size[8 * 3];
uint8_t flags;
uint8_t* data = TBFile(fname).map(&baseAddress, &mapping, WDL_MAGIC);
if (!data)
@ -958,38 +958,25 @@ bool WDLEntry::init(const std::string& fname)
data += (uintptr_t)data & 1;
piece[0].precomp = setup_pairs(data, tb_size[0], &size[0], &next, &flags, 1);
data = next;
if (split) {
piece[1].precomp = setup_pairs(data, tb_size[1], &size[3], &next, &flags, 1);
for (int k = 0; k <= split; k++) {
piece[k].precomp = setup_pairs(data, tb_size[k], &size[3*k], &next, 1);
data = next;
} else
piece[1].precomp = nullptr;
piece[0].precomp->indextable = (char*)data;
data += size[0];
if (split) {
piece[1].precomp->indextable = (char*)data;
data += size[3];
}
piece[0].precomp->sizetable = (uint16_t*)data;
data += size[1];
if (split) {
piece[1].precomp->sizetable = (uint16_t*)data;
data += size[4];
for (int k = 0; k <= split; k++) {
piece[k].precomp->indextable = (char*)data;
data += size[3 * k];
}
data = (uint8_t*)(((uintptr_t)data + 0x3F) & ~0x3F);
piece[0].precomp->data = data;
data += size[2];
for (int k = 0; k <= split; k++) {
piece[k].precomp->sizetable = (uint16_t*)data;
data += size[3 * k + 1];
}
if (split) {
for (int k = 0; k <= split; k++) {
data = (uint8_t*)(((uintptr_t)data + 0x3F) & ~0x3F);
piece[1].precomp->data = data;
piece[k].precomp->data = data;
data += size[2];
}
} else {
bool p = (pawn.pawns[1] > 0);
@ -1017,48 +1004,30 @@ bool WDLEntry::init(const std::string& fname)
data += (uintptr_t)data & 1;
for (File f = FILE_A; f <= maxFile; ++f) {
pawn.file[0][f].precomp = setup_pairs(data, tb_size[2 * f], &size[6 * f], &next, &flags, 1);
data = next;
if (split) {
pawn.file[1][f].precomp = setup_pairs(data, tb_size[2 * f + 1], &size[6 * f + 3], &next, &flags, 1);
for (File f = FILE_A; f <= maxFile; ++f)
for (int k = 0; k <= split; k++) {
pawn.file[k][f].precomp = setup_pairs(data, tb_size[2 * f + k], &size[6 * f + 3 * k], &next, 1);
data = next;
} else
pawn.file[1][f].precomp = nullptr;
}
for (File f = FILE_A; f <= maxFile; ++f) {
pawn.file[0][f].precomp->indextable = (char*)data;
data += size[6 * f];
if (split) {
pawn.file[1][f].precomp->indextable = (char*)data;
data += size[6 * f + 3];
}
}
for (File f = FILE_A; f <= maxFile; ++f) {
pawn.file[0][f].precomp->sizetable = (uint16_t*)data;
data += size[6 * f + 1];
if (split) {
pawn.file[1][f].precomp->sizetable = (uint16_t*)data;
data += size[6 * f + 4];
for (File f = FILE_A; f <= maxFile; ++f)
for (int k = 0; k <= split; k++) {
pawn.file[k][f].precomp->indextable = (char*)data;
data += size[6 * f + 3 * k];
}
}
for (File f = FILE_A; f <= maxFile; ++f) {
data = (uint8_t*)(((uintptr_t)data + 0x3F) & ~0x3F);
pawn.file[0][f].precomp->data = data;
data += size[6 * f + 2];
for (File f = FILE_A; f <= maxFile; ++f)
for (int k = 0; k <= split; k++) {
pawn.file[k][f].precomp->sizetable = (uint16_t*)data;
data += size[6 * f + 1 + 3 * k];
}
if (split) {
for (File f = FILE_A; f <= maxFile; ++f)
for (int k = 0; k <= split; k++) {
data = (uint8_t*)(((uintptr_t)data + 0x3F) & ~0x3F);
pawn.file[1][f].precomp->data = data;
data += size[6 * f + 5];
pawn.file[k][f].precomp->data = data;
data += size[6 * f + 2 + 3 * k];
}
}
}
return true;
@ -1092,7 +1061,7 @@ bool DTZEntry::init(const std::string& fname)
data += (uintptr_t)data & 1;
piece.precomp = setup_pairs(data, tb_size[0], &size[0], &next, &(piece.flags), 0);
piece.precomp = setup_pairs(data, tb_size[0], &size[0], &next, 0, &(piece.flags));
data = next;
piece.map = data;
@ -1140,7 +1109,7 @@ bool DTZEntry::init(const std::string& fname)
data += (uintptr_t)data & 1;
for (File f = FILE_A; f <= maxFile; ++f) {
pawn.file[f].precomp = setup_pairs(data, tb_size[f], &size[3 * f], &next, &(pawn.file[f].flags), 0);
pawn.file[f].precomp = setup_pairs(data, tb_size[f], &size[3 * f], &next, 0, &(pawn.file[f].flags));
data = next;
}