1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef TRACKING_MEM_RES_H 10 #define TRACKING_MEM_RES_H 11 12 #include <cstddef> 13 #include <memory_resource> 14 15 class TrackingMemRes : public std::pmr::memory_resource { 16 public: TrackingMemRes(std::size_t * last_size,size_t * last_alignment)17 TrackingMemRes(std::size_t* last_size, size_t* last_alignment) 18 : last_size_(last_size), last_alignment_(last_alignment) {} 19 20 private: 21 std::size_t* last_size_; 22 std::size_t* last_alignment_; do_allocate(std::size_t size,size_t alignment)23 void* do_allocate(std::size_t size, size_t alignment) override { 24 *last_size_ = size; 25 *last_alignment_ = alignment; 26 27 return std::pmr::new_delete_resource()->allocate(size, alignment); 28 } 29 do_deallocate(void * ptr,std::size_t size,size_t alignment)30 void do_deallocate(void* ptr, std::size_t size, size_t alignment) override { 31 *last_size_ = size; 32 *last_alignment_ = alignment; 33 std::pmr::new_delete_resource()->deallocate(ptr, size, alignment); 34 } 35 do_is_equal(const memory_resource & ptr)36 bool do_is_equal(const memory_resource& ptr) const noexcept override { return &ptr == this; } 37 }; 38 39 #endif // TRACKING_MEM_RES_H 40