gwnavgeneration/common/generatormemoryheap.h Source File

generatormemoryheap.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 
8 #pragma once
9 
10 
13 
14 
15 namespace Kaim
16 {
17 
18 class GeneratorSysAlloc;
19 class ITlsAlloc;
20 
21 
22 class GeneratorMemoryHeap : public MemoryHeap
23 {
24 public:
25  enum HeapType { HeapType_System, HeapType_Tls, HeapType_Magic };
26  static bool InitMemorySystem(GeneratorSysAlloc* sysAlloc, GeneratorSysAlloc::AllocType allocType); // called by GeneratorSysAlloc::initHeapEngine()
27  static void CleanUpMemorySystem(); // called by GeneratorSysAlloc::shutdownHeapEngine()
28  static bool InitTlsAlloc(ITlsAlloc* tlsAlloc); // called by GeneratorMemory::InitTlsAlloc() - called by Generator::Generate()
29  static void ClearTlsAlloc();
30 
31 public:
32  GeneratorMemoryHeap(HeapType heapType) : m_heapType(heapType) {}
33 
34  // SimpleMemoryHeap interface implemented in GeneratorMemoryHeap derivations
35  virtual void* Alloc(UPInt size, const AllocInfo* info = 0);
36  virtual void* Alloc(UPInt size, UPInt align, const AllocInfo* info = 0);
37  virtual void* Realloc(void* oldPtr, UPInt newSize);
38  virtual void* ReallocAutoHeap(void* oldPtr, UPInt newSize);
39  virtual void Free(void* ptr);
40  virtual void* AllocSysDirect(UPInt size);
41  virtual void FreeSysDirect(void* ptr, UPInt size);
42  virtual void* AllocAutoHeap(const void* thisPtr, UPInt size, UPInt align, const AllocInfo* info = 0);
43  virtual void* AllocAutoHeap(const void* thisPtr, UPInt size, const AllocInfo* info = 0);
44  virtual MemoryHeap* GetAllocHeap(const void* thisPtr);
45 
46  // GeneratorMemoryHeap specific interface
47  virtual void* InternalAlloc(UPInt size, const AllocInfo* info) = 0;
48  virtual void* InternalRealloc(void* oldPtr, UPInt newSize) = 0;
49  virtual void InternalFree(void* ptr) = 0;
50 
51 public: // SimpleMemoryHeap interface with empty/trivial implementations
52  virtual void DestroyArena(UPInt /*arena*/) {}
53  virtual bool ArenaIsEmpty(UPInt /*arena*/) { return true; }
54  virtual MemoryHeap* CreateHeap(const char* name, const HeapDesc& desc) { KY_UNUSED2(name, desc); return this; }
55  virtual void SetLimitHandler(LimitHandler* /*handler*/) {}
56  virtual void SetLimit(UPInt /*newLimit*/) {}
57  virtual void AddRef() {}
58  virtual void Release() {}
59  virtual UPInt GetUsableSize(const void* ptr) { KY_UNUSED(ptr); return 0; }
60  virtual UPInt GetFootprint() const { return 0; }
61  virtual UPInt GetTotalFootprint() const { return 0; }
62  virtual UPInt GetUsedSpace() const { return 0; }
63  virtual UPInt GetTotalUsedSpace() const { return 0; }
64  virtual void GetRootStats(RootStats* /*stats*/) {}
65  virtual void VisitMem(Heap::MemVisitor* /*visitor*/, unsigned /*flags*/) {}
66  virtual void VisitRootSegments(Heap::SegVisitor* /*visitor*/) {}
67  virtual void VisitHeapSegments(Heap::SegVisitor* /*visitor*/) const {}
68  virtual void SetTracer(HeapTracer* /*tracer*/) {}
69 
70 protected: // SimpleMemoryHeap interface empty implementations
71  virtual void destroyItself() {}
72  virtual void ultimateCheck() {}
73  virtual void releaseCachedMem() {}
74  virtual bool dumpMemoryLeaks() { return false; }
75  virtual void checkIntegrity() const {}
76  virtual void getUserDebugStats(RootStats* /*stats*/) const {}
77 
78 protected:
79  HeapType m_heapType;
80 };
81 
82 }
83 
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17