On 17 May 2011 22:58, Mariano Martinez Peck
<
marianopeck@gmail.com>
wrote:
>
>
> 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
>