Merge pull request #8393 from hpvb/fix-8081
Correct Variant::hash_compare()
This commit is contained in:
commit
6871ec708f
2 changed files with 1 additions and 19 deletions
|
@ -81,24 +81,6 @@ static inline uint32_t hash_one_uint64(const uint64_t p_int) {
|
||||||
return (int)v;
|
return (int)v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t hash_djb2_one_float(float p_in, uint32_t p_prev = 5381) {
|
|
||||||
union {
|
|
||||||
float f;
|
|
||||||
uint32_t i;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
// Normalize +/- 0.0 and NaN values so they hash the same.
|
|
||||||
if (p_in == 0.0f)
|
|
||||||
u.f = 0.0;
|
|
||||||
else if (Math::is_nan(p_in))
|
|
||||||
u.f = Math_NAN;
|
|
||||||
else
|
|
||||||
u.f = p_in;
|
|
||||||
|
|
||||||
return ((p_prev << 5) + p_prev) + u.i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Overload for real_t size changes
|
|
||||||
static inline uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) {
|
static inline uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) {
|
||||||
union {
|
union {
|
||||||
double d;
|
double d;
|
||||||
|
|
|
@ -2839,7 +2839,7 @@ uint32_t Variant::hash() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
#define hash_compare_scalar(p_lhs, p_rhs) \
|
#define hash_compare_scalar(p_lhs, p_rhs) \
|
||||||
((p_lhs) == (p_rhs)) || (Math::is_nan(p_lhs) == Math::is_nan(p_rhs))
|
((p_lhs) == (p_rhs)) || (Math::is_nan(p_lhs) && Math::is_nan(p_rhs))
|
||||||
|
|
||||||
#define hash_compare_vector2(p_lhs, p_rhs) \
|
#define hash_compare_vector2(p_lhs, p_rhs) \
|
||||||
(hash_compare_scalar((p_lhs).x, (p_rhs).x)) && \
|
(hash_compare_scalar((p_lhs).x, (p_rhs).x)) && \
|
||||||
|
|
Loading…
Reference in a new issue