Files
banjo-kazooie/src/core2/sla.c
2022-07-15 17:09:41 -05:00

71 lines
1.4 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
// Static Length Array
/* .code */
void array_clear(SLA *this){
int i;
s32 ptr = (s32)(this + 1);
for(i = 1; i < this->elem_cnt; i++){
*(s16 *)ptr = i;
ptr += this->elem_size;
}
*(s16 *)ptr = 0;
}
void *array_at(SLA *this, s32 indx){
return (void *)((s32)(this + 1) + indx*this->elem_size);
}
s32 array_size(SLA *this){
return this->elem_cnt;
}
void *array_begin(SLA *this){
return (void*)(this + 1);
}
#pragma GLOBAL_ASM("asm/nonmatchings/core2/sla/func_802EDAA4.s")
#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core2/sla/func_802EDC18.s")
#else
int func_802EDC18(SLA *this, s32 arg1){
s32 tmp_v0 = this->unk4;
s16 *v1;
s32 offset;
for(v1 = (s16*)tmp_v0; *v1; ){
if(*v1 == arg1)
return 0;
v1 = (s16*)(tmp_v0 + ((s32)*v1*this->elem_size));
}
return 1;
}
#endif
void array_free(SLA *this){
free(this);
}
SLA *array_new(s32 size, s32 cnt){
SLA *this;
cnt++;
this = (SLA *) malloc(size*cnt + sizeof(SLA));
this->elem_size = size;
this->elem_cnt = cnt;
array_clear(this);
return this;
}
void func_802EDCDC(SLA *this, s32 indx){
void* *ptr_n = ((s32)(this + 1) + indx*this->elem_size);
*(s16 *)ptr_n = *(s16 *)(this +1);
*(s16 *)(this +1) = indx;
}
SLA *array_defrag(SLA *this){
return defrag(this);
}