CachingRegistry.st
author Stefan Vogel <sv@exept.de>
Mon, 08 Jun 2015 17:51:54 +0200
changeset 18463 8c5f3917b2e8
parent 18249 7d686f203624
child 18261 22bdfc405bca
child 20043 0be0ccf00b36
permissions -rw-r--r--
class: CharacterArray changed: #argumentCount #isBinarySelector #numArgs

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

"{ Package: 'stx:libbasic' }"

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.2 2015-04-21 16:01:16 cg Exp $'
! !