Home | History | Annotate | Download | only in core

Lines Matching refs:allocator

31     struct SlabAllocator *allocator;
42 allocator = (struct SlabAllocator*)heapAlloc(sizeof(struct SlabAllocator) + bitsetSz + dataSz);
43 if (allocator) {
44 allocator->itemSz = itemSz;
45 allocator->dataChunks = ((uint8_t*)allocator->bitset) + bitsetSz;
46 atomicBitsetInit(allocator->bitset, numItems);
49 return allocator;
52 void slabAllocatorDestroy(struct SlabAllocator *allocator)
54 heapFree(allocator);
57 void* slabAllocatorAlloc(struct SlabAllocator *allocator)
59 int32_t itemIdx = atomicBitsetFindClearAndSet(allocator->bitset);
64 return allocator->dataChunks + allocator->itemSz * itemIdx;
67 void slabAllocatorFree(struct SlabAllocator *allocator, void* ptrP)
70 uint32_t itemOffset = ptr - allocator->dataChunks;
71 uint32_t itemIdx = itemOffset / allocator->itemSz;
74 if ((itemOffset % allocator->itemSz) || (itemIdx >= atomicBitsetGetNumBits(allocator->bitset)) || !atomicBitsetGetBit(allocator->bitset, itemIdx))
77 atomicBitsetClearBit(allocator->bitset, itemIdx);
80 void* slabAllocatorGetNth(struct SlabAllocator *allocator, uint32_t idx)
82 if (!atomicBitsetGetBit(allocator->bitset, idx))
85 return allocator->dataChunks + allocator->itemSz * idx;
88 uint32_t slabAllocatorGetIndex(struct SlabAllocator *allocator, void* ptrP)
91 uint32_t itemOffset = ptr - allocator->dataChunks;
92 uint32_t itemIdx = itemOffset / allocator->itemSz;
94 if ((itemOffset % allocator->itemSz) || (itemIdx >= atomicBitsetGetNumBits(allocator->bitset)) || !atomicBitsetGetBit(allocator->bitset, itemIdx))
100 uint32_t slabAllocatorGetNumItems(struct SlabAllocator *allocator)
102 return atomicBitsetGetNumBits(allocator->bitset);