本文整理了Java中org.jruby.RubyClass.getFFIHandle
方法的一些代码示例,展示了RubyClass.getFFIHandle
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RubyClass.getFFIHandle
方法的具体详情如下:
包路径:org.jruby.RubyClass
类名称: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;
}
内容来源于网络,如有侵权,请联系作者删除!