Thanks for those ideas Bart. I think I will try stashing an index into the array in the smart pointer (along side the pointer) and use your idea of a stack of indices to the available null entries. I'm currently working on embedding v8 for comparison purposes, so I won't do this immediately.
On Wednesday, August 10, 2016 at 11:06:23 PM UTC+12, Bart Janssens wrote: > > On Wed, Aug 10, 2016 at 11:46 AM Kit Adams <[email protected] > <javascript:>> wrote: > >> Thank you for those links, they are a great help. >> >> Is there an "unprotect_from_gc(T* val)"? >> >> I am looking for a smart pointer a bit like v8's UniquePersistent<>. >> >> I guess I could make one that searched through the array for the value in >> order to remove it (in the smart pointer's dtor). >> >> > No, I didn't need unprotect so far. Iterating over the array is one way, > another option would be to keep a std::map along with the array to > immediately find the index. I think removing elements from the array is > cumbersome, it's probably best to set the value to null (by assigning a > jl_box_voidpointer(nullptr), setting a jl_value_t* to null directly feels > wrong) and depending on how many times objects are added / removed keep a > stack of the empty spots in the array so they can be reused. > >
