On Thu, Sep 6, 2012 at 10:44 AM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Mariano,
What would be wrong with something more elegant, like
consumeWhitespace "Strip whitespaces from the input stream."
[ readStream atEnd not and: [ readStream peek isSeparator ] ] whileTrue: [ readStream next ]
?
In my book #peek, which means a one-element pushback buffer, is a whole lot less of a requirement that a general #position[:] interface which actually assumes that all contents is in memory, a contradiction to the concept of streaming.
Well, that seems to work also :)
Maybe these uglier versions are more efficient, but who can say for sure they are correct ?
I have no idea. I would like to fix it with any of the 2 possibilities. Everything is better than being broken. So any other opinion?
;-)
Sven
On 06 Sep 2012, at 10:26, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
Hi guys. I found a problem when exporting/importing chunks with MultiByteBinaryOrTextStream and I think #skipSeparators is wrong. The code is:
MultiByteBinaryOrTextStream >> skipSeparators
[self atEnd] whileFalse: [ self basicNext isSeparator ifFalse: [ ^ self position: self position - 1]]
Problem is that the position is not save, as it is done in
MultiByteFileStream >> skipSeparators
| state character | [ state := converter saveStateOf: self. (character := self next) ifNil: [ false ] ifNotNil: [ character isSeparator ] ] whileTrue. character ifNotNil: [ converter restoreStateOf: self with: state ]
If I copy the implementation from MultiByteFileStream to MultiByteBinaryOrTextStream, my tests work as expected. But I am not a stream expert. So, what do you think? is this change correct?
Thanks,
-- Mariano http://marianopeck.wordpress.com
-- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
-- Mariano http://marianopeck.wordpress.com