[squeak-dev] Set class comment

Levente Uzonyi leves at elte.hu
Tue Mar 30 12:23:12 UTC 2010


On Mon, 29 Mar 2010, Casey Ransberger wrote:

> I noticed that the class comment for Set still thinks you can't stick nil in
> a set. I was going to update it, but I'm a little confused about what's
> going on in #array.

I'm about to fix the class comments for the HashedCollection hierarchy, 
but help is always welcome, especially from a native english speaker.

>
> #(#foo # bar #baz nil) asSet array
>
> {nil . nil . nil . a SetElement . nil . #foo . #baz . nil . nil . nil .
> #bar}
>
> Can I assume that the SetElement is a stand in for the nil item in the Set?

Yes.

>
> See below for what I have so far.
>
> =================================================
>
> As of Squeak 4.1, Sets can contain nil.
>
> I represent a set of objects without duplicates.  I can hold anything that
> responds to
> #hash and #=.  My instances will automatically grow, if necessary,
> Note that I rely on #=, not #==.  If you want a set using #==, use
> IdentitySet.
>
> Instance structure:
>
>  array An array whose non-nil elements are the elements of the set,
> and whose nil elements are empty slots.  There is always at least one nil.
> In fact I try to keep my "load" at 75% or less so that hashing will work
> well.

This also applies for Dictionary, so it'd be better in the comment of 
HashedCollection IMHO.

>
>  tally The number of elements in the set.  The array size is always greater
> than this.

Same as above.

>
> The core operation is #findElementOrNil:, which either finds the position
> where an
> object is stored in array, if it is present, or finds a suitable position
> holding nil, if
> its argument is not present in array,

Same as above, but this is a bit obsolete, #scanFor: is the current lookup 
method, #findElementOrNil: is only a compatibility method now.

I'd be very important to mention that the objects' hash must not change 
while they are added to a set, otherwise the set becomes invalid. If that 
happens #rehash can be used to fix it.


Levente

>



More information about the Squeak-dev mailing list