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:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4819
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
VirtualArray subclass:#VirtualArrayWithCache
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'lruCache'
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
4972
b703758a0d92 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4819
diff changeset
     9
	category:'Collections-Arrayed'
4819
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!VirtualArrayWithCache class methodsFor:'documentation'!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
documentation
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    like a VirtualArray, but caches the results of the last few accesses.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    This might behave better, if it is expensive to compute the elements,
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
    and they are often accessed repeatedly (as when showing in a listView).
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
    [author:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
        Claus Gittinger
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
    [instance variables:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
    [class variables:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
    [see also:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
examples
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
                                                                [exBegin]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
    |factorialLines|
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
    factorialLines := VirtualArrayWithCache new:10000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    factorialLines generator:[:index | index factorial printString].
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    factorialLines at:1000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    factorialLines at:1000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    factorialLines at:10000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
                                                                [exEnd]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
! !
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!VirtualArrayWithCache methodsFor:'collection protocol'!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
at:index
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    lruCache isNil ifTrue:[
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
        lruCache := CacheDictionary new:100.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    ].
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    ^ lruCache at:index ifAbsentPut:[generator value:index]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    "Created: / 01-03-2019 / 20:35:45 / Claus Gittinger"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
! !
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!VirtualArrayWithCache class methodsFor:'documentation'!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
version_CVS
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    ^ '$Header$'
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
! !
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63