29 #ifndef NVBLASTTKEVENTQUEUE_H 30 #define NVBLASTTKEVENTQUEUE_H 64 TkEventQueue() : m_currentEvent(0), m_poolCapacity(0), m_pool(nullptr), m_allowAllocs(true) {}
89 m_events.resizeUninitialized(m_currentEvent);
90 m_allowAllocs = !enable;
101 for (
void* mem : m_memory)
107 m_allowAllocs =
true;
118 uint32_t index = m_currentEvent.fetch_add(1);
121 NVBLAST_ASSERT(m_allowAllocs || m_currentEvent <= m_events.capacity());
123 m_events.resizeUninitialized(m_currentEvent);
127 NVBLAST_ASSERT(!m_allowAllocs || m_currentEvent == m_events.size());
129 TkEvent& evt = m_events[index];
131 evt.payload = payload;
140 uint32_t index = m_currentData.fetch_add(
sizeof(T));
141 if (m_currentData <= m_poolCapacity)
143 return reinterpret_cast<T*
>(&m_pool[index]);
150 m_currentData =
sizeof(T);
151 return reinterpret_cast<T*
>(&m_pool[0]);
163 m_pool =
reinterpret_cast<uint8_t*
>(allocDataBySize(size));
164 m_poolCapacity = size;
174 m_events.reserve(m_events.size() + n);
182 m_listeners.pushBack(&l);
190 m_listeners.findAndReplaceWithLast(&l);
213 l->receive(events.begin(), events.size());
222 void* allocDataBySize(
size_t size)
224 void* memory =
nullptr;
228 m_memory.pushBack(memory);
236 std::atomic<uint32_t> m_currentEvent;
237 std::atomic<uint32_t> m_currentData;
238 size_t m_poolCapacity;
248 #endif // ifndef NVBLASTTKEVENTQUEUE_H void addListener(TkEventListener &l)
Definition: NvBlastTkEventQueue.h:180
physx::shdfnd::InlineArray< T, N, Allocator > type
Definition: NvBlastArray.h:60
void reserveData(size_t size)
Definition: NvBlastTkEventQueue.h:160
Definition: NvBlastTkEvent.h:65
physx::shdfnd::Array< T, Allocator > type
Definition: NvBlastArray.h:48
void dispatch(const Array< TkEvent >::type &events) const
Definition: NvBlastTkEventQueue.h:206
#define BLAST_PROFILE_SCOPE_M(name)
Definition: NvBlastProfilerInternal.h:86
#define NVBLAST_ASSERT(exp)
Definition: NvBlastAssert.h:37
Type
Definition: NvBlastTkEvent.h:68
void protect(bool enable)
Definition: NvBlastTkEventQueue.h:84
Definition: NvBlastTkEvent.h:168
void addEvent(T *payload)
Definition: NvBlastTkEventQueue.h:116
Definition: NvBlastTkEventQueue.h:61
#define NVBLAST_FREE(_mem)
Definition: NvBlastGlobals.h:222
TkEventQueue()
Definition: NvBlastTkEventQueue.h:64
#define NVBLAST_ALLOC_NAMED(_size, _name)
Definition: NvBlastGlobals.h:221
T * allocData()
Definition: NvBlastTkEventQueue.h:138
Definition: NvBlastArray.h:37
void reserveEvents(uint32_t n)
Definition: NvBlastTkEventQueue.h:171
void dispatch()
Definition: NvBlastTkEventQueue.h:197
void removeListener(TkEventListener &l)
Definition: NvBlastTkEventQueue.h:188
void reset()
Definition: NvBlastTkEventQueue.h:97