Feature to get or add value to an associative array.
Giles Bathgate
giles.bathgate at gmail.com
Fri Apr 20 13:41:40 UTC 2018
On Friday, 20 April 2018 at 08:37:59 UTC, Nick Treleaven wrote:
> Again, would the delegate calls always be inlined, in all cases?
>
> I think having a low-level API in druntime is appropriate, it's
> a runtime library after all.
So the low-level API you are requesting is part of the pull
request, the low-level API is called _aaGetX, whereas the
previous API was _aaGetY, the new API adds a boolean out
parameter `found` and if you really wanted to you could do this:
-----
extern (C) void* _aaGetX(void** paa, const
TypeInfo_AssociativeArray ti, in size_t valuesize, in void* pkey,
out bool found) pure nothrow;
V* slot(K, V)(ref V[K] aa, K key, out bool found)
{
return cast(V*) _aaGetX(cast(void**)&aa, typeid(V[K]),
V.sizeof, &key, found);
}
-----
I am also benchmarking the `update` function I talked about
previously.
https://gist.github.com/GilesBathgate/8409b5889ebb7b1302627c50f342a28b
The results seem to indicate that there isn't much in it
performance wise.
test1 [56 ms, 377 µs, and 4 hnsecs]
test2 [56 ms, 262 µs, and 2 hnsecs]
I can't fathom why the delegates version is faster, but I am just
putting it down to luck ;)
More information about the Digitalmars-d
mailing list