Associative arrays in D and default comparators
Sean Kelly
sean at f4.ca
Fri Sep 8 08:21:12 PDT 2006
Walter Bright wrote:
> Sean Kelly wrote:
>> Walter Bright wrote:
>>> Can you give an example of a class that could not have a meaningful
>>> opCmp implementation that one would want to put into an AA?
>>
>> The one I've been wrestling with is a Thread class, as it has no data
>> that is static and unique for the life of the object. The thread id
>> is only guaranteed to be unique while the thread is active, and the id
>> isn't even assigned until Thread.start is called. Threads simply have
>> no features which inherently support ordering, but it makes sense to
>> compare two Thread objects for equality simply by comparing object
>> addresses.
>
> How do you do a hash for it if there's no constant data?
Using address, currently :-p But that obviously has to change. What
might make the most sense from a hash perspective would be something
like this:
class C {
hash_t hash;
hash_t toHash() {
if (hash != hash.init)
return hash;
hash = cast(hash_t) this;
return hash;
}
}
But that leaves opCmp to wrestle with. An "object id" would be a
reasonable universal solution, but I don't want to pay for the
synchronized op on construction. I suppose I'm simply having a hard
time getting over the idea that an object's address is is not a unique
identifier in GCed languages.
Sean
More information about the Digitalmars-d
mailing list