--- 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 $'
! !