Merge pull request #8393 from hpvb/fix-8081

Correct Variant::hash_compare()
This commit is contained in:
Andreas Haas 2017-04-14 17:51:05 +02:00 committed by GitHub
commit 6871ec708f
2 changed files with 1 additions and 19 deletions

View file

@ -81,24 +81,6 @@ static inline uint32_t hash_one_uint64(const uint64_t p_int) {
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) {
union {
double d;

View file

@ -2839,7 +2839,7 @@ uint32_t Variant::hash() const {
}
#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) \
(hash_compare_scalar((p_lhs).x, (p_rhs).x)) && \