@@ -32,10 +32,12 @@ #endif #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFOutOfRangeException.h" + +#import "macros.h" #if (!defined(HAVE_GMTIME_R) || !defined(HAVE_LOCALTIME_R)) && \ defined(OF_THREADS) static OFMutex *mutex; #endif @@ -293,10 +295,35 @@ otherDate->microseconds != microseconds) return NO; return YES; } + +- (uint32_t)hash +{ + uint32_t hash; + + OF_HASH_INIT(hash); + + OF_HASH_ADD(hash, (seconds >> 56) & 0xFF); + OF_HASH_ADD(hash, (seconds >> 48) & 0xFF); + OF_HASH_ADD(hash, (seconds >> 40) & 0xFF); + OF_HASH_ADD(hash, (seconds >> 32) & 0xFF); + OF_HASH_ADD(hash, (seconds >> 24) & 0xFF); + OF_HASH_ADD(hash, (seconds >> 16) & 0xFF); + OF_HASH_ADD(hash, (seconds >> 8) & 0xFF); + OF_HASH_ADD(hash, seconds & 0xFF); + + OF_HASH_ADD(hash, (microseconds >> 24) & 0xFF); + OF_HASH_ADD(hash, (microseconds >> 16) & 0xFF); + OF_HASH_ADD(hash, (microseconds >> 8) & 0xFF); + OF_HASH_ADD(hash, microseconds & 0xFF); + + OF_HASH_FINALIZE(hash); + + return hash; +} - copy { return [self retain]; }