--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CachingRegistry.st Fri Jul 23 01:17:43 1999 +0200
@@ -0,0 +1,96 @@
+"
+ COPYRIGHT (c) 1999 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+Registry subclass:#CachingRegistry
+ instanceVariableNames:'keptReferences cacheSize'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'System-Support'
+!
+
+!CachingRegistry class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1999 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+
+!
+
+documentation
+"
+ A CachingRegistry behaves generally like a registry;
+ However, it keeps hard references to the last n registered objects,
+ preventing them from being garbage collected (and finalized).
+ This is useful for resources, which do not cost too much memory,
+ but are expensive to allocate - a special canditate of this kind are
+ XFonts. With a CachingRegistry, fonts are kept a bit longer alive
+ and can therefore often be reused - even if temporarily unreferenced.
+
+ This is kind of experimental.
+
+
+ [author:]
+ Claus Gittinger (cg@exept)
+
+ [see also:]
+
+ [instance variables:]
+ keptObjects Collection hard referenced objects
+ cacheSize Integer number of hard references
+
+ [class variables:]
+"
+! !
+
+!CachingRegistry methodsFor:'private'!
+
+cacheSize:aNumber
+ keptReferences := OrderedCollection new:aNumber.
+ cacheSize := aNumber.
+! !
+
+!CachingRegistry methodsFor:'registering objects'!
+
+register:anObject as:aHandle
+ keptReferences removeIdentical:anObject ifAbsent:nil.
+ keptReferences addLast:anObject.
+ keptReferences size > cacheSize ifTrue:[
+ keptReferences removeFirst.
+ ].
+ super register:anObject as:aHandle.
+!
+
+repairTally
+ keptReferences := OrderedCollection new:cacheSize.
+ super repairTally.
+!
+
+unregister:anObject atIndex:index
+ keptReferences removeIdentical:anObject ifAbsent:nil.
+ super unregister:anObject atIndex:index.
+! !
+
+!CachingRegistry class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libbasic/CachingRegistry.st,v 1.1 1999-07-22 23:17:43 cg Exp $'
+! !