Reserving/Preallocating associative array?

bearophile bearophileHUGS at lycos.com
Fri Dec 27 03:02:39 PST 2013


Benjamin Thaut:

> If you replace the default hash function D uses with the MurMur 
> hash function it brings it down even more to 8 seconds 
> (29425713 ticks)

What compiler are you using? ldc2?

And is it a good idea to put MurMur in D?


> 50%  find free entry in hashmap
> 21%  parse uint

Perhaps the parse uint times can be improved. A lightly tested 
function to try:


uint toUint(const(char)[] txt) pure nothrow {
     auto p = txt.ptr;
     const q = p + txt.length;

     // Skip leading not-digits.
     while (p < q && (*p < '0' || *p > '9'))
         p++;

     uint result = 0;
     while (p < q && *p >= '0' && *p <= '9') {
         result = (result * 10) + (*p - '0');
         p++;
     }
     return result;
}

void main() {
     import std.stdio;
     "".toUint.writeln;
     "x".toUint.writeln;
     "-1".toUint.writeln;
     " 125 ".toUint.writeln;
     " 10000".toUint.writeln;
     " 1000000 ".toUint.writeln;
     " 10000000000000 ".toUint.writeln;
}


Its output (it's not a safe conversion):

0
0
1
125
10000
1000000
1316134912

Bye,
bearophile


More information about the Digitalmars-d mailing list