Green Sky
5c7231b7a3
git-subtree-dir: external/entt/entt git-subtree-split: fef921132cae7588213d0f9bcd2fb9c8ffd8b7fc
65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
#ifndef ENTT_COMMON_TRACKED_MEMORY_RESOURCE_HPP
|
|
#define ENTT_COMMON_TRACKED_MEMORY_RESOURCE_HPP
|
|
|
|
#ifdef ENTT_HAS_HEADER_VERSION
|
|
# include <version>
|
|
#
|
|
# if defined(__cpp_lib_memory_resource) && __cpp_lib_memory_resource >= 201603L
|
|
# define ENTT_HAS_TRACKED_MEMORY_RESOURCE
|
|
#
|
|
# include <cstddef>
|
|
# include <memory_resource>
|
|
# include <string>
|
|
|
|
namespace test {
|
|
|
|
class tracked_memory_resource: public std::pmr::memory_resource {
|
|
void *do_allocate(std::size_t bytes, std::size_t alignment) override {
|
|
++alloc_counter;
|
|
return std::pmr::get_default_resource()->allocate(bytes, alignment);
|
|
}
|
|
|
|
void do_deallocate(void *value, std::size_t bytes, std::size_t alignment) override {
|
|
++dealloc_counter;
|
|
std::pmr::get_default_resource()->deallocate(value, bytes, alignment);
|
|
}
|
|
|
|
bool do_is_equal(const std::pmr::memory_resource &other) const noexcept override {
|
|
return (this == &other);
|
|
}
|
|
|
|
public:
|
|
using string_type = std::pmr::string;
|
|
using size_type = std::size_t;
|
|
|
|
static constexpr const char *default_value = "a string long enough to force an allocation (hopefully)";
|
|
|
|
tracked_memory_resource()
|
|
: alloc_counter{},
|
|
dealloc_counter{} {}
|
|
|
|
size_type do_allocate_counter() const noexcept {
|
|
return alloc_counter;
|
|
}
|
|
|
|
size_type do_deallocate_counter() const noexcept {
|
|
return dealloc_counter;
|
|
}
|
|
|
|
void reset() noexcept {
|
|
alloc_counter = 0u;
|
|
dealloc_counter = 0u;
|
|
}
|
|
|
|
private:
|
|
size_type alloc_counter;
|
|
size_type dealloc_counter;
|
|
};
|
|
|
|
} // namespace test
|
|
|
|
# endif
|
|
#endif
|
|
|
|
#endif
|