#pragma once
#include <cstddef>
#include <memory_resource>
#include <new>
#include <version>
namespace ddwaf::memory {
using memory_resource = std::pmr::memory_resource;
using monotonic_buffer_resource = std::pmr::monotonic_buffer_resource;
using unsynchronized_pool_resource = std::pmr::unsynchronized_pool_resource;
using synchronized_pool_resource = std::pmr::synchronized_pool_resource;
const auto get_default_resource = std::pmr::get_default_resource;
const auto set_default_resource = std::pmr::set_default_resource;
class null_memory_resource final : public memory_resource {
void *do_allocate(size_t , size_t ) override { throw std::bad_alloc(); }
void do_deallocate(void * , size_t , size_t ) noexcept override {}
[[nodiscard]] bool do_is_equal(const memory_resource &other) const noexcept override
{
return this == &other;
}
};
inline memory_resource *get_default_null_resource()
{
static null_memory_resource resource;
return &resource;
}
}