Class: Fiddle::Pinned
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | ext/fiddle/pinned.c, ext/fiddle/lib/fiddle/ffi_backend.rb |
Class Method Summary
-
.new(object) ⇒ Pinned
constructor
Create a new pinned object reference.
Instance Attribute Summary
-
#cleared? ⇒ Boolean
readonly
Returns true if the reference has been cleared, otherwise returns false.
Instance Method Summary
-
#clear
Clear the reference to the object this is pinning.
- #initialize(object) ⇒ Pinned constructor
-
#ref
Return the object that this pinned instance references.
Constructor Details
.new(object) ⇒ Pinned
Create a new pinned object reference. The Pinned instance will prevent the GC from moving object.
# File 'ext/fiddle/pinned.c', line 52
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;
}
#initialize(object) ⇒ Pinned
# File 'ext/fiddle/lib/fiddle/ffi_backend.rb', line 557
def initialize(object) @object = object end
Instance Attribute Details
#cleared? ⇒ Boolean (readonly)
Returns true if the reference has been cleared, otherwise returns false.
# File 'ext/fiddle/pinned.c', line 97
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;
}
}
Instance Method Details
#clear
Clear the reference to the object this is pinning.
# File 'ext/fiddle/pinned.c', line 83
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;
}
#ref
Return the object that this pinned instance references.
# File 'ext/fiddle/pinned.c', line 66
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");
}
}