Răsfoiți Sursa

fixed a bug in DiskAdrTable.HashValue: counter "i" was not incremented

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8598 8c9fc860-2736-0410-a75d-ab315db34111
eth.morozova 6 ani în urmă
părinte
comite
c68f0eb725
1 a modificat fișierele cu 5 adăugiri și 6 ștergeri
  1. 5 6
      source/DiskFS.Mod

+ 5 - 6
source/DiskFS.Mod

@@ -946,14 +946,13 @@ TYPE
 		END Grow;
 		
 		PROCEDURE HashValue(key: DiskAdr):SIZE;
-		VAR index, h1, h2, i: SIZE;
+		VAR index, h, i := 0 : SIZE;
 		BEGIN
-			index := key;
-			h1 := key MOD size;
-			(* h2 := 1; -- linear probing *) 
+			h := key MOD size;
 			REPEAT
-				index := (h1 + i) MOD size;
-			UNTIL((table[index] = 0) OR (table[index] = key));
+				index := (h + i) MOD size;
+				INC(i);
+			UNTIL((table[index] = 0) OR (table[index] = key) OR (i > size));
 			ASSERT((table[index] = 0) OR (table[index] = key));
 			RETURN index;
 		END HashValue;