• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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