On 15 Sep 2016 9:29 a.m., <lesz...@chromium.org> wrote: > > Hi all, > > We (ignition) are looking to use base/hashmap (TemplateHashMap), but there are a couple of things that I want to change/add for efficiency's sake. Because these changes would have far-reaching effects, I wanted to send out the proposed changes before trying to upload any CLs. > > My proposed changes are: > Template the value type, so that small types (e.g. ints) can be stored inline rather than allocated > Template the key type, for the same reason > This has some far reaching effects -- e.g. we can't store holes as nullptr keys anymore, but have to have a separate boolean existence flag. I suggest that we have an Entry class that is templated on the key, and specialised for pointer-typed keys to treat null keys as holes. > Template the hash function and remove the hash fields, because passing in our own hash values is asking for trouble
AFAIK the hash arguments are used by the ast-value-factory such that AST value objects stores their hash as a field and pass it to lookups to avoid having to rehash the AST values. We would want something like this for any replacement. It might be possible to store the cached hash files on the hashmap entries themselves, but maybe there is some another reason we currently have them on the AST values. Marja, any thoughts? > Template the equals/matching function, since we'd be having to template it on the key type anyway, to skip that dereference > Move the allocator to a field, because passing different allocators around as parameters is super sketchy > More precisely, move it to a private base class to take advantage of the empty base-class optimisation > Add a function argument to LookupOrInsert which creates the value, since the Value type is templated and so we can't rely on null values to mean newly-inserted entries > And maybe, though I'm less convinced about these: > Return value references directly for Lookup/LookupOrInsert, rather than Entries, to make Entries non-public > Add an stl-like iterator interface rather than Start/Next, also to make Entries non-public > Most of these I could wrap in a particular <Key=void*, Value=void*> implementation that would fairly closely imitate the original hash map, but there would (probably?) still be some differences. > > Comments/questions/rage? > > - Leszek > > -- > -- > v8-dev mailing list > v8-dev@googlegroups.com > http://groups.google.com/group/v8-dev > --- > You received this message because you are subscribed to the Google Groups "v8-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.