Files
ac-decomp/src/TwoHeadArena.c
T
2023-12-09 13:34:31 +01:00

103 lines
2.1 KiB
C

#include "TwoHeadArena.h"
#include "libultra/libultra.h"
#include "types.h"
/* @fabricated */
/*
extern void* THA_getHeadPtr(TwoHeadArena* this) {
return this->head_p;
}
*/
/* @fabricated */
/*
extern void THA_setHeadPtr(TwoHeadArena* this, void* p) {
this->head_p = (char*)p;
}
*/
/* @fabricated */
/*
extern void* THA_getTailPtr(TwoHeadArena* this) {
return this->tail_p;
}
*/
/* @fabricated */
/*
extern void* THA_nextPtrN(TwoHeadArena* this, size_t n) {
char* next_p = this->head_p;
this->head_p += n;
return (void*)next_p;
}
*/
/* @fabricated */
/*
extern void* THA_nextPtr1(TwoHeadArena* this) {
return THA_nextPtrN(this, 1);
}
*/
/* @fabricated */
/*
extern void* THA_alloc(TwoHeadArena* this, size_t siz) {
u32 mask;
if (siz == 8) {
mask = ~(8 - 1);
} else if (siz == 2 || siz == 6 || siz == 10 || siz == 14) {
mask = ~(2 - 1);
} else if (siz > 15) {
mask = ~(16 - 1);
} else {
mask = ~0;
}
this->tail_p = (char*)((((u32)this->tail_p & mask) - siz) & mask);
return this->tail_p;
}
*/
extern void* THA_alloc16(TwoHeadArena* this, size_t siz) {
const int mask = ~(16 - 1);
this->tail_p = (char*)((((u32)this->tail_p & mask) - siz) & mask);
return this->tail_p;
}
extern void* THA_allocAlign(TwoHeadArena* this, size_t siz, int mask) {
this->tail_p = (char*)((((u32)this->tail_p & mask) - siz) & mask);
return this->tail_p;
}
extern int THA_getFreeBytesAlign(TwoHeadArena* this, int mask) {
return (int)this->tail_p - (mask & (int)(this->head_p + ~mask));
}
extern int THA_getFreeBytes16(TwoHeadArena* this) {
return THA_getFreeBytesAlign(this, -16);
}
extern int THA_getFreeBytes(TwoHeadArena* this) {
return THA_getFreeBytesAlign(this, -1);
}
extern int THA_isCrash(TwoHeadArena* this) {
return THA_getFreeBytes(this) < 0;
}
extern void THA_init(TwoHeadArena* this) {
this->head_p = this->buf_p;
this->tail_p = this->buf_p + this->size;
}
extern void THA_ct(TwoHeadArena* this, char* p, size_t n) {
this->buf_p = p;
this->size = n;
THA_init(this);
}
extern void THA_dt(TwoHeadArena* this) {
bzero(this, sizeof(TwoHeadArena));
}