add precision support to std::hash glm specializations

master
Thom de Villa ago%!(EXTRA string=10 years)
parent 36e2bdd294
commit b1c45d3ce3
  1. 84
      glm/gtx/hash.hpp
  2. 74
      glm/gtx/hash.inl

@ -64,88 +64,88 @@
namespace std namespace std
{ {
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tvec1<T>> struct hash<glm::tvec1<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tvec1<T> &v) const; GLM_FUNC_DECL size_t operator()(const glm::tvec1<T,P> &v) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tvec2<T>> struct hash<glm::tvec2<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tvec2<T> &v) const; GLM_FUNC_DECL size_t operator()(const glm::tvec2<T,P> &v) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tvec3<T>> struct hash<glm::tvec3<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tvec3<T> &v) const; GLM_FUNC_DECL size_t operator()(const glm::tvec3<T,P> &v) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tvec4<T>> struct hash<glm::tvec4<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tvec4<T> &v) const; GLM_FUNC_DECL size_t operator()(const glm::tvec4<T,P> &v) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tquat<T>> struct hash<glm::tquat<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tquat<T> &q) const; GLM_FUNC_DECL size_t operator()(const glm::tquat<T,P> &q) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat2x2<T>> struct hash<glm::tmat2x2<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat2x2<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat2x2<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat2x3<T>> struct hash<glm::tmat2x3<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat2x3<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat2x3<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat2x4<T>> struct hash<glm::tmat2x4<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat2x4<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat2x4<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat3x2<T>> struct hash<glm::tmat3x2<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat3x2<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat3x2<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat3x3<T>> struct hash<glm::tmat3x3<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat3x3<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat3x3<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat3x4<T>> struct hash<glm::tmat3x4<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat3x4<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat3x4<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat4x2<T>> struct hash<glm::tmat4x2<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat4x2<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat4x2<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat4x3<T>> struct hash<glm::tmat4x3<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat4x3<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat4x3<T,P> &m) const;
}; };
template <typename T> template <typename T, glm::precision P>
struct hash<glm::tmat4x4<T>> struct hash<glm::tmat4x4<T,P>>
{ {
GLM_FUNC_DECL size_t operator()(const glm::tmat4x4<T> &m) const; GLM_FUNC_DECL size_t operator()(const glm::tmat4x4<T,P> &m) const;
}; };
} // namespace std } // namespace std

@ -51,17 +51,17 @@ namespace detail
namespace std namespace std
{ {
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tvec1<T>>::operator()(const glm::tvec1<T> &v) const hash<glm::tvec1<T,P>>::operator()(const glm::tvec1<T,P> &v) const
{ {
hash<T> hasher; hash<T> hasher;
return hasher(v.x); return hasher(v.x);
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tvec2<T>>::operator()(const glm::tvec2<T> &v) const hash<glm::tvec2<T,P>>::operator()(const glm::tvec2<T,P> &v) const
{ {
size_t seed = 0; size_t seed = 0;
hash<T> hasher; hash<T> hasher;
@ -70,9 +70,9 @@ namespace std
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tvec3<T>>::operator()(const glm::tvec3<T> &v) const hash<glm::tvec3<T,P>>::operator()(const glm::tvec3<T,P> &v) const
{ {
size_t seed = 0; size_t seed = 0;
hash<T> hasher; hash<T> hasher;
@ -82,9 +82,9 @@ namespace std
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tvec4<T>>::operator()(const glm::tvec4<T> &v) const hash<glm::tvec4<T,P>>::operator()(const glm::tvec4<T,P> &v) const
{ {
size_t seed = 0; size_t seed = 0;
hash<T> hasher; hash<T> hasher;
@ -95,9 +95,9 @@ namespace std
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tquat<T>>::operator()(const glm::tquat<T> &q) const hash<glm::tquat<T,P>>::operator()(const glm::tquat<T,P> &q) const
{ {
size_t seed = 0; size_t seed = 0;
hash<T> hasher; hash<T> hasher;
@ -108,81 +108,81 @@ namespace std
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat2x2<T>>::operator()(const glm::tmat2x2<T> &m) const hash<glm::tmat2x2<T,P>>::operator()(const glm::tmat2x2<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec2<T>> hasher; hash<glm::tvec2<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat2x3<T>>::operator()(const glm::tmat2x3<T> &m) const hash<glm::tmat2x3<T,P>>::operator()(const glm::tmat2x3<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec3<T>> hasher; hash<glm::tvec3<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat2x4<T>>::operator()(const glm::tmat2x4<T> &m) const hash<glm::tmat2x4<T,P>>::operator()(const glm::tmat2x4<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec4<T>> hasher; hash<glm::tvec4<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat3x2<T>>::operator()(const glm::tmat3x2<T> &m) const hash<glm::tmat3x2<T,P>>::operator()(const glm::tmat3x2<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec2<T>> hasher; hash<glm::tvec2<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[2]));
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat3x3<T>>::operator()(const glm::tmat3x3<T> &m) const hash<glm::tmat3x3<T,P>>::operator()(const glm::tmat3x3<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec3<T>> hasher; hash<glm::tvec3<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[2]));
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat3x4<T>>::operator()(const glm::tmat3x4<T> &m) const hash<glm::tmat3x4<T,P>>::operator()(const glm::tmat3x4<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec4<T>> hasher; hash<glm::tvec4<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[2]));
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat4x2<T>>::operator()(const glm::tmat4x2<T> &m) const hash<glm::tmat4x2<T,P>>::operator()(const glm::tmat4x2<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec2<T>> hasher; hash<glm::tvec2<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[2]));
@ -190,12 +190,12 @@ namespace std
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat4x3<T>>::operator()(const glm::tmat4x3<T> &m) const hash<glm::tmat4x3<T,P>>::operator()(const glm::tmat4x3<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec3<T>> hasher; hash<glm::tvec3<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[2]));
@ -203,12 +203,12 @@ namespace std
return seed; return seed;
} }
template <typename T> template <typename T, glm::precision P>
GLM_FUNC_QUALIFIER size_t GLM_FUNC_QUALIFIER size_t
hash<glm::tmat4x4<T>>::operator()(const glm::tmat4x4<T> &m) const hash<glm::tmat4x4<T,P>>::operator()(const glm::tmat4x4<T,P> &m) const
{ {
size_t seed = 0; size_t seed = 0;
hash<glm::tvec4<T>> hasher; hash<glm::tvec4<T,P>> hasher;
glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[0]));
glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[1]));
glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[2]));

Loading…
Cancel
Save