Slab
Slab* fCurrentSlab;
uint8 fInlineData[InlineDataSize - sizeof(Slab*)];
fCurrentSlab((Slab*)fInlineData)
fCurrentSlab->total = sizeof(fInlineData) - sizeof(Slab);
if (fCurrentSlab != (Slab*)fInlineData)
return fCurrentSlab == (Slab*)fInlineData
Slab* newSlab = (Slab*)malloc(SlabSize);
newSlab->total = SlabSize - sizeof(Slab);
Slab* previous = fCurrentSlab->previous;
Slab* previous;
RANGE_MARKER_FUNCTION_BEGIN(Slab)
RANGE_MARKER_FUNCTION_END(Slab)
RANGE_MARKER_FUNCTION_PROTOTYPES(Slab)
RANGE_MARKER_FUNCTION_ADDRESS_RANGE(Slab),
Slab *slab = fPartialSlabs.Head();
Slab *slab = object.first;
BaseCache::Slab *
BaseCache::ConstructSlab(Slab *slab, void *pages, size_t byteCount,
BaseCache::DestructSlab(Slab *slab)
Slab *newSlab = fStrategy.NewSlab(flags);
struct Slab : BaseCache::Slab {
BaseCache::Slab *_ConstructSlab(Slab *slab, void *pages, size_t tailSpace,
void _DestructSlab(BaseCache::Slab *slab)
Backend::FreePages(fParent, ((Slab *)slab)->id);
typedef typename BaseCacheStrategy<Backend>::Slab Slab;
Slab *slab = _SlabInPages(LowerBoundary(object, _SlabSize()));
BaseCache::Slab *NewSlab(uint32_t flags)
pages, sizeof(Slab), _Linkage, this);
void ReturnSlab(BaseCache::Slab *slab)
return BaseCacheStrategy<Backend>::SlabSize(sizeof(Slab));
Slab *_SlabInPages(const void *pages) const
return (Slab *)(((uint8_t *)pages) + _SlabSize() - sizeof(Slab));
BaseCache::Slab *slab;
typedef typename BaseCacheStrategy<Backend>::Slab Slab;
BaseCache::Slab *NewSlab(uint32_t flags)
Slab *slab = fSlabCache.Alloc(flags);
void ReturnSlab(BaseCache::Slab *slab)
fSlabCache.Free((Slab *)slab);
status_t _PrepareSlab(BaseCache *parent, Slab *slab, void *pages,
TypedCache<Slab, Backend> fSlabCache;
struct Slab : DoublyLinkedListLinkImpl<Slab> {
Slab *ConstructSlab(Slab *slab, void *pages, size_t byteCount,
void DestructSlab(Slab *slab);
typedef DoublyLinkedList<Slab> SlabList;