[Pharo-project] Small improvement for WriteStream >> nextPutAll:

Eliot Miranda eliot.miranda at gmail.com
Mon Jan 9 00:18:39 CET 2012


On Sun, Jan 8, 2012 at 5:46 AM, Mariano Martinez Peck <marianopeck at gmail.com
> wrote:

> Hi guys. Some time ago Henry spot to us a small improvement for
> WriteStream >> nextPutAll: that we are using in Fuel, but I think it can be
> general. Henry comment was exactly:
>
> *Also: For variableBytes classes, if you rewrite:
>
> WriteStream
> nextPutAll: aCollection
>
>      | newEnd |
>      collection class instSpec == aCollection class instSpec ifFalse:
>          [^ super nextPutAll: aCollection ].
>
>      newEnd := position + aCollection size.
>      newEnd > writeLimit ifTrue:
>          [self growTo: newEnd + 10].
>
>      collection replaceFrom: position+1 to: newEnd  with: aCollectionstartingAt: 1.
>      position := newEnd.
>
>     ^ aCollection
>
> You can now pass all variableByte classes (Like ByteString) directly to a
> stream with a ByteArray collection, and the replaceFrom:to:with:*
> *startingAt: primitive will work correctly, just like the file primitive
> does
> This means you don't need special Serializers for these either,  using
> f.ex. clunky nextStringPutAll: methods with manual asByteArray conversions.
> *
>
>
> So...if you agree, I can commit the patch.
>

Surely this will break special encoded strings where the encode/decode is
done in at:/at:put:.  Moving the bytes isn't safe in general.  However, if
the programmer knows they themselves can use next:putAll:startingAt: or
some such.  I don't think your suggestion is safe in general for
WriteStream.  Instead if  next:putAll:startingAt: doesn't do the job invent
some new protocol that will.


> Let me know.
>
> --
> Mariano
> http://marianopeck.wordpress.com
>
>


-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gforge.inria.fr/pipermail/pharo-project/attachments/20120108/cf3fc847/attachment.htm>


More information about the Pharo-project mailing list