Paypal
(p1)click to toggle source
Retrieves a weakly referenced object with the given key
static VALUE wmap_aref(VALUE self, VALUE wmap) { st_data_t data; VALUE obj; struct weakmap *w; rb_objspace_t *objspace = &rb_objspace; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); if (!st_lookup(w->wmap2obj, (st_data_t)wmap, &data)) return Qnil; obj = (VALUE)data; if (!is_id_value(objspace, obj)) return Qnil; if (!is_live_object(objspace, obj)) return Qnil; return obj; }
[]=(p1, p2)
Creates a weak reference from the given key to the given value
static VALUE wmap_aset(VALUE self, VALUE wmap, VALUE orig) { struct weakmap *w; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); should_be_finalizable(orig); should_be_finalizable(wmap); define_final0(orig, w->final); define_final0(wmap, w->final); st_update(w->obj2wmap, (st_data_t)orig, wmap_aset_update, wmap); st_insert(w->wmap2obj, (st_data_t)wmap, (st_data_t)orig); return nonspecial_obj_id(orig); }