On Tue, May 17, 2011 at 10:31 PM, Sven Van Caekenberghe
<sven@beta9.be> wrote:
On 17 May 2011, at 21:57, Mariano Martinez Peck wrote:
> Sven, I want to make it work :)
>
> so....the missing methods I told you that I need are:
>
> #nextStringPut:
> #nextNumber:put:
> #nextInt32Put:
> #nextWordPut:
I guess these are pretty easy. But I think they clutter the interface of ZnBufferedWriteStream, so maybe you should make a subclass.
Yeah, don't worry. I can even duplicate the class hehehe
�
> #contents
>
> Implement #contents I guess it is something like:
>
> ZnBufferedWriteStream >> contents
> ^ stream contents
Why to you need #contents ?
becasue I am an idiot. No, I don't need it. You are correct. Thanks for asking.
�
I would say that it goes a bit against the concept of a stream as a sink of data.
I haven't looked, but I would guess that saying #contents to a FileStream is not efficient.
> Those missing methods I need are implemented PositionableStream. I took the implementation from there and �put it in ZnBufferedWriteStream.
> I just added to them a first line " � �self flushBufferIfFull."
That is probably OK, except when your string becomes larger than the buffer. Have a look at #nextPutAll:
I am not sure if I understood. The following are correct for sure then:
�#nextNumber:put:
�#nextInt32Put:
�#nextWordPut:
And #nextStringPut:�� is like this:
nextStringPut: s
��� "Append the string, s, to the receiver.� Only used by DataStream.� Max size of 64*256*256*256."
��� | length |
��� self flushBufferIfFull.
��� (length := s size) < 192
��� �� �ifTrue: [self nextPut: length]
��� �� �ifFalse:
��� �� ��� �[self nextPut: (length digitAt: 4)+192.
��� �� ��� �self nextPut: (length digitAt: 3).
��� �� ��� �self nextPut: (length digitAt: 2).
��� �� ��� �self nextPut: (length digitAt: 1)].
��� self nextPutAll: s asByteArray.
��� ^s
which will finally send #nextPutAll:� that does correct check.� � �
�
> The way I am creating it is like this:
>
> stream := ZnBufferedWriteStream on: ((FileDirectory default forceNewFileNamed: 'mariano') binary).
>
> So...is this correct Sven? � My tests are green :)
That seems OK
Ok.
�
> Still need to try benchmarks.
You might also consider playing with making the buffer larger.
yeah, I was trying that. Just by curious, why you put a 2^X number there?
Ahh and for reading we don't need something special because it is already buffered? (I have been told that)
Thanks a lot Sven,