VirtualArrayWithCache.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2019 11:07:59 +0200
changeset 5047 f6ccfe8f2ddb
parent 4972 b703758a0d92
child 5388 534a32d00c8f
permissions -rw-r--r--
#DOCUMENTATION by cg class: DelayedValue comment/format in: #displayOn: #displayString class: DelayedValue class comment/format in: #documentation

"{ Package: 'stx:libbasic2' }"

"{ NameSpace: Smalltalk }"

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

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