gwnavgeneration/common/generatormemoryheap.h Source File

generatormemoryheap.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 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 #ifndef GwNavGen_GeneratorMemoryHeap_H
9 #define GwNavGen_GeneratorMemoryHeap_H
10 
11 
14 
15 
16 namespace Kaim
17 {
18 
19 class GeneratorSysAlloc;
20 class ITlsAlloc;
21 
22 
23 class GeneratorMemoryHeap : public MemoryHeap
24 {
25 public:
26  enum HeapType { HeapType_System, HeapType_Tls, HeapType_Magic };
27  static bool InitMemorySystem(GeneratorSysAlloc* sysAlloc, GeneratorSysAlloc::AllocType allocType); // called by GeneratorSysAlloc::initHeapEngine()
28  static void CleanUpMemorySystem(); // called by GeneratorSysAlloc::shutdownHeapEngine()
29  static bool InitTlsAlloc(ITlsAlloc* tlsAlloc); // called by GeneratorMemory::InitTlsAlloc() - called by Generator::Generate()
30  static void ClearTlsAlloc();
31 
32 public:
33  GeneratorMemoryHeap(HeapType heapType) : m_heapType(heapType) {}
34 
35  // SimpleMemoryHeap interface implemented in GeneratorMemoryHeap derivations
36  virtual void* Alloc(UPInt size, const AllocInfo* info = 0);
37  virtual void* Alloc(UPInt size, UPInt align, const AllocInfo* info = 0);
38  virtual void* Realloc(void* oldPtr, UPInt newSize);
39  virtual void* ReallocAutoHeap(void* oldPtr, UPInt newSize);
40  virtual void Free(void* ptr);
41  virtual void* AllocSysDirect(UPInt size);
42  virtual void FreeSysDirect(void* ptr, UPInt size);
43  virtual void* AllocAutoHeap(const void* thisPtr, UPInt size, UPInt align, const AllocInfo* info = 0);
44  virtual void* AllocAutoHeap(const void* thisPtr, UPInt size, const AllocInfo* info = 0);
45  virtual MemoryHeap* GetAllocHeap(const void* thisPtr);
46 
47  // GeneratorMemoryHeap specific interface
48  virtual void* InternalAlloc(UPInt size, const AllocInfo* info) = 0;
49  virtual void* InternalRealloc(void* oldPtr, UPInt newSize) = 0;
50  virtual void InternalFree(void* ptr) = 0;
51 
52 public: // SimpleMemoryHeap interface with empty/trivial implementations
53  virtual void CreateArena(UPInt /*arena*/, SysAllocPaged* /*sysAlloc*/) {}
54  virtual void DestroyArena(UPInt /*arena*/) {}
55  virtual bool ArenaIsEmpty(UPInt /*arena*/) { return true; }
56  virtual MemoryHeap* CreateHeap(const char* name, const HeapDesc& desc) { KY_UNUSED2(name, desc); return this; }
57  virtual void SetLimitHandler(LimitHandler* /*handler*/) {}
58  virtual void SetLimit(UPInt /*newLimit*/) {}
59  virtual void AddRef() {}
60  virtual void Release() {}
61  virtual UPInt GetUsableSize(const void* ptr) { KY_UNUSED(ptr); return 0; }
62  virtual bool GetStats(StatBag* /*bag*/) { return false; }
63  virtual UPInt GetFootprint() const { return 0; }
64  virtual UPInt GetTotalFootprint() const { return 0; }
65  virtual UPInt GetUsedSpace() const { return 0; }
66  virtual UPInt GetTotalUsedSpace() const { return 0; }
67  virtual void GetRootStats(RootStats* /*stats*/) {}
68  virtual void VisitMem(Heap::MemVisitor* /*visitor*/, unsigned /*flags*/) {}
69  virtual void VisitRootSegments(Heap::SegVisitor* /*visitor*/) {}
70  virtual void VisitHeapSegments(Heap::SegVisitor* /*visitor*/) const {}
71  virtual void SetTracer(HeapTracer* /*tracer*/) {}
72 
73 protected: // SimpleMemoryHeap interface empty implementations
74  virtual void destroyItself() {}
75  virtual void ultimateCheck() {}
76  virtual void releaseCachedMem() {}
77  virtual bool dumpMemoryLeaks() { return false; }
78  virtual void checkIntegrity() const {}
79  virtual void getUserDebugStats(RootStats* /*stats*/) const {}
80 
81 protected:
82  HeapType m_heapType;
83 };
84 
85 }
86 
87 #endif
Definition: gamekitcrowddispersion.h:20