[squeak-dev] Re: SparseLargeTable
nicolas cellier
ncellier at ifrance.com
Tue Nov 4 00:44:39 UTC 2008
Eliot Miranda a écrit :
>
> Sure this does not really matter, I doubt this access be the
> bottleneck of any code, and maybe you already hacked primitive 31...
>
>
> No, but if you have, I'm all ears :)
>
>
> ------------------------------------------------------------------------
>
>
Hehe, I don't even know the man-hour cost of such a hack...
The day when identified as a real bottleneck i will have a look.
Concerning SparseLargeTable, I can understand the utility of base as:
any element of index < base is known to be = defaultValue.
This should economize some space by reducing basicSize requirement...
But it does not !
Browse #new:chunkSize:arrayClass:base:defaultValue:
Also, with base ~= 1, things like #printString become strange:
(SparseLargeTable new: 3 chunkSize: 3 arrayClass: Array base: 2
defaultValue: -1) printString.
-> 'a SparseLargeTable(-1 -1)'
Though its size is 3, and:
| tmp |
tmp := SparseLargeTable new: 3 chunkSize: 3 arrayClass: Array base: 2
defaultValue: -1.
(1 to: 3) collect: [:i | tmp at: i]
-> #(-1 -1 -1)
Also, in #analyzeSpaceSaving total should be either
total := size - base + 1.
or:
total := size.
but not:
total := size - base.
as you proposed.
Also, lastChunkSize is not set to a correct size.
It should be:
(lastChunkSize := size - base + 1 \\ chunkSize) = 0 ifTrue:
[lastChunkSize := chunkSize].
which can be more efficiently written:
lastChunkSize := size - base \\ chunkSize + 1.
Well, I guess every one use with base = 1...
Nicolas
More information about the Squeak-dev
mailing list
|