Here's a possible replacement for the hash function in the 
Dictionary class - this one is much more forgiving on strings 
where the only difference is at the end (for example URLs from 
db-driven sites where the only difference in the URL is a 
parameter at the end). It's also very slightly better for 
/usr/dict/words too.

unsigned int hashCode2(const char *key)
{
    char *test;

    long  conv_key = strtol(key,  &test, 10);
    if (key && *key && !*test) // Conversion succeeded
    {
        return conv_key;
    }

    char *base = (char*)malloc( strlen( key ) +2);
    char *tmp_key = base;
    strcpy( tmp_key, key );

    unsigned int h = 0;
    int                 length = strlen(tmp_key);

    if (length >= 16)
    {
        tmp_key += strlen(tmp_key) - 15;
        length = strlen(tmp_key);
    }
    for (int i = length; i > 0; i--)
    {
        h = (h * 37) + *tmp_key++;
    }
    free( base );
    return h;
}

Jamie Anstice
Search Scientist,  S.L.I. Systems, Inc
[EMAIL PROTECTED]
ph:  64 961 3262
mobile: 64 21 264 9347

_______________________________________________
htdig-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/htdig-dev

Reply via email to