String.st
changeset 23690 427a2ae384dd
parent 23563 2ffb2fca0dd9
child 23700 962839a1b505
--- 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