LazyArray.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 4328 90ffb6ec8a72
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:
4328
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     1
"
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     2
 COPYRIGHT (c) 2003 by Claus Gittinger
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     3
              All Rights Reserved
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     4
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     5
 This software is furnished under a license and may be used
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     6
 only in accordance with the terms of that license and with the
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     8
 be provided or otherwise made available to, or used by, any
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
     9
 other person.  No title to or ownership of the software is
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    10
 hereby transferred.
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    11
"
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
3845
d3e54fd83dd6 #OTHER by mawalch
mawalch
parents: 3306
diff changeset
    14
"{ NameSpace: Smalltalk }"
d3e54fd83dd6 #OTHER by mawalch
mawalch
parents: 3306
diff changeset
    15
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
ArrayedCollection variableSubclass:#LazyArray
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:'valueGenerator'
3306
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    18
	classVariableNames:'UncomputedValueSingleton'
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Collections-Arrayed'
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
3306
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    23
Object subclass:#UncomputedValue
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    24
	instanceVariableNames:''
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    25
	classVariableNames:''
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    26
	poolDictionaries:''
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    27
	privateIn:LazyArray
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    28
!
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    29
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!LazyArray class methodsFor:'documentation'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
4328
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    32
copyright
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    33
"
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    34
 COPYRIGHT (c) 2003 by Claus Gittinger
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    35
              All Rights Reserved
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    36
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    37
 This software is furnished under a license and may be used
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    38
 only in accordance with the terms of that license and with the
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    39
 inclusion of the above copyright notice.   This software may not
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    40
 be provided or otherwise made available to, or used by, any
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    41
 other person.  No title to or ownership of the software is
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    42
 hereby transferred.
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    43
"
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    44
!
90ffb6ec8a72 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4144
diff changeset
    45
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
documentation
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
"
4144
9093e8aaf912 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
    48
    An Array which computes its values lazily (on demand) and remembers them.
9093e8aaf912 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
    49
    Useful if it is relatively expensive to compute an element, 
9093e8aaf912 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
    50
    and it may be needed again later.
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    [author:]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
        Claus Gittinger (cg@alan)
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    [see also:]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        Lazy
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
examples
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
                                                                [exBegin]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    |squares|
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    squares := LazyArray new:100.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    squares valueGenerator:[:index | index squared].
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    squares at:50.   
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    squares inspect.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
                                                                [exEnd]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
!LazyArray class methodsFor:'initialization'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
initialize
3306
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    77
    UncomputedValueSingleton isNil ifTrue:[
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
    78
        UncomputedValueSingleton := UncomputedValue new.
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    ]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    "
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
     self initialize
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    "
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!LazyArray class methodsFor:'instance creation'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
new:size
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    ^ (super new:size) atAllPut:UncomputedValue
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!LazyArray methodsFor:'accessing'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
at:index
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    |val|
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    val := super at:index.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    val == UncomputedValue ifTrue:[
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
        val := valueGenerator value:index.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
        self at:index put:val.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    ].
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    ^ val.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
valueGenerator:aBlock
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    valueGenerator := aBlock
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
!LazyArray class methodsFor:'documentation'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
version
3845
d3e54fd83dd6 #OTHER by mawalch
mawalch
parents: 3306
diff changeset
   112
    ^ '$Header$'
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
3306
b58330b15063 class: LazyArray
Claus Gittinger <cg@exept.de>
parents: 2713
diff changeset
   115
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
LazyArray initialize!