Login
7 branches 0 tags
Benjamin Vincent Schulenburg Moved array code/definitions into the separate array.[ch] file 82ea821 4 years ago 14 Commits
nujel / lib / array.h
#pragma once
#include "nujel.h"

typedef struct {
	u32 *data;
	i32 length;
	u16 flags;
	u16 nextFree;
} lArray;

#define ARR_MAX (1<<12)
#define ARR_MASK ((ARR_MAX)-1)
extern uint   lArrayActive;
extern uint   lArrayMax;
extern lArray lArrayList[ARR_MAX];

#define lArrNull(val)   (((val->vCdr & ARR_MASK) == 0) || (lArrayList[val->vCdr & ARR_MASK].data == NULL))
#define lArr(val)       lArrayList[val->vCdr & ARR_MASK]
#define lArrLength(val) lArr(val).length
#define lArrData(val)   lArr(val).data

void lInitArray    ();
uint lArrayAlloc   ();
void lArrayFree    (uint v);

lVal *lnfArrLength (lClosure *c, lVal *v);
lVal *lnfArrRef    (lClosure *c, lVal *v);
lVal *lnfArrSet    (lClosure *c, lVal *v);
lVal *lnfArrNew    (lClosure *c, lVal *v);
lVal *lnfArr       (lClosure *c, lVal *v);

void lAddArrayFuncs(lClosure *c);