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

Reply via email to