VirtualArrayWithCache.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 5388 534a32d00c8f
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5388
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     1
"{ Encoding: utf8 }"
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     2
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     3
"
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     4
 COPYRIGHT (c) 2018 by eXept Software AG
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     5
              All Rights Reserved
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     6
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     7
 This software is furnished under a license and may be used
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     8
 only in accordance with the terms of that license and with the
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    10
 be provided or otherwise made available to, or used by, any
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    11
 other person.  No title to or ownership of the software is
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    12
 hereby transferred.
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    13
"
4819
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic2' }"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
VirtualArray subclass:#VirtualArrayWithCache
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'lruCache'
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
4972
b703758a0d92 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4819
diff changeset
    22
	category:'Collections-Arrayed'
4819
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!VirtualArrayWithCache class methodsFor:'documentation'!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
5388
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    27
copyright
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    28
"
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    29
 COPYRIGHT (c) 2018 by eXept Software AG
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    30
              All Rights Reserved
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    31
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    32
 This software is furnished under a license and may be used
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    33
 only in accordance with the terms of that license and with the
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    35
 be provided or otherwise made available to, or used by, any
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    36
 other person.  No title to or ownership of the software is
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    37
 hereby transferred.
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    38
"
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    39
!
534a32d00c8f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4972
diff changeset
    40
4819
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
documentation
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    like a VirtualArray, but caches the results of the last few accesses.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    This might behave better, if it is expensive to compute the elements,
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    and they are often accessed repeatedly (as when showing in a listView).
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    [author:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
        Claus Gittinger
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    [instance variables:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    [class variables:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    [see also:]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
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
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
examples
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
                                                                [exBegin]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    |factorialLines|
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    factorialLines := VirtualArrayWithCache new:10000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    factorialLines generator:[:index | index factorial printString].
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    factorialLines at:1000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    factorialLines at:1000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    factorialLines at:10000.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
                                                                [exEnd]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
! !
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
!VirtualArrayWithCache methodsFor:'collection protocol'!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
at:index
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    lruCache isNil ifTrue:[
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
        lruCache := CacheDictionary new:100.
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    ].
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    ^ lruCache at:index ifAbsentPut:[generator value:index]
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    "Created: / 01-03-2019 / 20:35:45 / Claus Gittinger"
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
! !
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!VirtualArrayWithCache class methodsFor:'documentation'!
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
version_CVS
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    ^ '$Header$'
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
! !
2dba3c4a24b6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90