VirtualArrayWithCache.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2019 14:28:51 +0200
changeset 5050 44fa8672d102
parent 4972 b703758a0d92
child 5388 534a32d00c8f
permissions -rw-r--r--
#DOCUMENTATION by cg class: SharedQueue comment/format in: #next #nextWithTimeout:

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