AA strange behavior

Oskar Linde oskar.lindeREM at OVEgmail.com
Tue Jun 13 03:31:17 PDT 2006


Georg Wrede skrev:
> 
> 
> Carlos Santander wrote:
>> Oskar Linde escribió:
>>> There are other ways. For instance:
>>>
>>> foreach(key;aa.keys)
>>>     aa.remove(key);
>>>
>>> or faster (as you seem to want to delete all elements), but ugly, 
>>> hackish and undocumented:
>>>
>>> struct BB { void *[] buckets; size_t nodes; }
>>>
>>> ....
>>>
>>> (cast(BB*)&aa).buckets = null;
>>> (cast(BB*)&aa).nodes = 0;
>>>
>>> (A wish would be for the above to be implemented as aa.clear())
>>>
>> I think this would be a useful addition to AAs. It has been proposed 
>> more than once, I don't know why Walter hasn't added it yet.
>>
>>> Or if you just want to forget about your current aa instance:
>>>
>>> aa = null;
> 
> Hmm.
> 
> Of course reuse is good. Greenpeace Likes Reuse(tm)!
> 
> But is there really enough merit in reusing a hash, as compared with 
> using a new one? I mean, in both cases we are effectively abandoning the 
> buckets and the nodes to GC. -- To reuse /them/ would give savings, but 
> I'm unable to believe it's worth the effort, or even smart at all.

The AA is a reference type. There can be many references to the same AA. 
aa = null will only change one reference, while the proposed aa.clear() 
would clear the actual AA that all references refer to. There is a 
significant semantic difference.

> What's the real cost of creating a new hash, compared with emptying the 
> old one?

Nothing significant.

/Oskar



More information about the Digitalmars-d-learn mailing list