PassLevelKey.h 1016 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef ANKI_RESOURCE_PASS_LEVEL_KEY_H
  2. #define ANKI_RESOURCE_PASS_LEVEL_KEY_H
  3. #include <unordered_map>
  4. #include <cstdint>
  5. #include <cstdlib>
  6. namespace anki {
  7. /// XXX
  8. struct PassLevelKey
  9. {
  10. uint32_t pass = 0;
  11. uint32_t level = 0;
  12. PassLevelKey()
  13. {}
  14. PassLevelKey(const PassLevelKey& b)
  15. : pass(b.pass), level(b.level)
  16. {}
  17. PassLevelKey(uint32_t pass_, uint32_t level_)
  18. : pass(pass_), level(level_)
  19. {}
  20. };
  21. /// Create hash functor
  22. struct PassLevelKeyCreateHash
  23. {
  24. size_t operator()(const PassLevelKey& b) const
  25. {
  26. return b.pass * 1000 + b.level;
  27. }
  28. };
  29. /// Values comparisons functor
  30. struct PassLevelKeyComparision
  31. {
  32. bool operator()(const PassLevelKey& a,
  33. const PassLevelKey& b) const
  34. {
  35. return a.pass == b.pass && a.level == b.level;
  36. }
  37. };
  38. /// Define an unorderer map with key the PassLevelKey and type given by a
  39. /// template parameter
  40. template<typename T>
  41. using PassLevelHashMap = std::unordered_map<
  42. PassLevelKey, T, PassLevelKeyCreateHash, PassLevelKeyComparision>;
  43. } // end namespace
  44. #endif