Spec-Zone.ru › Ruby 3.1

класс ObjectSpace::WeakMap

Родитель:
Объект
Включённые модули:
Enumerable

Объект ObjectSpace::WeakMap хранит ссылки на любые объекты, но эти объекты могут быть удалены сборщиком мусора.

Этот класс в основном используется внутри WeakRef, для публичного интерфейса используйте lib/weakref.rb.

Публичные методы экземпляров

[](p1) Показать исходный код
static VALUE
wmap_aref(VALUE self, VALUE key)
{
    VALUE obj = wmap_lookup(self, key);
    return obj != Qundef ? obj : Qnil;
}

Возвращает слабо ссылаемый объект с заданным ключом

[]=(p1, p2) Показать исходный код
static VALUE
wmap_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);
}

Создаёт слабую ссылку от заданного ключа к заданному значению

each() Показать исходный код
static VALUE
wmap_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;
}

Итерируется по ключам и объектам в слабо ссылаемом объекте

Также алиас: each_pair
each_key() Показать исходный код
static VALUE
wmap_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;
}

Итерируется по ключам и объектам в слабо ссылаемом объекте

each_pair()

Итерируется по ключам и объектам в слабо ссылаемом объекте

Псевдоним для: each
each_value() Показать исходный код
static VALUE
wmap_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;
}

Итерируется по ключам и объектам в слабо ссылаемом объекте

include?(p1) Показать исходный код
static VALUE
wmap_has_key(VALUE self, VALUE key)
{
    return wmap_lookup(self, key) == Qundef ? Qfalse : Qtrue;
}

Возвращает true , если key зарегистрирован

Также алиас: member?, key?
inspect() Показать исходный код
static VALUE
wmap_inspect(VALUE self)
{
    VALUE str;
    VALUE c = rb_class_name(CLASS_OF(self));
    struct weakmap *w;
    struct wmap_iter_arg args;

    TypedData_Get_Struct(self, struct weakmap, &weakmap_type, w);
    str = rb_sprintf("-<%"PRIsVALUE":%p", c, (void *)self);
    if (w->wmap2obj) {
        args.objspace = &rb_objspace;
        args.value = str;
        st_foreach(w->wmap2obj, wmap_inspect_i, (st_data_t)&args);
    }
    RSTRING_PTR(str)[0] = '#';
    rb_str_cat2(str, ">");
    return str;
}
key?(p1)

Возвращает true , если key зарегистрирован

Псевдоним для: include?
keys() Показать исходный код
static VALUE
wmap_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;
}

Итерируется по ключам и объектам в слабо ссылаемом объекте

length()

Возвращает количество ссылаемых объектов

Псевдоним для: size
member?(p1)

Возвращает true , если key зарегистрирован

Псевдоним для: include?
size() Показать исходный код
static VALUE
wmap_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
}

Возвращает количество ссылаемых объектов

Также алиас: length
values() Показать исходный код
static VALUE
wmap_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;
}

Итерируется по значениям и объектам в слабо ссылаемом объекте

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API