VirtualArrayWithCache.st
author Claus Gittinger <cg@exept.de>
Sun, 24 Mar 2019 21:24:55 +0100
changeset 4909 14c735fc4c64
parent 4819 2dba3c4a24b6
child 4972 b703758a0d92
permissions -rw-r--r--
class: CRC32Stream class added: #hashSize comment/format in: #documentation

"{ Package: 'stx:libbasic2' }"

"{ NameSpace: Smalltalk }"

VirtualArray subclass:#VirtualArrayWithCache
	instanceVariableNames:'lruCache'
	classVariableNames:''
	poolDictionaries:''
	category:'Collections-Abstract'
!

!VirtualArrayWithCache class methodsFor:'documentation'!

documentation
"
    like a VirtualArray, but caches the results of the last few accesses.
    This might behave better, if it is expensive to compute the elements,
    and they are often accessed repeatedly (as when showing in a listView).

    [author:]
        Claus Gittinger

    [instance variables:]

    [class variables:]

    [see also:]

"
!

examples
"
                                                                [exBegin]
    |factorialLines|

    factorialLines := VirtualArrayWithCache new:10000.
    factorialLines generator:[:index | index factorial printString].
    factorialLines at:1000.
    factorialLines at:1000.
    factorialLines at:10000.
    
                                                                [exEnd]
"
! !

!VirtualArrayWithCache methodsFor:'collection protocol'!

at:index
    lruCache isNil ifTrue:[
        lruCache := CacheDictionary new:100.
    ].
    ^ lruCache at:index ifAbsentPut:[generator value:index]

    "Created: / 01-03-2019 / 20:35:45 / Claus Gittinger"
! !

!VirtualArrayWithCache class methodsFor:'documentation'!

version_CVS
    ^ '$Header$'
! !