LazyArray.st
author Stefan Vogel <sv@exept.de>
Fri, 28 Mar 2008 13:48:17 +0100
changeset 1937 09fb98759b4a
parent 1300 e606c08de0a6
child 2713 235621fd5dff
permissions -rw-r--r--
Clean up: - inappropriate peer and port settings - method categories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1300
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
ArrayedCollection variableSubclass:#LazyArray
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'valueGenerator'
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:'UncomputedValue'
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Collections-Arrayed'
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!LazyArray class methodsFor:'documentation'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
documentation
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    An Array which computes its value lazyly (on demand).
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    [author:]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
        Claus Gittinger (cg@alan)
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    [see also:]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
        Lazy
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
examples
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
                                                                [exBegin]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
    |squares|
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
    squares := LazyArray new:100.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
    squares valueGenerator:[:index | index squared].
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
    squares at:50.   
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
    squares inspect.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
                                                                [exEnd]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!LazyArray class methodsFor:'initialization'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
initialize
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    UncomputedValue isNil ifTrue:[
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
        UncomputedValue := Object new.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    ]
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    "
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
     self initialize
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    "
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!LazyArray class methodsFor:'instance creation'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
new:size
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    ^ (super new:size) atAllPut:UncomputedValue
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
!LazyArray methodsFor:'accessing'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
at:index
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    |val|
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    val := super at:index.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    val == UncomputedValue ifTrue:[
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
        val := valueGenerator value:index.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        self at:index put:val.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    ].
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    ^ val.
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
valueGenerator:aBlock
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    valueGenerator := aBlock
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
!LazyArray class methodsFor:'documentation'!
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
version
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    ^ '$Header: /cvs/stx/stx/libbasic2/LazyArray.st,v 1.1 2003-08-27 18:25:25 cg Exp $'
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
! !
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
e606c08de0a6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
LazyArray initialize!