#include "dawn/common/SlabAllocator.h"
#include <algorithm>
#include <cstdlib>
#include <limits>
#include <new>
#include "dawn/common/AlignedAlloc.h"
#include "dawn/common/Assert.h"
#include "dawn/common/Math.h"
namespace dawn {
SlabAllocatorImpl::IndexLinkNode::IndexLinkNode(Index index, Index nextIndex)
: … { … }
SlabAllocatorImpl::Slab::Slab() = default;
SlabAllocatorImpl::Slab::Slab(char allocation[], IndexLinkNode* head)
: … { … }
SlabAllocatorImpl::Slab::Slab(Slab&& rhs) = default;
SlabAllocatorImpl::SentinelSlab::SentinelSlab() = default;
SlabAllocatorImpl::SentinelSlab::SentinelSlab(SentinelSlab&& rhs) = default;
SlabAllocatorImpl::SentinelSlab::~SentinelSlab() { … }
SlabAllocatorImpl::Index SlabAllocatorImpl::kInvalidIndex = …;
SlabAllocatorImpl::SlabAllocatorImpl(Index blocksPerSlab,
uint32_t objectSize,
uint32_t objectAlignment)
: … { … }
SlabAllocatorImpl::SlabAllocatorImpl(SlabAllocatorImpl&& rhs)
: … { … }
SlabAllocatorImpl::~SlabAllocatorImpl() = default;
SlabAllocatorImpl::IndexLinkNode* SlabAllocatorImpl::OffsetFrom(
IndexLinkNode* node,
std::make_signed_t<Index> offset) const { … }
SlabAllocatorImpl::IndexLinkNode* SlabAllocatorImpl::NodeFromObject(void* object) const { … }
void* SlabAllocatorImpl::ObjectFromNode(IndexLinkNode* node) const { … }
bool SlabAllocatorImpl::IsNodeInSlab(Slab* slab, IndexLinkNode* node) const { … }
void SlabAllocatorImpl::PushFront(Slab* slab, IndexLinkNode* node) const { … }
SlabAllocatorImpl::IndexLinkNode* SlabAllocatorImpl::PopFront(Slab* slab) const { … }
void SlabAllocatorImpl::SentinelSlab::Prepend(SlabAllocatorImpl::Slab* slab) { … }
void SlabAllocatorImpl::Slab::Splice() { … }
void* SlabAllocatorImpl::Allocate() { … }
void SlabAllocatorImpl::Deallocate(void* ptr) { … }
void SlabAllocatorImpl::GetNewSlab() { … }
}