hi,

I have a class which I want to use as key in an assoc array like
this:

string["KeyString"] myArray;

What i want is to preserve the order in the array. I want always
to have "1" before "2" if the string is a numeric value.

Can anyone help me to understand how const hash_t toHash() should
work?

Here is the KeyString class:

struct KeyString {
        string str;
        
        KeyString opAssign(string val) {
                str = val;
                return this;
        }
        
        const hash_t toHash() {
                try {
                        return to!long(str);
                } catch(Exception e) {
                        hash_t hash; foreach (char c; str) hash = (hash * 9) + 
c;
                        return hash;
                }
        }
        
        const int opCmp(ref const KeyString s) {
                //return std.string.cmp(this.str, s.str);
                
                try {
                        auto val1 = to!long(this.str);
                        auto val2 = to!long(s.str);
                        
                        if(val1 < val2) {
                                return -1;
                        }
                        
                        if(val1 == val2) {
                                return 0;
                        }
                        
                } catch(Exception e) {
                        return std.string.cmp(str, s.str);
                }
                
                return 1;
        }
}


Thanks,
Bogdan

Reply via email to