/** * Retrieve the read accessor for FFI handle. If no object_id has been prepared, this will return a dummy * accessor that just returns null. * * @return the read accessor for FFI handle */ public VariableAccessor getFFIHandleAccessorForRead() { return ffiHandleVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for FFI handle. * * @return the read accessor for FFI handle */ public VariableAccessor getFFIHandleAccessorForRead() { return ffiHandleVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for object_id for reads. If no object_id has been prepared, this will return a dummy * accessor that just returns null. * * @return the read accessor for object_id */ public VariableAccessor getObjectIdAccessorForRead() { return objectIdVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for FFI handle. If no object_id has been prepared, this will return a dummy * accessor that just returns null. * * @return the read accessor for FFI handle */ public VariableAccessor getFFIHandleAccessorForRead() { return ffiHandleVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for object group. If no object_id has been prepared, this will return a dummy * accessor that just returns null. * * @return the read accessor for object group */ public VariableAccessor getObjectGroupAccessorForRead() { return objectGroupVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for C ext handle. * * @return the read accessor for C ext handle */ public VariableAccessor getNativeHandleAccessorForRead() { return cextHandleVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for C ext handle. * * @return the read accessor for C ext handle */ public VariableAccessor getNativeHandleAccessorForRead() { return cextHandleVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for object group. * * @return the read accessor for object group */ public VariableAccessor getObjectGroupAccessorForRead() { return objectGroupVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for object_id for reads. If no object_id has been prepared, this will return a dummy * accessor that just returns null. * * @return the read accessor for object_id */ public VariableAccessor getObjectIdAccessorForRead() { return objectIdVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for object group. If no object_id has been prepared, this will return a dummy * accessor that just returns null. * * @return the read accessor for object group */ public VariableAccessor getObjectGroupAccessorForRead() { return objectGroupVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for object group. * * @return the read accessor for object group */ public VariableAccessor getObjectGroupAccessorForRead() { return objectGroupVariableAccessorField.getVariableAccessorForRead(); }
/** * Retrieve the read accessor for FFI handle. * * @return the read accessor for FFI handle */ public VariableAccessor getFFIHandleAccessorForRead() { return ffiHandleVariableAccessorField.getVariableAccessorForRead(); }
public final Pointer getCallback(IRubyObject callable, CachingCallSite callSite) { if (callable instanceof Pointer) { return (Pointer) callable; } Object ffiHandle = callable.getMetaClass().getRealClass().getFFIHandleAccessorField().getVariableAccessorForRead().get(callable); NativeCallbackPointer cbptr; if (ffiHandle instanceof NativeCallbackPointer && ((cbptr = (NativeCallbackPointer) ffiHandle).cbInfo == callbackInfo)) { return cbptr; } return getCallbackPointer(callable, callSite); }
/** * Get the object_id from a given RubyBasicObject, possibly allocating * space for it. * * @param self the object from which to get object_id * @return the object's object_id (possibly new) */ public long getObjectId(RubyBasicObject self) { VariableAccessor objectIdAccessor = getObjectIdAccessorField().getVariableAccessorForRead(); Long id = (Long)objectIdAccessor.get(self); if (id != null) return id; synchronized (self) { objectIdAccessor = getObjectIdAccessorField().getVariableAccessorForRead(); id = (Long)objectIdAccessor.get(self); if (id != null) return id; return initObjectId(self, getObjectIdAccessorField().getVariableAccessorForWrite(this)); } }
/** * Get the object_id from a given RubyBasicObject, possibly allocating * space for it. * * @param self the object from which to get object_id * @return the object's object_id (possibly new) */ public long getObjectId(RubyBasicObject self) { VariableAccessor objectIdAccessor = getObjectIdAccessorField().getVariableAccessorForRead(); Long id = (Long)objectIdAccessor.get(self); if (id != null) return id; synchronized (self) { objectIdAccessor = getObjectIdAccessorField().getVariableAccessorForRead(); id = (Long)objectIdAccessor.get(self); if (id != null) return id; return initObjectId(self, getObjectIdAccessorField().getVariableAccessorForWrite(this)); } }
public final Pointer getCallback(IRubyObject callable, CachingCallSite callSite) { if (callable instanceof Pointer) { return (Pointer) callable; } Object ffiHandle = callable.getMetaClass().getRealClass().getFFIHandleAccessorField().getVariableAccessorForRead().get(callable); NativeCallbackPointer cbptr; if (ffiHandle instanceof NativeCallbackPointer && ((cbptr = (NativeCallbackPointer) ffiHandle).cbInfo == callbackInfo)) { return cbptr; } return getCallbackPointer(callable, callSite); }
public final Pointer getCallback(IRubyObject callable, CachingCallSite callSite) { if (callable instanceof Pointer) { return (Pointer) callable; } Object ffiHandle = callable.getMetaClass().getRealClass().getFFIHandleAccessorField().getVariableAccessorForRead().get(callable); NativeCallbackPointer cbptr; if (ffiHandle instanceof NativeCallbackPointer && ((cbptr = (NativeCallbackPointer) ffiHandle).cbInfo == callbackInfo)) { return cbptr; } return getCallbackPointer(callable, callSite); }
public final Pointer getCallback(IRubyObject callable, CachingCallSite callSite) { if (callable instanceof Pointer) { return (Pointer) callable; } Object ffiHandle = callable.getMetaClass().getRealClass().getFFIHandleAccessorField().getVariableAccessorForRead().get(callable); NativeCallbackPointer cbptr; if (ffiHandle instanceof NativeCallbackPointer && ((cbptr = (NativeCallbackPointer) ffiHandle).cbInfo == callbackInfo)) { return cbptr; } return getCallbackPointer(callable, callSite); }
@Override @JRubyMethod(name = "initialize", visibility = PRIVATE) public final IRubyObject initialize(ThreadContext context, IRubyObject pointerArg, IRubyObject releaser) { checkPointer(context.runtime, pointerArg); setMemoryIO(((Pointer) pointerArg).getMemoryIO()); this.pointer = (Pointer) pointerArg; this.size = pointer.size; this.typeSize = pointer.typeSize; Object ffiHandle = releaser.getMetaClass().getFFIHandleAccessorField().getVariableAccessorForRead().get(releaser); if (!(ffiHandle instanceof ReleaserData)) { getMetaClass().setFFIHandle(ffiHandle = new ReleaserData()); } ReleaserData releaserData = (ReleaserData) ffiHandle; DynamicMethod releaseMethod = releaserData.releaseCallSite.retrieveCache(releaser.getMetaClass(), releaserData.releaseCallSite.getMethodName()).method; // If no release method is defined, then memory leaks will result. if (releaseMethod.isUndefined()) { throw context.runtime.newRuntimeError("call method undefined"); } else if ((releaseMethod.getArity().isFixed() && releaseMethod.getArity().required() != 1) || releaseMethod.getArity().required() > 1) { throw context.runtime.newRuntimeError("wrong number of arguments to call method (" + 1 + " for " + releaseMethod.getArity().required() + ")"); } setReaper(new Reaper(pointer, releaser, releaserData.releaseCallSite)); return this; }
@Override @JRubyMethod(name = "initialize", visibility = PRIVATE) public final IRubyObject initialize(ThreadContext context, IRubyObject pointerArg, IRubyObject releaser) { checkPointer(context.runtime, pointerArg); setMemoryIO(((Pointer) pointerArg).getMemoryIO()); this.pointer = (Pointer) pointerArg; this.size = pointer.size; this.typeSize = pointer.typeSize; Object ffiHandle = releaser.getMetaClass().getFFIHandleAccessorField().getVariableAccessorForRead().get(releaser); if (!(ffiHandle instanceof ReleaserData)) { getMetaClass().setFFIHandle(ffiHandle = new ReleaserData()); } ReleaserData releaserData = (ReleaserData) ffiHandle; DynamicMethod releaseMethod = releaserData.releaseCallSite.retrieveCache(releaser.getMetaClass(), releaserData.releaseCallSite.getMethodName()).method; // If no release method is defined, then memory leaks will result. if (releaseMethod.isUndefined()) { throw context.runtime.newRuntimeError("call method undefined"); } else if ((releaseMethod.getArity().isFixed() && releaseMethod.getArity().required() != 1) || releaseMethod.getArity().required() > 1) { throw context.runtime.newRuntimeError("wrong number of arguments to call method (" + 1 + " for " + releaseMethod.getArity().required() + ")"); } setReaper(new Reaper(pointer, releaser, releaserData.releaseCallSite)); return this; }