Index: src/OFNumber.m ================================================================== --- src/OFNumber.m +++ src/OFNumber.m @@ -11,10 +11,11 @@ #include "config.h" #import "OFNumber.h" #import "OFExceptions.h" +#import "macros.h" #define RETURN_AS(t) \ switch (type) { \ case OF_NUMBER_CHAR: \ return (t)value.char_; \ @@ -756,11 +757,31 @@ } } - (uint32_t)hash { - return [self asUInt32]; + uint32_t hash; + size_t i; + + switch (type) { + case OF_NUMBER_FLOAT: + OF_HASH_INIT(hash); + for (i = 0; i < sizeof(float); i++) + OF_HASH_ADD(hash, ((char*)&value.float_)[i]); + OF_HASH_FINALIZE(hash); + + return hash; + case OF_NUMBER_DOUBLE: + OF_HASH_INIT(hash); + for (i = 0; i < sizeof(double); i++) + OF_HASH_ADD(hash, ((char*)&value.double_)[i]); + OF_HASH_FINALIZE(hash); + + return hash; + default: + return [self asUInt32]; + } } - add: (OFNumber*)num { CALCULATE2(+=, num)