https://issues.dlang.org/show_bug.cgi?id=2504: reserve for associative arrays
Jon Degenhardt via Digitalmars-d
digitalmars-d at puremagic.com
Wed Nov 2 17:40:35 PDT 2016
On Wednesday, 2 November 2016 at 03:36:42 UTC, Andrei
Alexandrescu wrote:
>
> Last time I looked our associative arrays were arrays of
> singly-linked lists. It follows that in order to implement
> reserve() we'd need a freelist allocator approach, which
> preallocates a bunch of nodes in a single contiguous block of
> memory.
>
Aren't associative arrays using open addressing for collision
resolution? I'm looking at routines findSlotInsert() and
findSlotLookup() here:
https://github.com/dlang/druntime/blob/master/src/rt/aaA.d#L102
There is already a resize() routine:
https://github.com/dlang/druntime/blob/master/src/rt/aaA.d#L141
The resize() routine takes the new size of the bucket array as an
argument. Could a 'reserve' routine call this? Scanning through
the code, it appears policy on size of the bucket array is
established by callers to resize(), e.g. see the _aaRehash()
function, which calls resize().
More information about the Digitalmars-d
mailing list