RecursiveSeriesStream.st
author Claus Gittinger <cg@exept.de>
Tue, 19 Nov 2019 11:20:14 +0100
changeset 5257 25c9816018d2
child 5259 fa49d09cad7b
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5257
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
IteratorStream subclass:#RecursiveSeriesStream
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'lastValue'
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'Streams'
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!RecursiveSeriesStream class methodsFor:'documentation'!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
documentation
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    documentation to be added.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
    class:
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
        <a short class summary here, describing what instances represent>
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    responsibilities:    
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
        <describing what my main role is>
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    collaborators:    
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
        <describing with whom and how I talk to>
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
    API:
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
        <public api and main messages>
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
        
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
    example:
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
        <a one-line examples on how to use - can also be in a separate example method>
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
    implementation:
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
        <implementation points>
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    [author:]
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
        cg
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    [instance variables:]
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    [class variables:]
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    [see also:]
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
example
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
        |s|
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
        s := RecursiveSeriesStream on:[:n | n/2] startValue:1.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
        s next:10.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
        s next:10.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        s := RecursiveSeriesStream on:[:n | n even ifTrue:[n/2] ifFalse:[n*3+1]] startValue:10.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        s next:10.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        s next:10.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
example2
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        |s|
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
        1 to:100 collect:[:n0 |
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
                s := RecursiveSeriesStream on:[:n | n even ifTrue:[n/2] ifFalse:[n*3+1]] startValue:n0.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
                s next:10.   
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        ]
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
! !
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
!RecursiveSeriesStream class methodsFor:'instance creation'!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
on:aBlock startValue:startValue
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    ^ self basicNew initialize iterator:aBlock startValue:startValue
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
! !
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
!RecursiveSeriesStream methodsFor:'accessing'!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
iterator:aOneArgBlock startValue:startValue
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    iterator := aOneArgBlock.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    lastValue := startValue.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
! !
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!RecursiveSeriesStream methodsFor:'reading'!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
next
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    "return the next element from the stream by evaluating the nextBlock"
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    |prevValue|
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    prevValue := lastValue.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    lastValue := iterator value:lastValue.
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    ^ prevValue
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
! !
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
!RecursiveSeriesStream class methodsFor:'documentation'!
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
version_CVS
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    ^ '$Header$'
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
! !
25c9816018d2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104