18#include "pw_assert/assert.h"
20namespace pw::allocator {
28enum Capability : uint32_t {
30 kImplementsGetRequestedLayout = 1 << 0,
31 kImplementsGetUsableLayout = 1 << 1,
32 kImplementsGetAllocatedLayout = 1 << 2,
33 kImplementsGetCapacity = 1 << 4,
34 kImplementsRecognizes = 1 << 5,
35 kSkipsDestroy = 1 << 6,
67 constexpr Capabilities(uint32_t capabilities) : capabilities_(capabilities) {}
69 constexpr bool has(Capability capability)
const {
70 return (capabilities_ & capability) == capability;
73 constexpr uint32_t get()
const {
return capabilities_; }
76 const uint32_t capabilities_;
81 return lhs.get() == rhs.get();
84inline constexpr bool operator!=(
const Capabilities& lhs,
85 const Capabilities& rhs) {
86 return lhs.get() != rhs.get();
89inline constexpr Capabilities operator|(
const Capabilities& lhs,
90 const Capabilities& rhs) {
91 return Capabilities(lhs.get() | rhs.get());
94inline constexpr Capabilities operator&(
const Capabilities& lhs,
95 const Capabilities& rhs) {
96 return Capabilities(lhs.get() & rhs.get());
99inline constexpr Capabilities operator^(
const Capabilities& lhs,
100 const Capabilities& rhs) {
101 return Capabilities(lhs.get() ^ rhs.get());
Definition: capability.h:64