AnObjectSpace::WeakMap object holds referencesto any objects, but those objects can get garbage collected.
This class is mostly used internally by WeakRef, please uselib/weakref.rb
for the public interface.
Retrieves a weakly referenced object with the given key
static VALUEwmap_aref(VALUE self, VALUE key){ VALUE obj = wmap_lookup(self, key); return obj != Qundef ? obj : Qnil;}
Creates a weak reference from the given key to the given value
static VALUEwmap_aset(VALUE self, VALUE key, VALUE value){ struct weakmap *w; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); if (FL_ABLE(value)) { define_final0(value, w->final); } if (FL_ABLE(key)) { define_final0(key, w->final); } st_update(w->obj2wmap, (st_data_t)value, wmap_aset_update, key); st_insert(w->wmap2obj, (st_data_t)key, (st_data_t)value); return nonspecial_obj_id(value);}
Iterates over keys and objects in a weakly referenced object
static VALUEwmap_each(VALUE self){ struct weakmap *w; rb_objspace_t *objspace = &rb_objspace; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); st_foreach(w->wmap2obj, wmap_each_i, (st_data_t)objspace); return self;}
Iterates over keys and objects in a weakly referenced object
static VALUEwmap_each_key(VALUE self){ struct weakmap *w; rb_objspace_t *objspace = &rb_objspace; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); st_foreach(w->wmap2obj, wmap_each_key_i, (st_data_t)objspace); return self;}
Iterates over keys and objects in a weakly referenced object
static VALUEwmap_each(VALUE self){ struct weakmap *w; rb_objspace_t *objspace = &rb_objspace; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); st_foreach(w->wmap2obj, wmap_each_i, (st_data_t)objspace); return self;}
Iterates over keys and objects in a weakly referenced object
static VALUEwmap_each_value(VALUE self){ struct weakmap *w; rb_objspace_t *objspace = &rb_objspace; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); st_foreach(w->wmap2obj, wmap_each_value_i, (st_data_t)objspace); return self;}
Returnstrue
ifkey
is registered
static VALUEwmap_has_key(VALUE self, VALUE key){ return wmap_lookup(self, key) == Qundef ? Qfalse : Qtrue;}
static VALUEwmap_inspect(VALUE self){ VALUE str; VALUE c = rb_class_name(CLASS_OF(self)); struct weakmap *w; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); str = rb_sprintf("-<%"PRIsVALUE":%p", c, (void *)self); if (w->wmap2obj) { st_foreach(w->wmap2obj, wmap_inspect_i, str); } RSTRING_PTR(str)[0] = '#'; rb_str_cat2(str, ">"); return str;}
Returnstrue
ifkey
is registered
static VALUEwmap_has_key(VALUE self, VALUE key){ return wmap_lookup(self, key) == Qundef ? Qfalse : Qtrue;}
Iterates over keys and objects in a weakly referenced object
static VALUEwmap_keys(VALUE self){ struct weakmap *w; struct wmap_iter_arg args; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); args.objspace = &rb_objspace; args.value = rb_ary_new(); st_foreach(w->wmap2obj, wmap_keys_i, (st_data_t)&args); return args.value;}
Returns the number of referenced objects
static VALUEwmap_size(VALUE self){ struct weakmap *w; st_index_t n; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); n = w->wmap2obj->num_entries;#if SIZEOF_ST_INDEX_T <= SIZEOF_LONG return ULONG2NUM(n);#else return ULL2NUM(n);#endif}
Returnstrue
ifkey
is registered
static VALUEwmap_has_key(VALUE self, VALUE key){ return wmap_lookup(self, key) == Qundef ? Qfalse : Qtrue;}
Returns the number of referenced objects
static VALUEwmap_size(VALUE self){ struct weakmap *w; st_index_t n; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); n = w->wmap2obj->num_entries;#if SIZEOF_ST_INDEX_T <= SIZEOF_LONG return ULONG2NUM(n);#else return ULL2NUM(n);#endif}
Iterates over values and objects in a weakly referenced object
static VALUEwmap_values(VALUE self){ struct weakmap *w; struct wmap_iter_arg args; TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w); args.objspace = &rb_objspace; args.value = rb_ary_new(); st_foreach(w->wmap2obj, wmap_values_i, (st_data_t)&args); return args.value;}
This page was generated for Ruby 3.0.0
Generated with Ruby-doc Rdoc Generator 0.42.0.