Would a PositionableStream>>#peek: be reasonable?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Would a PositionableStream>>#peek: be reasonable?

Chris Muller-3
I have a ReadStream I would like to peek at the next few characters
instead of only the very next character.  Here's a simple 1-minute
implementation proposal, but since it seems strange this was never
added before, I wanted to check my sanity with the brilliant developer
folk, here.

PositionableStream>>peek: anInteger
    "Answer what would be returned if the message next: anInteger
without advancing the internal position pointer."
    | priorPos result |
    priorPos := position.
    result := self next: anInteger.
    position := priorPos.
    ^ result

Thanks,
  Chris

Reply | Threaded
Open this post in threaded view
|

Re: Would a PositionableStream>>#peek: be reasonable?

timrowledge
The only issue I can think of here is that it might be necessary to use "self position: priorPos" or similar in some forms of Stream. Stuff like socket streams perhaps, where moving forwards/backwards could possibly involve flushing & loading of buffers and other occasionally mind-warping actions.

> On 2018-10-06, at 7:07 PM, Chris Muller <[hidden email]> wrote:
>
> I have a ReadStream I would like to peek at the next few characters
> instead of only the very next character.  Here's a simple 1-minute
> implementation proposal, but since it seems strange this was never
> added before, I wanted to check my sanity with the brilliant developer
> folk, here.
>
> PositionableStream>>peek: anInteger
>    "Answer what would be returned if the message next: anInteger
> without advancing the internal position pointer."
>    | priorPos result |
>    priorPos := position.
>    result := self next: anInteger.
>    position := priorPos.
>    ^ result
>
> Thanks,
>  Chris
>
>


tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Strange OpCodes: BPB: Branch on Program Bug



Reply | Threaded
Open this post in threaded view
|

Re: Would a PositionableStream>>#peek: be reasonable?

Chris Muller-3
Ah.  Yes, it seems I was locked into my projects context, and knowing
my own specific Stream types.  I considered sending #position:
instead, but wanted to avoid any possible side-effects -- I simply
wanted to be sure the state of the object was not disturbed, but
you've helped me realize the #next: could have side-effects itself
beyond 'position' which may need undone.

I'm not up to testing all of the stream types so I probably will do
this peeking higher up in my app code.

Thanks.
On Sun, Oct 7, 2018 at 11:59 AM tim Rowledge <[hidden email]> wrote:

>
> The only issue I can think of here is that it might be necessary to use "self position: priorPos" or similar in some forms of Stream. Stuff like socket streams perhaps, where moving forwards/backwards could possibly involve flushing & loading of buffers and other occasionally mind-warping actions.
>
> > On 2018-10-06, at 7:07 PM, Chris Muller <[hidden email]> wrote:
> >
> > I have a ReadStream I would like to peek at the next few characters
> > instead of only the very next character.  Here's a simple 1-minute
> > implementation proposal, but since it seems strange this was never
> > added before, I wanted to check my sanity with the brilliant developer
> > folk, here.
> >
> > PositionableStream>>peek: anInteger
> >    "Answer what would be returned if the message next: anInteger
> > without advancing the internal position pointer."
> >    | priorPos result |
> >    priorPos := position.
> >    result := self next: anInteger.
> >    position := priorPos.
> >    ^ result
> >
> > Thanks,
> >  Chris
> >
> >
>
>
> tim
> --
> tim Rowledge; [hidden email]; http://www.rowledge.org/tim
> Strange OpCodes: BPB: Branch on Program Bug
>
>
>