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

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

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

RubyClass.getFFIHandle介绍

暂无

代码示例

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

@JRubyMethod(name = { "size" }, meta = true)
public static IRubyObject size(ThreadContext context, IRubyObject structClass) {
  if (!(structClass instanceof RubyClass)) {
    throw context.runtime.newTypeError(structClass, context.runtime.getClassClass());
  }
  RubyClass klass = (RubyClass) structClass;
  Object obj = klass.getFFIHandle();
  if (obj instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  }
  if ((obj = ((RubyClass) structClass).getInstanceVariable("@layout")) instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  } else {
    obj = ((RubyClass) structClass).getInstanceVariable("@size");
  }
  return obj instanceof RubyFixnum ? (RubyFixnum) obj : RubyFixnum.zero(context.runtime);
}

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

@JRubyMethod(name = { "size" }, meta = true)
public static IRubyObject size(ThreadContext context, IRubyObject structClass) {
  if (!(structClass instanceof RubyClass)) {
    throw context.runtime.newTypeError(structClass, context.runtime.getClassClass());
  }
  RubyClass klass = (RubyClass) structClass;
  Object obj = klass.getFFIHandle();
  if (obj instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  }
  if ((obj = ((RubyClass) structClass).getInstanceVariable("@layout")) instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  } else {
    obj = ((RubyClass) structClass).getInstanceVariable("@size");
  }
  return obj instanceof RubyFixnum ? (RubyFixnum) obj : RubyFixnum.zero(context.runtime);
}

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

@JRubyMethod(name = { "size" }, meta = true)
public static IRubyObject size(ThreadContext context, IRubyObject structClass) {
  if (!(structClass instanceof RubyClass)) {
    throw context.runtime.newTypeError(structClass, context.runtime.getClassClass());
  }
  RubyClass klass = (RubyClass) structClass;
  Object obj = klass.getFFIHandle();
  if (obj instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  }
  if ((obj = ((RubyClass) structClass).getInstanceVariable("@layout")) instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  } else {
    obj = ((RubyClass) structClass).getInstanceVariable("@size");
  }
  return obj instanceof RubyFixnum ? (RubyFixnum) obj : RubyFixnum.zero(context.runtime);
}

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

@JRubyMethod(name = { "size" }, meta = true)
public static IRubyObject size(ThreadContext context, IRubyObject structClass) {
  if (!(structClass instanceof RubyClass)) {
    throw context.runtime.newTypeError(structClass, context.runtime.getClassClass());
  }
  RubyClass klass = (RubyClass) structClass;
  Object obj = klass.getFFIHandle();
  if (obj instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  }
  if ((obj = ((RubyClass) structClass).getInstanceVariable("@layout")) instanceof StructLayout) {
    return ((StructLayout) obj).size(context);
  } else {
    obj = ((RubyClass) structClass).getInstanceVariable("@size");
  }
  return obj instanceof RubyFixnum ? (RubyFixnum) obj : RubyFixnum.zero(context.runtime);
}

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

static final StructLayout getStructLayout(Ruby runtime, IRubyObject structClass) {
  try {
    Object layout = ((RubyClass) structClass).getFFIHandle();
    if (layout instanceof StructLayout) {
      return (StructLayout) layout;
    }
    RubyClass klass = (RubyClass) structClass;
    while (klass != runtime.getObject() && !((layout = klass.getInstanceVariable("@layout")) instanceof StructLayout)) {
      klass = klass.getSuperClass();
    }
    if (!(layout instanceof StructLayout)) {
      throw runtime.newRuntimeError("no valid struct layout for " + ((RubyClass) structClass).getName());
    }
    // Cache the layout on the Struct metaclass for faster retrieval next time
    ((RubyClass) structClass).setFFIHandle(layout);
    return (StructLayout) layout;
  } catch (ClassCastException ex) {
    if (!(structClass instanceof RubyClass)) {
      throw runtime.newTypeError("wrong argument type "
          + structClass.getMetaClass().getName() + " (expected subclass of Struct)");
    }
    throw runtime.newRuntimeError("invalid layout set for struct " + ((RubyClass) structClass).getName());
  }
}

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

static final StructLayout getStructLayout(Ruby runtime, IRubyObject structClass) {
  try {
    Object layout = ((RubyClass) structClass).getFFIHandle();
    if (layout instanceof StructLayout) {
      return (StructLayout) layout;
    }
    RubyClass klass = (RubyClass) structClass;
    while (klass != runtime.getObject() && !((layout = klass.getInstanceVariable("@layout")) instanceof StructLayout)) {
      klass = klass.getSuperClass();
    }
    if (!(layout instanceof StructLayout)) {
      throw runtime.newRuntimeError("no valid struct layout for " + ((RubyClass) structClass).getName());
    }
    // Cache the layout on the Struct metaclass for faster retrieval next time
    ((RubyClass) structClass).setFFIHandle(layout);
    return (StructLayout) layout;
  } catch (ClassCastException ex) {
    if (!(structClass instanceof RubyClass)) {
      throw runtime.newTypeError("wrong argument type "
          + structClass.getMetaClass().getName() + " (expected subclass of Struct)");
    }
    throw runtime.newRuntimeError("invalid layout set for struct " + ((RubyClass) structClass).getName());
  }
}

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

static final StructLayout getStructLayout(Ruby runtime, IRubyObject structClass) {
  try {
    Object layout = ((RubyClass) structClass).getFFIHandle();
    if (layout instanceof StructLayout) {
      return (StructLayout) layout;
    }
    RubyClass klass = (RubyClass) structClass;
    while (klass != runtime.getObject() && !((layout = klass.getInstanceVariable("@layout")) instanceof StructLayout)) {
      klass = klass.getSuperClass();
    }
    if (!(layout instanceof StructLayout)) {
      throw runtime.newRuntimeError("no valid struct layout for " + ((RubyClass) structClass).getName());
    }
    // Cache the layout on the Struct metaclass for faster retrieval next time
    ((RubyClass) structClass).setFFIHandle(layout);
    return (StructLayout) layout;
  } catch (ClassCastException ex) {
    if (!(structClass instanceof RubyClass)) {
      throw runtime.newTypeError("wrong argument type "
          + structClass.getMetaClass().getName() + " (expected subclass of Struct)");
    }
    throw runtime.newRuntimeError("invalid layout set for struct " + ((RubyClass) structClass).getName());
  }
}

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

static final StructLayout getStructLayout(Ruby runtime, IRubyObject structClass) {
  try {
    Object layout = ((RubyClass) structClass).getFFIHandle();
    if (layout instanceof StructLayout) {
      return (StructLayout) layout;
    }
    RubyClass klass = (RubyClass) structClass;
    while (klass != runtime.getObject() && !((layout = klass.getInstanceVariable("@layout")) instanceof StructLayout)) {
      klass = klass.getSuperClass();
    }
    if (!(layout instanceof StructLayout)) {
      throw runtime.newRuntimeError("no valid struct layout for " + ((RubyClass) structClass).getName());
    }
    // Cache the layout on the Struct metaclass for faster retrieval next time
    ((RubyClass) structClass).setFFIHandle(layout);
    return (StructLayout) layout;
  } catch (ClassCastException ex) {
    if (!(structClass instanceof RubyClass)) {
      throw runtime.newTypeError("wrong argument type "
          + structClass.getMetaClass().getName() + " (expected subclass of Struct)");
    }
    throw runtime.newRuntimeError("invalid layout set for struct " + ((RubyClass) structClass).getName());
  }
}

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

@Override
@JRubyMethod(name = "initialize", visibility = PRIVATE)
public final IRubyObject initialize(ThreadContext context, IRubyObject pointerArg) {
  Ruby runtime = context.runtime;
  checkPointer(runtime, pointerArg);
  Object ffiHandle = getMetaClass().getFFIHandle();
  if (!(ffiHandle instanceof ClassData)) {
    getMetaClass().setFFIHandle(ffiHandle = new ClassData());
  }
  ClassData classData = (ClassData) ffiHandle;
  // If no release method is defined, then memory leaks will result.
  DynamicMethod releaseMethod = classData.releaseCallSite.retrieveCache(getMetaClass().getMetaClass(), classData.releaseCallSite.getMethodName()).method;
  if (releaseMethod.isUndefined()) {
    throw runtime.newRuntimeError("release method undefined");
  } else if ((releaseMethod.getArity().isFixed() && releaseMethod.getArity().required() != 1) || releaseMethod.getArity().required() > 1) {
    throw runtime.newRuntimeError("wrong number of arguments to release method ("
        + 1 + " for " + releaseMethod.getArity().required()  + ")");
  }
  setMemoryIO(((Pointer) pointerArg).getMemoryIO());
  this.pointer = (Pointer) pointerArg;
  this.size = pointer.size;
  this.typeSize = pointer.typeSize;
  setReaper(new Reaper(pointer, getMetaClass(), classData.releaseCallSite));
  return this;
}

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

@Override
@JRubyMethod(name = "initialize", visibility = PRIVATE)
public final IRubyObject initialize(ThreadContext context, IRubyObject pointerArg) {
  Ruby runtime = context.runtime;
  checkPointer(runtime, pointerArg);
  Object ffiHandle = getMetaClass().getFFIHandle();
  if (!(ffiHandle instanceof ClassData)) {
    getMetaClass().setFFIHandle(ffiHandle = new ClassData());
  }
  ClassData classData = (ClassData) ffiHandle;
  // If no release method is defined, then memory leaks will result.
  DynamicMethod releaseMethod = classData.releaseCallSite.retrieveCache(getMetaClass().getMetaClass(), classData.releaseCallSite.getMethodName()).method;
  if (releaseMethod.isUndefined()) {
    throw runtime.newRuntimeError("release method undefined");
  } else if ((releaseMethod.getArity().isFixed() && releaseMethod.getArity().required() != 1) || releaseMethod.getArity().required() > 1) {
    throw runtime.newRuntimeError("wrong number of arguments to release method ("
        + 1 + " for " + releaseMethod.getArity().required()  + ")");
  }
  setMemoryIO(((Pointer) pointerArg).getMemoryIO());
  this.pointer = (Pointer) pointerArg;
  this.size = pointer.size;
  this.typeSize = pointer.typeSize;
  setReaper(new Reaper(pointer, getMetaClass(), classData.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) {
  Ruby runtime = context.runtime;
  checkPointer(runtime, pointerArg);
  Object ffiHandle = getMetaClass().getFFIHandle();
  if (!(ffiHandle instanceof ClassData)) {
    getMetaClass().setFFIHandle(ffiHandle = new ClassData());
  }
  ClassData classData = (ClassData) ffiHandle;
  // If no release method is defined, then memory leaks will result.
  DynamicMethod releaseMethod = classData.releaseCallSite.retrieveCache(getMetaClass().getMetaClass(), classData.releaseCallSite.getMethodName()).method;
  if (releaseMethod.isUndefined()) {
    throw runtime.newRuntimeError("release method undefined");
  } else if ((releaseMethod.getArity().isFixed() && releaseMethod.getArity().required() != 1) || releaseMethod.getArity().required() > 1) {
    throw runtime.newRuntimeError("wrong number of arguments to release method ("
        + 1 + " for " + releaseMethod.getArity().required()  + ")");
  }
  setMemoryIO(((Pointer) pointerArg).getMemoryIO());
  this.pointer = (Pointer) pointerArg;
  this.size = pointer.size;
  this.typeSize = pointer.typeSize;
  setReaper(new Reaper(pointer, getMetaClass(), classData.releaseCallSite));
  return this;
}

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

@Override
@JRubyMethod(name = "initialize", visibility = PRIVATE)
public final IRubyObject initialize(ThreadContext context, IRubyObject pointerArg) {
  Ruby runtime = context.runtime;
  checkPointer(runtime, pointerArg);
  Object ffiHandle = getMetaClass().getFFIHandle();
  if (!(ffiHandle instanceof ClassData)) {
    getMetaClass().setFFIHandle(ffiHandle = new ClassData());
  }
  ClassData classData = (ClassData) ffiHandle;
  // If no release method is defined, then memory leaks will result.
  DynamicMethod releaseMethod = classData.releaseCallSite.retrieveCache(getMetaClass().getMetaClass(), classData.releaseCallSite.getMethodName()).method;
  if (releaseMethod.isUndefined()) {
    throw runtime.newRuntimeError("release method undefined");
  } else if ((releaseMethod.getArity().isFixed() && releaseMethod.getArity().required() != 1) || releaseMethod.getArity().required() > 1) {
    throw runtime.newRuntimeError("wrong number of arguments to release method ("
        + 1 + " for " + releaseMethod.getArity().required()  + ")");
  }
  setMemoryIO(((Pointer) pointerArg).getMemoryIO());
  this.pointer = (Pointer) pointerArg;
  this.size = pointer.size;
  this.typeSize = pointer.typeSize;
  setReaper(new Reaper(pointer, getMetaClass(), classData.releaseCallSite));
  return this;
}

相关文章

微信公众号

最新文章

更多

RubyClass类方法