Yeah, I understand. The thing is that we will remove in the near future MultiByteFileStream. And not all streams have conceptually a position. Today there was a mail from Sven about that.
On Mon, Nov 13, 2017 at 2:48 PM, Prof. Andrew P. Black <bl...@cs.pdx.edu> wrote: > > > On 2 Nov 2017, at 10:10 , Guillermo Polito <guillermopol...@gmail.com> > wrote: > > > > My first hunch is that you don't want to change PositionableStream. > Because it works on collections and files (because of inheritance). But not > on other kind of streams that are not part of the hierarchy, such as > sockets. And we are cleaning that part. > > > > Instead, some time ago Sven produced a really nice hierarchy of stream > decorators. Check the package: > > > > Zinc-Character-Encoding-Core > > > > There you have > > > > ZnBufferedReadStream > > > > That implements buffering in an orthogonal way. Maybe it makes more > sense to put such method there? > > > > I wanted this to be something light-weight. I really don’t want to have > to wrap my stream in a decorator before peeking ahead. > > Because I’m doing this in SmaCC, I implemented #explore: (that’s the name > I chose) in SmaCCLineNumberStream. But I think that the general solution > is to put this method in a Trait, so that it can be combined into any > stream, whether or not that stream inherits from PositionableStream. There > are probably other methods that could go in such a trait too. > > Actually, the idea of resetting a stream to a prior position is much less > general, and easier to implement, then general positionability. Over the > weekend I posted an issue that discusses positioning a MultiButeFileStream > — that’s a good example. > > Here is my implementation — really simple. > > ``` > explore: aBlock > "evaluate aBlock with this stream as argument. When done, reset > my position to the current position." > > | savedPosition | > savedPosition := self position. > [ ^ aBlock value: self ] ensure: [ self position: savedPosition ] > ``` > > Andrew > > > > > -- Guille Polito Research Engineer Centre de Recherche en Informatique, Signal et Automatique de Lille CRIStAL - UMR 9189 French National Center for Scientific Research - *http://www.cnrs.fr <http://www.cnrs.fr>* *Web:* *http://guillep.github.io* <http://guillep.github.io> *Phone: *+33 06 52 70 66 13