--- a/String.st Sat Feb 09 16:00:27 2019 +0100
+++ b/String.st Sun Feb 10 14:06:01 2019 +0100
@@ -2222,7 +2222,9 @@
hash_fnv1a
"return an integer useful as a hash-key.
This method uses the fnv-1a algorithm
- (which is actually a pretty good one)."
+ (which is actually a pretty good one).
+ Notice: on 64bit CPUs, only small 4-byte hashvalues are returned,
+ (so hash values are independent from the architecture)"
%{ /* NOCONTEXT */
#ifdef __SCHTEAM__
@@ -2235,22 +2237,22 @@
INT l = __stringSize(self);
if (!__qIsStringLike(self)) {
- int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(self))->c_ninstvars));
-
- cp += n;
- l -= n;
+ int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(self))->c_ninstvars));
+
+ cp += n;
+ l -= n;
}
while (l >= 4) {
- l -= 4;
- h = (h ^ cp[0]) * 16777619;
- h = (h ^ cp[1]) * 16777619;
- h = (h ^ cp[2]) * 16777619;
- h = (h ^ cp[3]) * 16777619;
- cp += 4;
+ l -= 4;
+ h = (h ^ cp[0]) * 16777619;
+ h = (h ^ cp[1]) * 16777619;
+ h = (h ^ cp[2]) * 16777619;
+ h = (h ^ cp[3]) * 16777619;
+ cp += 4;
}
while (l--) {
- h = (h ^ *cp++) * 16777619;
+ h = (h ^ *cp++) * 16777619;
}
// make it a smallInteger
h = (h ^ (h >> 30)) & 0x3FFFFFFF;
@@ -2262,6 +2264,8 @@
"
'a' hash_fnv1a
"
+
+ "Modified: / 10-02-2019 / 14:05:47 / Claus Gittinger"
!
hash_java