21 static const BufferIndex BufferIndex_Count = 13;
23 class AStarTraversalContext;
24 class PathRefinerContext;
25 class PathClamperContext;
26 class NavDataChangeIndexInGrid;
27 class SpatializedPointCollectorContext;
28 class ChannelArrayComputer;
29 class DynamicNavMeshContext;
30 class QueryDynamicOutput;
38 struct MyLimitHandler : public MemoryHeap::LimitHandler
40 virtual ~MyLimitHandler() {}
41 virtual bool OnExceedLimit(MemoryHeap* , UPInt ) {
return false; };
42 virtual void OnFreeSegment(MemoryHeap* , UPInt ) { };
47 WorkingBuffer() : m_memory(nullptr), m_memorySize(0), m_inUse(false) {}
56 WorkingMemory(
KyUInt32 memoryLimitSize = 4 * 1024 * 1024 ,
KyUInt32 granularityOfBufferResize = 5 * 1024);
60 void InitMemoryHeap(
KyUInt32 memoryLimitSize);
62 void SetNewLimit(
KyUInt32 memoryLimitSize);
64 void* AllocBiggerBuffer(BufferIndex bufferIdx,
KyUInt32 newMinByteSize = 0);
66 void ReleaseAllMemoryBuffer();
67 void ReleaseUnusedMemoryBuffer();
68 void ReleaseMemory(
void* memory) { KY_HEAP_FREE(m_memoryHeap, memory); }
70 void InitBuffersToNull();
72 BufferIndex TakeUsageOfFirstUnusedBufferIdx();
73 void ReleaseBuffer(BufferIndex bufferIdx);
75 void* GetBuffer(BufferIndex bufferIdx)
const;
76 KyUInt32 GetBufferSize(BufferIndex bufferIdx)
const;
78 KyUInt32 GetTotalAllocatedSize()
const;
81 AStarTraversalContext* GetOrCreateAStarTraversalContext();
82 PathRefinerContext* GetOrCreatePathRefinerContext();
83 PathClamperContext* GetOrCreatePathClamperContext();
84 NavDataChangeIndexInGrid* GetOrCreateNavDataChangeIndexInGrid();
85 ChannelArrayComputer* GetOrCreateChannelArrayComputer();
86 DynamicNavMeshContext* GetOrCreateDynamicNavMeshContext();
87 SpatializedPointCollectorContext* GetOrCreateSpatializedPointCollectorContext();
90 void CreateAllPathfinderContexts();
91 void CreateChannelArrayComputer();
92 void CreateDynamicNavMeshContext();
93 void CreateSpatializedPointCollectorContext();
96 MemoryHeap* m_memoryHeap;
97 MyLimitHandler m_myLimitHandler;
98 KyUInt32 m_granularityOfBufferResize;
99 WorkingBuffer m_workingBuffer[BufferIndex_Count];
102 AStarTraversalContext* m_astarContext;
103 PathRefinerContext* m_refinerContext;
104 PathClamperContext* m_clamperContext;
105 NavDataChangeIndexInGrid* m_navDataChangeIndexInGrid;
106 ChannelArrayComputer* m_channelArrayComputer;
108 SpatializedPointCollectorContext* m_collectorContext;
110 DynamicNavMeshContext* m_dynamicNavMeshContext;
112 Ptr<QueryDynamicOutput> m_queryDynamicOutput;
115 KY_INLINE
void WorkingMemory::ReleaseBuffer(BufferIndex bufferIdx)
117 KY_ASSERT(bufferIdx < BufferIndex_Count);
118 m_workingBuffer[bufferIdx].m_inUse =
false;
120 KY_INLINE
void* WorkingMemory::GetBuffer(BufferIndex bufferIdx)
const
122 KY_ASSERT(bufferIdx < BufferIndex_Count);
123 return m_workingBuffer[bufferIdx].m_memory;
126 KY_INLINE
KyUInt32 WorkingMemory::GetBufferSize(BufferIndex bufferIdx)
const
128 KY_ASSERT(bufferIdx < BufferIndex_Count);
129 return m_workingBuffer[bufferIdx].m_memorySize;
133 KY_INLINE AStarTraversalContext* WorkingMemory::GetOrCreateAStarTraversalContext()
135 if (m_astarContext ==
nullptr)
136 CreateAllPathfinderContexts();
137 return m_astarContext;
139 KY_INLINE PathRefinerContext* WorkingMemory::GetOrCreatePathRefinerContext()
141 if (m_refinerContext ==
nullptr)
142 CreateAllPathfinderContexts();
143 return m_refinerContext;
145 KY_INLINE PathClamperContext* WorkingMemory::GetOrCreatePathClamperContext()
147 if (m_clamperContext ==
nullptr)
148 CreateAllPathfinderContexts();
149 return m_clamperContext;
151 KY_INLINE NavDataChangeIndexInGrid* WorkingMemory::GetOrCreateNavDataChangeIndexInGrid()
153 if (m_navDataChangeIndexInGrid ==
nullptr)
154 CreateAllPathfinderContexts();
155 return m_navDataChangeIndexInGrid;
157 KY_INLINE ChannelArrayComputer* WorkingMemory::GetOrCreateChannelArrayComputer()
159 if (m_channelArrayComputer ==
nullptr)
160 CreateChannelArrayComputer();
161 return m_channelArrayComputer;
163 KY_INLINE DynamicNavMeshContext* WorkingMemory::GetOrCreateDynamicNavMeshContext()
165 if (m_dynamicNavMeshContext ==
nullptr)
166 CreateDynamicNavMeshContext();
167 return m_dynamicNavMeshContext;
169 KY_INLINE SpatializedPointCollectorContext* WorkingMemory::GetOrCreateSpatializedPointCollectorContext()
171 if (m_collectorContext ==
nullptr)
172 CreateSpatializedPointCollectorContext();
173 return m_collectorContext;
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68