On Friday, 30 August 2019 at 13:43:54 UTC, XavierAP wrote:
On Thursday, 29 August 2019 at 10:11:58 UTC, berni wrote:
Iterating of some structure and removing elements thereby is always errorprone and should be avoided. But: In case of AA, I've got the feeling, that it might be safe:

foreach (k,v;ways)
    if (v.empty)
        ways.remove(k);

Do you agree? Or is there a better way to achieve this?

It compiles and it runs without throwing any RangeError... So it appears to be safe. Otherwise it'd be a bug that there's not error.

Whether you actually get an error at runtime depends on the load factor of the AA. If it drops below a certain threshold, the AA will be resized [1], and its original memory will be freed [2].

[1] https://github.com/dlang/druntime/blob/master/src/rt/aaA.d#L631 [2] https://github.com/dlang/druntime/blob/master/src/rt/aaA.d#L154

Reply via email to