16#include "pw_allocator/capability.h"
17#include "pw_allocator/layout.h"
18#include "pw_allocator/unique_ptr.h"
19#include "pw_result/result.h"
20#include "pw_status/status.h"
21#include "pw_status/status_with_size.h"
29 using Capability = allocator::Capability;
34 const Capabilities& capabilities()
const {
return capabilities_; }
38 return capabilities_.has(capability);
58 DoDeallocate(ptr, layout);
70 if (!capabilities_.has(Capability::kSkipsDestroy)) {
84 auto result = DoGetInfo(InfoType::kCapacity,
nullptr);
85 return StatusWithSize(result.status(),
Layout::Unwrap(result).size());
105 : capabilities_(capabilities) {}
110 template <
typename T>
143 enum class InfoType {
202 Result<Layout> GetInfo(InfoType info_type,
const void* ptr)
const {
203 return DoGetInfo(info_type, ptr);
211 static Result<Layout> GetInfo(
const Deallocator& deallocator,
214 return deallocator.DoGetInfo(info_type, ptr);
219 Result<Layout> GetRequestedLayout(
const void* ptr)
const {
220 return DoGetInfo(InfoType::kRequestedLayoutOf, ptr);
225 static Result<Layout> GetRequestedLayout(
const Deallocator& deallocator,
227 return deallocator.GetRequestedLayout(ptr);
232 Result<Layout> GetUsableLayout(
const void* ptr)
const {
233 return DoGetInfo(InfoType::kUsableLayoutOf, ptr);
238 static Result<Layout> GetUsableLayout(
const Deallocator& deallocator,
240 return deallocator.GetUsableLayout(ptr);
245 Result<Layout> GetAllocatedLayout(
const void* ptr)
const {
246 return DoGetInfo(InfoType::kAllocatedLayoutOf, ptr);
251 static Result<Layout> GetAllocatedLayout(
const Deallocator& deallocator,
253 return deallocator.GetAllocatedLayout(ptr);
258 bool Recognizes(
const void* ptr)
const {
259 return DoGetInfo(InfoType::kRecognizes, ptr).ok();
264 static bool Recognizes(
const Deallocator& deallocator,
const void* ptr) {
265 return deallocator.Recognizes(ptr);
272 virtual void DoDeallocate(
void*) {
281 virtual void DoDeallocate(
void* ptr, Layout) { DoDeallocate(ptr); }
284 virtual Result<Layout> DoGetInfo(InfoType,
const void*)
const {
285 return Status::Unimplemented();
288 const Capabilities capabilities_;
Abstract interface for releasing memory.
Definition: deallocator.h:26
void Deallocate(void *ptr, Layout layout)
Definition: deallocator.h:56
bool HasCapability(Capability capability) const
Returns whether a given capabilityis enabled for this object.
Definition: deallocator.h:37
StatusWithSize GetCapacity() const
Definition: deallocator.h:83
UniquePtr< T > WrapUnique(T *ptr)
Definition: deallocator.h:111
void Deallocate(void *ptr)
Definition: deallocator.h:47
void Delete(T *ptr)
Definition: deallocator.h:69
bool IsEqual(const Deallocator &other) const
Definition: deallocator.h:98
constexpr Deallocator()=default
TODO(b/326509341): Remove when downstream consumers migrate.
Definition: unique_ptr.h:47
Definition: capability.h:64
static constexpr Layout Unwrap(const Result< Layout > &result)
Definition: layout.h:55
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27