Skip to content

Commit e538f29

Browse files
committed
Rewrite transpose_tiles to be in-place
1 parent 1aa3fb2 commit e538f29

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

tools/pkmncompress.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,18 @@ int read_bit(uint8_t *data) {
4444
}
4545

4646
void transpose_tiles(uint8_t *data, int width) {
47-
int size = width * width * 0x10;
48-
uint8_t *transposed = xmalloc(size);
47+
int size = width * width;
4948
for (int i = 0; i < size; i++) {
50-
int j = (i / 0x10) * width * 0x10;
51-
j = (j % size) + 0x10 * (j / size) + (i % 0x10);
52-
transposed[j] = data[i];
49+
int j = (i * width + i / width) % size;
50+
if (i < j) {
51+
uint8_t tmp[0x10];
52+
uint8_t *p = data + i * COUNTOF(tmp);
53+
uint8_t *q = data + j * COUNTOF(tmp);
54+
memcpy(tmp, p, COUNTOF(tmp));
55+
memcpy(p, q, COUNTOF(tmp));
56+
memcpy(q, tmp, COUNTOF(tmp));
57+
}
5358
}
54-
memcpy(data, transposed, size);
55-
free(transposed);
5659
}
5760

5861
void compress_plane(uint8_t *plane, int width) {

0 commit comments

Comments
 (0)