IteratorStream.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 5260 2cc9d375be98
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:
5260
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
     1
"{ Encoding: utf8 }"
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
     2
5256
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 2019 by Claus Gittinger
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
              All Rights Reserved
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic2' }"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
PeekableStream subclass:#IteratorStream
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'idx iterator contentsSpecies'
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Streams'
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!IteratorStream class methodsFor:'documentation'!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
copyright
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 COPYRIGHT (c) 2019 by Claus Gittinger
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
              All Rights Reserved
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 This software is furnished under a license and may be used
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 only in accordance with the terms of that license and with the
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
 be provided or otherwise made available to, or used by, any
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
 other person.  No title to or ownership of the software is
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
 hereby transferred.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
documentation
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    This is a pseudo stream, which generates values by using an iterator action;
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    this is a block which is called to generate the value to read.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    The block gets the index (1..) as argument.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    [author:]
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
        Claus Gittinger
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    [instance variables:]
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    [class variables:]
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    [see also:]
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        Iterator
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
example
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        |s|
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
        s := IteratorStream on:[:i | i].
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        s next:10.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        s next:10.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        s := IteratorStream on:[:i | i*2].
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
        s next:10.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
! !
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
!IteratorStream class methodsFor:'instance creation'!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
on:aBlock
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    ^ self basicNew initialize iterator:aBlock
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
! !
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
!IteratorStream methodsFor:'accessing'!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
5260
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
    81
atEnd
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
    82
    ^ false
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
    83
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
    84
!
2cc9d375be98 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
    85
5256
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
contentsSpecies
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    "return a class of which instances will be returned, when
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
     parts of the collection are asked for. 
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
     (see upTo-kind of methods in Stream)"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    ^ contentsSpecies ? Array
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
contentsSpecies:aCollectionClass
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    contentsSpecies := aCollectionClass.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
iterator:aOneArgBlock
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    iterator := aOneArgBlock.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
position
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    ^ idx
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
position:newPosition
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    idx := newPosition
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
! !
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
!IteratorStream methodsFor:'initialization'!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
initialize
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    super initialize.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    idx := 0.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
! !
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
!IteratorStream methodsFor:'reading'!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
next
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    "return the next element from the stream by evaluating the nextBlock"
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    iterator notNil ifTrue:[
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
        idx := idx + 1.
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
        ^ iterator value:idx
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    ].
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    self error:'iterator is undefined'
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
! !
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
!IteratorStream class methodsFor:'documentation'!
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
version_CVS
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    ^ '$Header$'
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
! !
ec058e3c82a1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134