CommonLibVR
GSysAllocPaged.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/G/GSysAllocBase.h"
4 
5 namespace RE
6 {
7  class GHeapMemVisitor;
8  class GHeapSegVisitor;
9 
11  {
12  public:
13  static constexpr auto RTTI{ RTTI_GSysAllocPaged };
14 
15  struct Info
16  {
17  public:
18  // members
19  std::size_t minAlign; // 00
20  std::size_t maxAlign; // 08
21  std::size_t granularity; // 10
22  std::size_t sysDirectThreshold; // 18
23  std::size_t maxHeapGranularity; // 20
24  bool hasRealloc; // 28
25  };
26  static_assert(sizeof(Info) == 0x30);
27 
28  // override (GSysAllocBase)
29  bool InitHeapEngine(const void* a_heapDesc) override // 01
30  {
31  using func_t = decltype(&GSysAllocPaged::InitHeapEngine);
32  static REL::Relocation<func_t> func{ RELOCATION_ID(82462, 84557) };
33  return func(this, a_heapDesc);
34  }
35 
36  void ShutdownHeapEngine() override // 02
37  {
38  using func_t = decltype(&GSysAllocPaged::ShutdownHeapEngine);
39  static REL::Relocation<func_t> func{ RELOCATION_ID(82464, 84559) };
40  return func(this);
41  }
42 
43  // add
44  virtual void GetInfo(Info* a_info) const = 0; // 03
45  virtual void* Alloc(std::size_t a_size, std::size_t a_align) = 0; // 04
46  virtual bool Free(void* a_ptr, std::size_t a_size, std::size_t a_align) = 0; // 05
47  virtual bool ReallocInPlace(
48  [[maybe_unused]] void* a_oldPtr,
49  [[maybe_unused]] std::size_t a_oldSize,
50  [[maybe_unused]] std::size_t a_newSize,
51  [[maybe_unused]] std::size_t a_align) { return false; } // 06
52  virtual void* AllocSysDirect(
53  [[maybe_unused]] std::size_t a_size,
54  [[maybe_unused]] std::size_t a_alignment,
55  [[maybe_unused]] std::size_t* a_actualSize,
56  [[maybe_unused]] std::size_t* a_actualAlign) { return nullptr; } // 07
57  virtual bool FreeSysDirect(
58  [[maybe_unused]] void* a_ptr,
59  [[maybe_unused]] std::size_t a_size,
60  [[maybe_unused]] std::size_t a_alignment) { return false; } // 08
61  [[nodiscard]] virtual std::size_t GetBase() const { return 0; } // 09
62  [[nodiscard]] virtual std::size_t GetSize() const { return 0; } // 0A
63  [[nodiscard]] virtual std::size_t GetFootprint() const { return 0; } // 0B
64  [[nodiscard]] virtual std::size_t GetUsedSpace() const { return 0; } // 0C
65  virtual void VisitMem([[maybe_unused]] GHeapMemVisitor* a_visitor) const { return; } // 0D
66  virtual void VisitSegments(
67  [[maybe_unused]] GHeapSegVisitor* a_visitor,
68  [[maybe_unused]] std::size_t a_catSeg,
69  [[maybe_unused]] std::size_t a_catUnused) const { return; } // 0E
70  private:
71  KEEP_FOR_RE()
72  };
73  static_assert(sizeof(GSysAllocPaged) == 0x8);
74 }
#define KEEP_FOR_RE()
Definition: PCH.h:713
#define RELOCATION_ID(SE, AE)
Definition: PCH.h:702
Definition: Relocation.h:210
Definition: GSysAllocBase.h:6
Definition: GSysAllocPaged.h:11
bool InitHeapEngine(const void *a_heapDesc) override
Definition: GSysAllocPaged.h:29
virtual bool FreeSysDirect([[maybe_unused]] void *a_ptr, [[maybe_unused]] std::size_t a_size, [[maybe_unused]] std::size_t a_alignment)
Definition: GSysAllocPaged.h:57
virtual std::size_t GetUsedSpace() const
Definition: GSysAllocPaged.h:64
virtual bool Free(void *a_ptr, std::size_t a_size, std::size_t a_align)=0
void ShutdownHeapEngine() override
Definition: GSysAllocPaged.h:36
virtual std::size_t GetFootprint() const
Definition: GSysAllocPaged.h:63
virtual bool ReallocInPlace([[maybe_unused]] void *a_oldPtr, [[maybe_unused]] std::size_t a_oldSize, [[maybe_unused]] std::size_t a_newSize, [[maybe_unused]] std::size_t a_align)
Definition: GSysAllocPaged.h:47
virtual std::size_t GetSize() const
Definition: GSysAllocPaged.h:62
virtual std::size_t GetBase() const
Definition: GSysAllocPaged.h:61
virtual void * Alloc(std::size_t a_size, std::size_t a_align)=0
virtual void VisitMem([[maybe_unused]] GHeapMemVisitor *a_visitor) const
Definition: GSysAllocPaged.h:65
virtual void * AllocSysDirect([[maybe_unused]] std::size_t a_size, [[maybe_unused]] std::size_t a_alignment, [[maybe_unused]] std::size_t *a_actualSize, [[maybe_unused]] std::size_t *a_actualAlign)
Definition: GSysAllocPaged.h:52
virtual void VisitSegments([[maybe_unused]] GHeapSegVisitor *a_visitor, [[maybe_unused]] std::size_t a_catSeg, [[maybe_unused]] std::size_t a_catUnused) const
Definition: GSysAllocPaged.h:66
virtual void GetInfo(Info *a_info) const =0
static constexpr auto RTTI
Definition: GSysAllocPaged.h:13
Definition: AbsorbEffect.h:6
constexpr REL::ID RTTI_GSysAllocPaged(static_cast< std::uint64_t >(691050))
Definition: GSysAllocPaged.h:16
std::size_t granularity
Definition: GSysAllocPaged.h:21
std::size_t maxAlign
Definition: GSysAllocPaged.h:20
bool hasRealloc
Definition: GSysAllocPaged.h:24
std::size_t minAlign
Definition: GSysAllocPaged.h:19
std::size_t sysDirectThreshold
Definition: GSysAllocPaged.h:22
std::size_t maxHeapGranularity
Definition: GSysAllocPaged.h:23