--- 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