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