public static UInt32 GetFreeMem(HeapBlock* aBlock) { return aBlock->size - (aBlock->used * aBlock->bsize); }
public static UInt32 GetUsedMem(HeapBlock* aBlock) { return (aBlock->used * aBlock->bsize); }
public static int InitBlock(HeapBlock* b, UInt32 size, UInt32 bsize) { UInt32 bcnt; b->size = size - (UInt32)sizeof(HeapBlock); b->bsize = bsize; bcnt = size / bsize; byte* bm = (byte*)&b[1]; /* clear bitmap */ for (uint x = 0; x < bcnt; ++x) { bm[x] = 0; } /* reserve room for bitmap */ bcnt = (bcnt / bsize) * bsize < bcnt ? bcnt / bsize + 1 : bcnt / bsize; for (uint x = 0; x < bcnt; ++x) { bm[x] = 5; } b->lfb = bcnt - 1; b->used = bcnt; b->next = null; return 1; }
public static int AddBlock(HeapBlock* b) { EnterCritical("AddBlock"); b->next = fblock; fblock = b; ExitCritical(); return 1; }
public static void Load(HeapBlock* heapPtr, SpinLock heapLock) { fblock = heapPtr; AccessLock = heapLock; AccessLockInitialised = (AccessLock != null); }