How to use a class as key type in AAs?
    Jarrett Billingsley 
    kb3ctd2 at yahoo.com
       
    Sun Jul  6 11:02:44 PDT 2008
    
    
  
"Moritz Warning" <moritzwarning at web.de> wrote in message 
news:g4r043$28f$1 at digitalmars.com...
> I've read the docs and implemented size_t getHash, int opEquals(Object o)
> and int opCmp(Object o); but it still doesn't work.
>
> The following code prints out: 2 2 1
>
> Btw.: I tested (new Foo(1)) == (new Foo(1)) and it gives true,
> (new Foo(1)) == (new Foo(2)) gives false.
>
>
> void main()
> {
> class Foo
> {
> uint i;
> this(uint i ) { this.i = i; }
>
> size_t getHash()
> {
> return this.i;
> }
>
> int opEquals(Object o)
> {
> auto t = cast(Foo) o;
> if(t is null) return false;
> return (this.i == t.i);
> }
>
> int opCmp(Object o)
> {
> return opEquals(o);
> }
> }
You don't have opCmp implemented correctly.  opEquals returns true if they 
are equal, while opCmp returns 0.
It should be
int opCmp(Object o)
{
    auto t = cast(Foo)o;
    if(t is null)
        return 1;
    return i < t.i ? -1 : i > t.i ? 1 : 0;
} 
    
    
More information about the Digitalmars-d-learn
mailing list