[Pharo-project] Small improvement for WriteStream >> nextPutAll:
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
> 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:
> 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
> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pharo-project