[squeak-dev] The Inbox: CollectionsTests-dtl.212.mcz
Levente Uzonyi
leves at elte.hu
Sun Jan 19 20:46:43 UTC 2014
On Sun, 19 Jan 2014, Levente Uzonyi wrote:
>
>
> On Sun, 19 Jan 2014, David T. Lewis wrote:
>
>> On Sun, Jan 19, 2014 at 06:06:37PM +0100, Levente Uzonyi wrote:
>>> On Sun, 19 Jan 2014, Nicolas Cellier wrote:
>>>
>>>> It's a bug. Let's remove the optimizatoin. If we really want it, this
>>>> could be a implemented like
>>>>
>>>> WriteStream>>sharedContents? | sz | ^(sz := position max: readLimit) =
>>>> collection size ifTrue: [collection] ifFalse: [collection copyFrom: 1 to:
>>>> sz]
>>>
>>> #new:streamContents: is about optimization, nothing else. I think it's a
>>> better solution to set the stream to the end before comparing the position
>>> with the size, because I don't see any other possible use for
>>> #sharedContents.
>>
>> Do you mean something like this?
>>
>> new: newSize streamContents: blockWithArg
>> | stream p endPos |
>> stream := WriteStream on: (self new: newSize).
>> blockWithArg value: stream.
>> p := stream position.
>
> It doesn't matter what the current position of the stream is. If there's data
> after the current position, then #contents will return it. So I think this is
Um, it seems like #contents only cares about position, but not readLimit
(even though it updates readLimit), which may or may not be a bug...
Levente
> how the method should be:
>
> new: newSize streamContents: blockWithArg
>
> | stream |
> stream := WriteStream on: (self new: newSize).
> blockWithArg value: stream.
> stream setToEnd position = newSize
> ifTrue: [ ^stream originalContents ]
> ifFalse: [ ^stream contents ]
>
>
> Levente
>
>> endPos := stream setToEnd position.
>> p = endPos
>> ifTrue: [p = newSize
>> ifTrue: [^ stream originalContents]]
>> ifFalse: [stream position: p].
>> ^ stream contents
>>
>>
>> I'm not sure what that would do to the performance gains.
>>
>> Dave
>>
>>
>>
>
>
More information about the Squeak-dev
mailing list
|