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_alginment)17 TrackingMemRes(std::size_t* last_size, size_t* last_alginment) : last_size_(last_size), last_alginment_(last_alginment) {} 18 19 private: 20 std::size_t* last_size_; 21 std::size_t* last_alginment_; do_allocate(std::size_t size,size_t alignment)22 void* do_allocate(std::size_t size, size_t alignment) override { 23 *last_size_ = size; 24 *last_alginment_ = alignment; 25 26 return std::pmr::new_delete_resource()->allocate(size, alignment); 27 } 28 do_deallocate(void * ptr,std::size_t size,size_t alignment)29 void do_deallocate(void* ptr, std::size_t size, size_t alignment) override { 30 *last_size_ = size; 31 *last_alginment_ = alignment; 32 std::pmr::new_delete_resource()->deallocate(ptr, size, alignment); 33 } 34 do_is_equal(const memory_resource & ptr)35 bool do_is_equal(const memory_resource& ptr) const noexcept override { return &ptr == this; } 36 }; 37 38 #endif // TRACKING_MEM_RES_H 39