CachingRegistry.st
branchjv
changeset 20577 a27e7b3031cb
parent 20398 8cb53f870d39
parent 20395 50417882857e
child 20578 39641ba8d6e0
--- 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 $'
 ! !