Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 20 Sep 2016 11:37:33 +0100
branchjv
changeset 20577 a27e7b3031cb
parent 20399 dbc7af6d95a3 (current diff)
parent 20395 50417882857e (diff)
child 20578 39641ba8d6e0
Merge
CachingRegistry.st
--- a/CachingRegistry.st	Mon Sep 19 23:15:21 2016 +0100
+++ b/CachingRegistry.st	Tue Sep 20 11:37:33 2016 +0100
@@ -65,6 +65,12 @@
 "
 ! !
 
+!CachingRegistry class methodsFor:'instance creation'!
+
+new:cacheSize
+    ^ (super new:cacheSize) cacheSize:cacheSize
+! !
+
 !CachingRegistry methodsFor:'enumerating'!
 
 detect:aBlock ifNone:exceptionValue
@@ -72,9 +78,11 @@
 
     keyArray validElementsDo:[:obj |
         (obj ~~ DeletedEntry and:[aBlock value:obj]) ifTrue:[
-            keptReferences 
-                removeIdentical:obj ifAbsent:[];
-                addLast:obj.
+            keptReferences removeIdentical:obj ifAbsent:[].
+            keptReferences size >= cacheSize ifTrue:[
+                keptReferences removeFirst.
+            ].
+            keptReferences addLast:obj.
             ^ obj
         ].
     ].
@@ -93,10 +101,10 @@
 register:anObject as:aHandle
     keptReferences removeIdentical:anObject ifAbsent:nil.
     aHandle notNil ifTrue:[
-        keptReferences addLast:anObject.
-        keptReferences size > cacheSize ifTrue:[
+        keptReferences size >= cacheSize ifTrue:[
             keptReferences removeFirst.
         ].
+        keptReferences addLast:anObject.
     ].
     super register:anObject as:aHandle.
 !
@@ -117,6 +125,10 @@
     ^ '$Header$'
 !
 
+version_CVS
+    ^ '$Header$'
+!
+
 version_SVN
     ^ '$Id: CachingRegistry.st 10761 2012-01-19 11:46:00Z vranyj1 $'
 ! !