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