ok thanks
I see the implementation was smart.

Stef
On Dec 25, 2009, at 7:46 PM, Levente Uzonyi wrote:

> On Fri, 25 Dec 2009, Stéphane Ducasse wrote:
> 
>> Hi levente
>> 
>> Reading your changes I was wondering if resetTo: should not be moved into 
>> OrderedCollection class >> new:
>> and why only have it for the default new?
> 
> The patch below had the purpose to speed up #asOrderedCollection in general. 
> But I think #resetTo: can be moved to #new: or even to #setCollection: on the 
> instance side, since I don't see any benefit for using array size // 3 for 
> firstIndex. I guess the original idea was to leave enough space on both sides 
> of the array, so adding to both sides has good performance, though in general 
> this is not the case, because #makeRoomAtFirst and #makeRoomAtLast doesn't 
> leave space on both sides.
> 
> o := OrderedCollection new.
> [
>       1 to: 10000 do: [ :each |
>               o
>                       addFirst: each;
>                       addFirst: each ] ] timeToRun ===> 4
> 
> o := OrderedCollection new.
> [
>       1 to: 10000 do: [ :each |
>               o
>                       addLast: each;
>                       addLast: each ] ] timeToRun ===> 3
> 
> o := OrderedCollection new.
> [
>       1 to: 10000 do: [ :each |
>               o
>                       addFirst: each;
>                       addLast: each ] ] timeToRun ===> 20067
> 
> 
> Levente
> 
>> 
>> OrderedCollection class >>newFrom: aCollection
>>      "Answer an instance of me containing the same elements as aCollection."
>> 
>> +    ^(self new: aCollection size)
>> +            resetTo: 1;
>> +            addAll: aCollection;
>> +            yourself
>> -    | newCollection |
>> -    newCollection := self new: aCollection size.
>> -    newCollection addAll: aCollection.
>> -    ^newCollection
>> 
>> I did
>>      OrderedCollection new: 100.
>>      and contrary to what I expected firstIndex is not 1 but 33.
>>      Now when you add resetTo: 1     firstIndex get 1.
>> 
>> new: anInteger
>>      "Create a collection with enough room allocated to contain up to 
>> anInteger elements.
>>      The new instance will be of size 0 (allocated room is not necessarily 
>> used)."
>>      ^self basicNew setCollection: (Array new: anInteger)
>> 
>> setCollection: anArray
>>      array := anArray.
>>      self reset
>> 
>> reset
>>      firstIndex := array size // 3 max: 1.
>>      lastIndex := firstIndex - 1
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to