On Friday, 4 March 2016 at 16:46:35 UTC, Steven Schveighoffer
wrote:
You cannot add or remove keys. You can modify values for
existing keys.
Note, in your code, this would not cause a problem, since
setting hash to null just removes the reference from the local
variable 'hash', it does not alter the AA in any way.
In dcollections, all containers support "purging", or iterating
through elements, removing the current element if desired
before moving to the next. But I haven't touched this library
in ages, I don't know if it still compiles even.
-Steve
Thank you for it. Now I know.
I will copy and modify AA source to customize. (src/rt/aaA.d)
I wonder what if D support safe variant like safeByKeyValue.
Actually it seems easy (in aaA.d):
bool _aaRangeEmpty(Range r)
{
return r.impl is null || r.idx == r.dim;
}
can be changed to:
bool _aaRangeEmptySafe(Range r)
{
if(r.impl is null || r.idx >= r.dim) return true;
if (!r.buckets[r.idx].filled) throw xxxException();
return false;
}
It can become safe by a cost of small overhead.
-- Aki.