#ifndef GRPC_SRC_CORE_LIB_RESOURCE_QUOTA_ARENA_H
#define GRPC_SRC_CORE_LIB_RESOURCE_QUOTA_ARENA_H
#include <grpc/support/port_platform.h>
#include <stddef.h>
#include <atomic>
#include <limits>
#include <memory>
#include <new>
#include <utility>
#include "absl/meta/type_traits.h"
#include "absl/utility/utility.h"
#include <grpc/event_engine/memory_allocator.h>
#include "src/core/lib/gpr/alloc.h"
#include "src/core/lib/gprpp/construct_destruct.h"
#include "src/core/lib/promise/context.h"
#include "src/core/lib/resource_quota/memory_quota.h"
namespace grpc_core {
namespace arena_detail {
struct PoolAndSize { … };
template <typename Void, size_t kIndex, size_t kObjectSize,
size_t... kBucketSize>
struct PoolIndexForSize;
PoolIndexForSize<absl::enable_if_t<kObjectSize <= kSmallestRemainingBucket>, kIndex, kObjectSize, kSmallestRemainingBucket, kBucketSizes...>;
PoolIndexForSize<absl::enable_if_t<(kObjectSize > kSmallestRemainingBucket)>, kIndex, kObjectSize, kSmallestRemainingBucket, kBucketSizes...>;
template <size_t kObjectSize, size_t... kBucketSizes>
constexpr size_t PoolFromObjectSize(
absl::integer_sequence<size_t, kBucketSizes...>) { … }
template <size_t kObjectSize, size_t... kBucketSizes>
constexpr size_t AllocationSizeFromObjectSize(
absl::integer_sequence<size_t, kBucketSizes...>) { … }
template <size_t kIndex, size_t... kBucketSizes>
struct ChoosePoolForAllocationSizeImpl;
ChoosePoolForAllocationSizeImpl<kIndex, kBucketSize, kBucketSizes...>;
ChoosePoolForAllocationSizeImpl<kIndex>;
template <size_t... kBucketSizes>
PoolAndSize ChoosePoolForAllocationSize(
size_t n, absl::integer_sequence<size_t, kBucketSizes...>) { … }
}
class Arena { … };
struct ScopedArenaDeleter { … };
ScopedArenaPtr;
inline ScopedArenaPtr MakeScopedArena(size_t initial_size,
MemoryAllocator* memory_allocator) { … }
template <>
struct ContextType<Arena> { … };
}
#endif