Thank you for the suggestion Ben! On Tuesday, November 10, 2020 at 5:14:35 AM UTC-5 Ben Noordhuis wrote:
> On Tue, Nov 10, 2020 at 4:54 AM jres...@gmail.com <jres...@gmail.com> > wrote: > > > > I would like to cache Persistent handles in such a way that I can > retrieve the same Persistent instance given the identical JS object, i.e. > imagine a function like so: > > > > Persistent<Object> GetPersistentForObject(Local<Object> obj) > > { > > // If we have already created a Persistent for obj, find and return it. > > // Otherwise, create and return a Persistent for obj and cache it for > > // future calls. > > } > > > > The obvious thought is to store the Persistent handles in a map of some > kind, but what to use as the key? I assume it would not be possible to > actually use Local handles as keys in a map that outlives the current > HandleScope. > > > > One thought I had was to assign a unique integer to the object using > obj.SetPrivate(...), and use that as the key, but SetPrivate is documented > as experimental, which is discouraging. > > > > Is there an easier way to achieve what I'm trying to do? I feel like I > may be missing something obvious... > > > > Jonathan > > A hashmap should work if you observe the following; > > 1. Use `v8::Object::GetIdentityHash()` to compute the hash key. > 2. Use `Persistent::operator==()` to detect duplicates (also has an > overload that compares against a Local) > > I.e., step 1 is to find the right bucket and step 2 is to find out if > that bucket already contains the object. > > Using just the identity hash isn't sufficient, see [1] and [2] for > discussion. > > Caveat: use `v8::Value::SameValue()` - not `Persistent::operator==()` > - if you also store primitives (numbers, strings, etc.) > > [1] https://github.com/denoland/deno/pull/7946#discussion_r504192165 > [2] https://github.com/denoland/deno/issues/7969 > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/07471ffc-0d52-4fc8-ac9f-07955f9303d2n%40googlegroups.com.