71 lines
1.4 KiB
C
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);
|
|
}
|