PeekableStream.st
author Claus Gittinger <cg@exept.de>
Mon, 24 Aug 1998 18:32:06 +0200
changeset 3777 f351744c575f
parent 2421 0b8966d99a87
child 4404 417e6668f732
permissions -rw-r--r--
fix terminate/interrupt/reschedule while in osWait (win32)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     1
"
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
379
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
     3
	      All Rights Reserved
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     4
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    11
"
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    12
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    13
Stream subclass:#PeekableStream
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    14
	instanceVariableNames:''
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    15
	classVariableNames:''
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    16
	poolDictionaries:''
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    17
	category:'Streams'
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    18
!
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    19
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    20
!PeekableStream class methodsFor:'documentation'!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    21
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    22
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    23
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    24
 COPYRIGHT (c) 1994 by Claus Gittinger
379
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
    25
	      All Rights Reserved
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    26
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    27
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    28
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    30
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    31
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    32
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    33
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    34
!
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    35
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    36
documentation
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    37
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    38
    abstract superclass for all Stream which support read-ahead
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    39
    (i.e. peeking) of one element.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    40
    Concrete subclasses must implement a peek method.
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    41
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    42
    [author:]
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 701
diff changeset
    43
        Claus Gittinger
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    44
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    45
! !
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    46
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    47
!PeekableStream methodsFor:'reading'!
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    48
611
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    49
nextDecimalInteger
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    50
    "read the next integer in radix 10. dont skip whitespace.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    51
     The streams elements should be characters."
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    52
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    53
    |nextOne value|
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    54
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    55
    nextOne := self peek.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    56
    value := 0.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    57
    [nextOne notNil and:[nextOne isDigitRadix:10]] whileTrue:[
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    58
	value := (value * 10) + nextOne digitValue.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    59
	nextOne := self nextPeek
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    60
    ].
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    61
    ^ value
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    62
!
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    63
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    64
nextPeek
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    65
    "advance to next element and return the peeked element"
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    66
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    67
    self next.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    68
    ^ self peek
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    69
!
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    70
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    71
peek 
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    72
    "return the next element of the stream without advancing (i.e.
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    73
     the following send of next will return this element again.)
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    74
     - we do not know here how to do it, it must be redefined in subclass"
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    75
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    76
    ^ self subclassResponsibility
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    77
!
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    78
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    79
peekFor:anObject 
369
claus
parents: 282
diff changeset
    80
    "if the next-to-be-read object is equal to the argument, anObject, read it
claus
parents: 282
diff changeset
    81
     and return true. Otherwise, leave the receiver unaffected and return false."
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    82
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    83
    self peek = anObject ifTrue:[
379
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
    84
	self next.
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
    85
	^ true
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    86
    ].
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    87
    ^ false
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    88
!
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
    89
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    90
skipAny:skipCollection
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    91
    "skip all characters included in the argument-set.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    92
     returns the next peeked element or nil, if the end-of-stream was reached."
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    93
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    94
    |nextOne|
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    95
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    96
    nextOne := self peek.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
    97
    [nextOne notNil and:[skipCollection includes:nextOne]] whileTrue:[
379
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
    98
	self next.
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
    99
	nextOne := self peek
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   100
    ].
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   101
    ^ nextOne
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   102
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   103
    "
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   104
     |s skipChars|
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   105
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   106
     s := ReadStream on:'some numbers1234with\in other99 stuff' withCRs.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   107
     skipChars := 'abcdefghijklmnopqrstuvwxyz\ ' withCRs.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   108
     s skipAny:skipChars.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   109
     Transcript showCR:(Integer readFrom:s).
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   110
     s skipAny:skipChars.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   111
     Transcript showCR:(Integer readFrom:s).
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   112
    "
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   113
!
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   114
611
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   115
skipSeparators
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   116
    "skip all whitespace; returns the next peeked element or
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   117
     nil, if the end-of-stream was reached.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   118
     The streams elements should be characters.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   119
     Notice: compare this method to skipSpaces"
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   120
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   121
    |nextOne|
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   122
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   123
    nextOne := self peek.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   124
    [nextOne notNil and:[nextOne isSeparator]] whileTrue:[
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   125
	self next.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   126
	nextOne := self peek
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   127
    ].
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   128
    ^ nextOne
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   129
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   130
    "
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   131
     |s|
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   132
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   133
     s := ReadStream on:'one      two\three' withCRs.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   134
     s skipSeparators.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   135
     Transcript showCR:(s nextWord).
611
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   136
     s skipSeparators.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   137
     Transcript showCR:(s nextWord).
611
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   138
     s skipSeparators.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   139
     Transcript showCR:(s next displayString).
611
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   140
    "
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   141
!
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   142
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   143
skipSeparatorsExceptCR
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   144
    "skip all whitespace except carriage return; returns the 
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   145
     next peeked element or nil, if the end-of-stream was reached.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   146
     The streams elements should be characters.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   147
     Notice: compare this method to skipSpaces and skipSeparators"
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   148
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   149
    |nextOne|
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   150
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   151
    nextOne := self peek.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   152
    [nextOne notNil 
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   153
     and:[nextOne isSeparator
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   154
     and:[nextOne ~~ Character cr]]] whileTrue:[
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   155
	self next.
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   156
	nextOne := self peek
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   157
    ].
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   158
    ^ nextOne
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   159
!
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   160
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   161
skipSpaces
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   162
    "skip all spaces; returns the next peeked element or
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   163
     nil, if the end-of-stream was reached.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   164
     The streams elements should be characters.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   165
     Notice: this one skips only spaces (i.e. no cr, tabs etc)
379
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
   166
	     usually, skipSeparators is what you want."
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   167
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   168
    |nextOne|
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   169
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   170
    nextOne := self peek.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   171
    [nextOne notNil and:[nextOne == Character space]] whileTrue:[
379
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
   172
	self next.
5b5a130ccd09 revision added
claus
parents: 369
diff changeset
   173
	nextOne := self peek
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   174
    ].
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   175
    ^ nextOne
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   176
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   177
    "
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   178
     |s|
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   179
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   180
     s := ReadStream on:'one      two\three' withCRs.
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   181
     s skipSpaces.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   182
     Transcript showCR:(s nextWord).
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   183
     s skipSpaces.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   184
     Transcript showCR:(s nextWord).
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   185
     s skipSpaces.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1295
diff changeset
   186
     Transcript showCR:(s next displayString).
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   187
    "
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   188
!
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   189
2419
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   190
upToMatching:aBlock
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   191
    "Return the next elements up to but not including the next element
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   192
     for which aBlock returns true.
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   193
     The next read will return that matching element."
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   194
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   195
    |answerStream element|
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   196
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   197
    answerStream := WriteStream on:(self contentsSpecies new).
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   198
    [self atEnd] whileFalse: [
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   199
        element := self peek.
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   200
        (aBlock value:element) ifTrue: [^ answerStream contents].
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   201
        answerStream nextPut:element.
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   202
        self next.
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   203
    ].
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   204
    ^ answerStream contents
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   205
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   206
    "
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   207
     'hello world' readStream upToMatching:[:c | c isSeparator].
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   208
    "
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   209
2421
0b8966d99a87 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2419
diff changeset
   210
    "Modified: 26.2.1997 / 12:20:57 / cg"
2419
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   211
!
13804903a785 added #upToMatching:
Claus Gittinger <cg@exept.de>
parents: 2060
diff changeset
   212
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   213
upToSeparator
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   214
    "Return the next elements up to but not including the next separator.
2060
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   215
     The elements are supposed to understand #isSeparator."
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   216
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   217
    |answerStream element|
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   218
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   219
    answerStream := WriteStream on:(self contentsSpecies new).
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   220
    [self atEnd] whileFalse: [
2060
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   221
        element := self peek.
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   222
        element isSeparator ifTrue: [^answerStream contents].
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   223
        answerStream nextPut: element.
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   224
        self next.
68
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   225
    ].
59faa75185ba *** empty log message ***
claus
parents: 58
diff changeset
   226
    ^ answerStream contents
2060
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   227
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   228
    "
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   229
     'hello world' readStream upToSeparator
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   230
    "
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   231
4f93a792ba9d commentary
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   232
    "Modified: 4.1.1997 / 23:38:05 / cg"
611
80bb0f1a7bab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   233
! !
58
b5453a2ff4aa Initial revision
claus
parents:
diff changeset
   234
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   235
!PeekableStream class methodsFor:'documentation'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   236
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   237
version
2421
0b8966d99a87 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2419
diff changeset
   238
    ^ '$Header: /cvs/stx/stx/libbasic/PeekableStream.st,v 1.18 1997-02-26 11:24:48 cg Exp $'
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   239
! !