類別 Fiddle::Pinned

公開類別方法

Fiddle::Pinned.new(object) → pinned_object 按一下以切換來源

建立新的釘選物件參考。Fiddle::Pinned 實例會防止 GC 移動 object

static VALUE
initialize(VALUE self, VALUE ref)
{
    struct pinned_data *data;
    TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data);
    RB_OBJ_WRITE(self, &data->ptr, ref);
    return self;
}

公開實例方法

clear 按一下以切換來源

清除對此釘選物件的參考。

static VALUE
clear(VALUE self)
{
    struct pinned_data *data;
    TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data);
    data->ptr = 0;
    return self;
}
cleared? 按一下以切換來源

如果已清除參考,則傳回 true,否則傳回 false。

static VALUE
cleared_p(VALUE self)
{
    struct pinned_data *data;
    TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data);
    if (data->ptr) {
        return Qfalse;
    } else {
        return Qtrue;
    }
}
ref 按一下以切換來源

傳回此釘選實例所參考的物件。

static VALUE
ref(VALUE self)
{
    struct pinned_data *data;
    TypedData_Get_Struct(self, struct pinned_data, &pinned_data_type, data);
    if (data->ptr) {
      return data->ptr;
    } else {
      rb_raise(rb_eFiddleClearedReferenceError, "`ref` called on a cleared object");
    }
}