SmallDictionary.st
changeset 23360 d7afaf87196c
parent 23352 cebb9c179dbf
child 23365 35e97af75157
--- a/SmallDictionary.st	Tue Sep 18 14:55:11 2018 +0200
+++ b/SmallDictionary.st	Tue Sep 18 14:57:31 2018 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2018 by eXept Software AG
               All Rights Reserved
@@ -80,25 +82,25 @@
 !SmallDictionary methodsFor:'accessing'!
 
 at:key ifAbsent:aBlock 
-    |keyIndex|
+    |keyIndex "{Class: SmallInteger}"|
 
-    keyIndex := self findIndexFor:key.
-    ^ keyIndex == 0 ifTrue:[aBlock value] ifFalse:[keysAndValues at:keyIndex+1]
+    keyIndex := keysAndValues indexOf:key startingAt:1 step:2.
+    ^ keyIndex == 0 ifTrue:[aBlock value] ifFalse:[keysAndValues basicAt:keyIndex+1]
 
-    "Modified (format): / 14-09-2018 / 15:46:58 / Stefan Vogel"
+    "Modified: / 18-09-2018 / 14:08:21 / Stefan Vogel"
 !
 
 at:key ifAbsentPut:aBlock 
     |keyIndex|
 
-    keyIndex := self findIndexFor:key.
+    keyIndex := keysAndValues indexOf:key startingAt:1 step:2.
     ^ keyIndex == 0 ifTrue:[
         self privateAt:key put:aBlock value
     ] ifFalse:[
-        keysAndValues at:keyIndex+1.
+        keysAndValues basicAt:keyIndex+1.
     ]
 
-    "Modified (format): / 14-09-2018 / 15:47:43 / Stefan Vogel"
+    "Modified: / 18-09-2018 / 14:08:26 / Stefan Vogel"
 !
 
 keys
@@ -148,14 +150,15 @@
 at:key put:value 
     |keyIndex|
 
-    keyIndex := self findIndexFor:key.
-    ^ keyIndex == 0 ifTrue:[
+    keyIndex := keysAndValues indexOf:key startingAt:1 step:2.
+    keyIndex == 0 ifTrue:[
         self privateAt:key put:value
     ] ifFalse:[
-        keysAndValues at:keyIndex+1 put:value
-    ]
+        keysAndValues basicAt:keyIndex+1 put:value
+    ].
+    ^ value
 
-    "Modified (format): / 14-09-2018 / 15:47:57 / Stefan Vogel"
+    "Modified: / 18-09-2018 / 14:12:13 / Stefan Vogel"
 ! !
 
 !SmallDictionary methodsFor:'copying'!
@@ -206,17 +209,6 @@
 
 !SmallDictionary methodsFor:'private'!
 
-findIndexFor:aKey
-    |sz "{Class: SmallInteger}"|
-
-    sz := tally * 2.
-    1 to:sz-1 by:2 do:[:i | (keysAndValues at:i) = aKey ifTrue:[^ i]].
-    ^ 0
-
-    "Modified: / 14-09-2018 / 16:25:03 / Stefan Vogel"
-    "Modified (format): / 14-09-2018 / 17:40:17 / Stefan Vogel"
-!
-
 growKeysAndValues
     "duplicate the capacity"
 
@@ -240,12 +232,13 @@
 
     sz := tally * 2.
     sz == keysAndValues size ifTrue: [self growKeysAndValues].
-    keysAndValues at:sz+1 put:key.
-    keysAndValues at:sz+2 put:value.
+    keysAndValues 
+        basicAt:sz+1 put:key;
+        basicAt:sz+2 put:value.
     tally := tally + 1.
     ^ value.
 
-    "Modified: / 14-09-2018 / 17:39:13 / Stefan Vogel"
+    "Modified: / 18-09-2018 / 13:33:30 / Stefan Vogel"
 ! !
 
 !SmallDictionary methodsFor:'removing'!
@@ -277,7 +270,7 @@
      sz "{Class:SmallInteger}"
      value|
 
-    keyIndex := self findIndexFor:key.
+    keyIndex := keysAndValues indexOf:key startingAt:1 step:2.
     keyIndex == 0 ifTrue:[
         ^ aBlock value
     ].
@@ -291,15 +284,15 @@
     tally := tally - 1.
     ^ value
 
-    "Modified (format): / 14-09-2018 / 16:23:45 / Stefan Vogel"
+    "Modified: / 18-09-2018 / 14:09:15 / Stefan Vogel"
 ! !
 
 !SmallDictionary methodsFor:'testing'!
 
 includesKey:aKey 
-    ^ (self findIndexFor:aKey) ~~ 0
+    ^ (keysAndValues indexOf:aKey startingAt:1 step:2) ~~ 0
 
-    "Modified (format): / 14-09-2018 / 16:11:03 / Stefan Vogel"
+    "Modified: / 18-09-2018 / 14:09:03 / Stefan Vogel"
 !
 
 isDictionary