CmQueryManager.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "CmQueryManager.h"
  2. #include "CmEventQuery.h"
  3. #include "CmTimerQuery.h"
  4. namespace CamelotFramework
  5. {
  6. QueryManager::QueryManager()
  7. :mBufferIdx(0)
  8. {
  9. }
  10. void QueryManager::update()
  11. {
  12. UINT32 otherBufferIdx = (mBufferIdx + 1) % 2;
  13. for(auto& query : mEventQueries[mBufferIdx])
  14. {
  15. if(query->isReady())
  16. query->onTriggered();
  17. else
  18. mEventQueries[otherBufferIdx].push_back(query);
  19. }
  20. for(auto& query : mTimerQueries[mBufferIdx])
  21. {
  22. if(query->isReady())
  23. query->onTriggered(query->getTimeMs());
  24. else
  25. mTimerQueries[otherBufferIdx].push_back(query);
  26. }
  27. mEventQueries[mBufferIdx].clear();
  28. mTimerQueries[mBufferIdx].clear();
  29. mBufferIdx = otherBufferIdx;
  30. }
  31. void QueryManager::deleteEventQuery(EventQuery* query)
  32. {
  33. UINT32 bufferIdx = instance().mBufferIdx;
  34. auto iterFind = std::find(instance().mEventQueries[bufferIdx].begin(), instance().mEventQueries[bufferIdx].end(), query);
  35. if(iterFind != instance().mEventQueries[bufferIdx].end())
  36. instance().mEventQueries[bufferIdx].erase(iterFind);
  37. cm_delete(query);
  38. }
  39. void QueryManager::deleteTimerQuery(TimerQuery* query)
  40. {
  41. UINT32 bufferIdx = instance().mBufferIdx;
  42. auto iterFind = std::find(instance().mTimerQueries[bufferIdx].begin(), instance().mTimerQueries[bufferIdx].end(), query);
  43. if(iterFind != instance().mTimerQueries[bufferIdx].end())
  44. instance().mTimerQueries[bufferIdx].erase(iterFind);
  45. cm_delete(query);
  46. }
  47. }