16constexpr size_t kMinBytes =
alignof(max_align_t);
32 if (growthFactor > 1.0 && capacity > 0) {
33 capacity = this->growthFactorCapacity(capacity, growthFactor);
39size_t SkContainerAllocator::roundUpCapacity(int64_t capacity)
const {
43 if (capacity < fMaxCapacity - kCapacityMultiple) {
44 return SkAlignTo(capacity, kCapacityMultiple);
50size_t SkContainerAllocator::growthFactorCapacity(
int capacity,
double growthFactor)
const {
55 const int64_t capacityGrowth =
static_cast<int64_t
>(capacity * growthFactor);
58 return this->roundUpCapacity(capacityGrowth);
64 const size_t adjustedSize = std::max(size, kMinBytes);
66 return complete_size(ptr, adjustedSize);
74 const size_t adjustedSize = std::max(size, kMinBytes);
76 return complete_size(ptr, adjustedSize);
80 SK_ABORT(
"Requested capacity is too large.");
static constexpr size_t SkAlignTo(size_t x, size_t alignment)
#define SK_ABORT(message,...)
#define SkASSERT_RELEASE(cond)
SkSpan< std::byte > sk_allocate_throw(size_t size)
void sk_report_container_overflow_and_die()
SkSpan< std::byte > sk_allocate_canfail(size_t size)
SkSpan< std::byte > sk_allocate_throw(size_t size)
static void * sk_malloc_canfail(size_t size)
SK_API size_t sk_malloc_size(void *addr, size_t size)
static void * sk_malloc_throw(size_t size)
constexpr size_t SkToSizeT(S x)
SkSpan< std::byte > allocate(int capacity, double growthFactor=1.0)