org.jruby.RubyClass.getFFIHandleAccessorField()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(7.7k)|赞(0)|评价(0)|浏览(66)

本文整理了Java中org.jruby.RubyClass.getFFIHandleAccessorField方法的一些代码示例,展示了RubyClass.getFFIHandleAccessorField的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RubyClass.getFFIHandleAccessorField方法的具体详情如下:
包路径:org.jruby.RubyClass
类名称:RubyClass
方法名:getFFIHandleAccessorField

RubyClass.getFFIHandleAccessorField介绍

暂无

代码示例

代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby

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);
}

代码示例来源:origin: org.jruby/jruby-complete

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);
}

代码示例来源:origin: org.jruby/jruby-core

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);
}

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby

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);
}

代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby

@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;
}

代码示例来源:origin: org.jruby/jruby-complete

@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;
}

代码示例来源:origin: org.jruby/jruby-core

@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;
}

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby

@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;
}

相关文章

微信公众号

最新文章

更多

RubyClass类方法