hash.inl 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /// @ref gtx_hash
  2. namespace glm {
  3. namespace detail
  4. {
  5. GLM_INLINE void hash_combine(size_t &seed, size_t hash)
  6. {
  7. hash += 0x9e3779b9 + (seed << 6) + (seed >> 2);
  8. seed ^= hash;
  9. }
  10. }}
  11. namespace std
  12. {
  13. template<typename T, glm::qualifier Q>
  14. GLM_FUNC_QUALIFIER size_t hash<glm::vec<1, T, Q> >::operator()(glm::vec<1, T, Q> const& v) const GLM_NOEXCEPT
  15. {
  16. hash<T> hasher;
  17. return hasher(v.x);
  18. }
  19. template<typename T, glm::qualifier Q>
  20. GLM_FUNC_QUALIFIER size_t hash<glm::vec<2, T, Q> >::operator()(glm::vec<2, T, Q> const& v) const GLM_NOEXCEPT
  21. {
  22. size_t seed = 0;
  23. hash<T> hasher;
  24. glm::detail::hash_combine(seed, hasher(v.x));
  25. glm::detail::hash_combine(seed, hasher(v.y));
  26. return seed;
  27. }
  28. template<typename T, glm::qualifier Q>
  29. GLM_FUNC_QUALIFIER size_t hash<glm::vec<3, T, Q> >::operator()(glm::vec<3, T, Q> const& v) const GLM_NOEXCEPT
  30. {
  31. size_t seed = 0;
  32. hash<T> hasher;
  33. glm::detail::hash_combine(seed, hasher(v.x));
  34. glm::detail::hash_combine(seed, hasher(v.y));
  35. glm::detail::hash_combine(seed, hasher(v.z));
  36. return seed;
  37. }
  38. template<typename T, glm::qualifier Q>
  39. GLM_FUNC_QUALIFIER size_t hash<glm::vec<4, T, Q> >::operator()(glm::vec<4, T, Q> const& v) const GLM_NOEXCEPT
  40. {
  41. size_t seed = 0;
  42. hash<T> hasher;
  43. glm::detail::hash_combine(seed, hasher(v.x));
  44. glm::detail::hash_combine(seed, hasher(v.y));
  45. glm::detail::hash_combine(seed, hasher(v.z));
  46. glm::detail::hash_combine(seed, hasher(v.w));
  47. return seed;
  48. }
  49. template<typename T, glm::qualifier Q>
  50. GLM_FUNC_QUALIFIER size_t hash<glm::qua<T, Q> >::operator()(glm::qua<T,Q> const& q) const GLM_NOEXCEPT
  51. {
  52. size_t seed = 0;
  53. hash<T> hasher;
  54. glm::detail::hash_combine(seed, hasher(q.x));
  55. glm::detail::hash_combine(seed, hasher(q.y));
  56. glm::detail::hash_combine(seed, hasher(q.z));
  57. glm::detail::hash_combine(seed, hasher(q.w));
  58. return seed;
  59. }
  60. template<typename T, glm::qualifier Q>
  61. GLM_FUNC_QUALIFIER size_t hash<glm::tdualquat<T, Q> >::operator()(glm::tdualquat<T, Q> const& q) const GLM_NOEXCEPT
  62. {
  63. size_t seed = 0;
  64. hash<glm::qua<T, Q> > hasher;
  65. glm::detail::hash_combine(seed, hasher(q.real));
  66. glm::detail::hash_combine(seed, hasher(q.dual));
  67. return seed;
  68. }
  69. template<typename T, glm::qualifier Q>
  70. GLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 2, T, Q> >::operator()(glm::mat<2, 2, T, Q> const& m) const GLM_NOEXCEPT
  71. {
  72. size_t seed = 0;
  73. hash<glm::vec<2, T, Q> > hasher;
  74. glm::detail::hash_combine(seed, hasher(m[0]));
  75. glm::detail::hash_combine(seed, hasher(m[1]));
  76. return seed;
  77. }
  78. template<typename T, glm::qualifier Q>
  79. GLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 3, T, Q> >::operator()(glm::mat<2, 3, T, Q> const& m) const GLM_NOEXCEPT
  80. {
  81. size_t seed = 0;
  82. hash<glm::vec<3, T, Q> > hasher;
  83. glm::detail::hash_combine(seed, hasher(m[0]));
  84. glm::detail::hash_combine(seed, hasher(m[1]));
  85. return seed;
  86. }
  87. template<typename T, glm::qualifier Q>
  88. GLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 4, T, Q> >::operator()(glm::mat<2, 4, T, Q> const& m) const GLM_NOEXCEPT
  89. {
  90. size_t seed = 0;
  91. hash<glm::vec<4, T, Q> > hasher;
  92. glm::detail::hash_combine(seed, hasher(m[0]));
  93. glm::detail::hash_combine(seed, hasher(m[1]));
  94. return seed;
  95. }
  96. template<typename T, glm::qualifier Q>
  97. GLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 2, T, Q> >::operator()(glm::mat<3, 2, T, Q> const& m) const GLM_NOEXCEPT
  98. {
  99. size_t seed = 0;
  100. hash<glm::vec<2, T, Q> > hasher;
  101. glm::detail::hash_combine(seed, hasher(m[0]));
  102. glm::detail::hash_combine(seed, hasher(m[1]));
  103. glm::detail::hash_combine(seed, hasher(m[2]));
  104. return seed;
  105. }
  106. template<typename T, glm::qualifier Q>
  107. GLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 3, T, Q> >::operator()(glm::mat<3, 3, T, Q> const& m) const GLM_NOEXCEPT
  108. {
  109. size_t seed = 0;
  110. hash<glm::vec<3, T, Q> > hasher;
  111. glm::detail::hash_combine(seed, hasher(m[0]));
  112. glm::detail::hash_combine(seed, hasher(m[1]));
  113. glm::detail::hash_combine(seed, hasher(m[2]));
  114. return seed;
  115. }
  116. template<typename T, glm::qualifier Q>
  117. GLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 4, T, Q> >::operator()(glm::mat<3, 4, T, Q> const& m) const GLM_NOEXCEPT
  118. {
  119. size_t seed = 0;
  120. hash<glm::vec<4, T, Q> > hasher;
  121. glm::detail::hash_combine(seed, hasher(m[0]));
  122. glm::detail::hash_combine(seed, hasher(m[1]));
  123. glm::detail::hash_combine(seed, hasher(m[2]));
  124. return seed;
  125. }
  126. template<typename T, glm::qualifier Q>
  127. GLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 2, T,Q> >::operator()(glm::mat<4, 2, T,Q> const& m) const GLM_NOEXCEPT
  128. {
  129. size_t seed = 0;
  130. hash<glm::vec<2, T, Q> > hasher;
  131. glm::detail::hash_combine(seed, hasher(m[0]));
  132. glm::detail::hash_combine(seed, hasher(m[1]));
  133. glm::detail::hash_combine(seed, hasher(m[2]));
  134. glm::detail::hash_combine(seed, hasher(m[3]));
  135. return seed;
  136. }
  137. template<typename T, glm::qualifier Q>
  138. GLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 3, T,Q> >::operator()(glm::mat<4, 3, T,Q> const& m) const GLM_NOEXCEPT
  139. {
  140. size_t seed = 0;
  141. hash<glm::vec<3, T, Q> > hasher;
  142. glm::detail::hash_combine(seed, hasher(m[0]));
  143. glm::detail::hash_combine(seed, hasher(m[1]));
  144. glm::detail::hash_combine(seed, hasher(m[2]));
  145. glm::detail::hash_combine(seed, hasher(m[3]));
  146. return seed;
  147. }
  148. template<typename T, glm::qualifier Q>
  149. GLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 4, T,Q> >::operator()(glm::mat<4, 4, T, Q> const& m) const GLM_NOEXCEPT
  150. {
  151. size_t seed = 0;
  152. hash<glm::vec<4, T, Q> > hasher;
  153. glm::detail::hash_combine(seed, hasher(m[0]));
  154. glm::detail::hash_combine(seed, hasher(m[1]));
  155. glm::detail::hash_combine(seed, hasher(m[2]));
  156. glm::detail::hash_combine(seed, hasher(m[3]));
  157. return seed;
  158. }
  159. }