@JRubyMethod(name = { "alignment" }) public IRubyObject alignment(ThreadContext context) { return layout.alignment(context); }
private IRubyObject[] initValueCache() { valueCacheUpdater.compareAndSet(this, null, new IRubyObject[layout.getCacheableFieldCount()]); return valueCache; }
public final IRubyObject getCachedValue(StructLayout.Member member) { return valueCache != null ? valueCache[layout.getCacheableFieldIndex(member)] : null; }
if (layout.isUnion()) { if (t.alignment() == layout.getNativeAlignment()) { alignmentType = t; break; throw layout.getRuntime().newRuntimeError("cannot discern base alignment type for union of alignment " + layout.getNativeAlignment()); com.kenai.jffi.Type[] fields = new com.kenai.jffi.Type[layout.getNativeSize() / alignmentType.size()]; Arrays.fill(fields, alignmentType); Collection<StructLayout.Member> structMembers = layout.getMembers(); java.util.List<com.kenai.jffi.Type> fields = new java.util.ArrayList<com.kenai.jffi.Type>(); fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
/** * Returns a {@link Field} descriptor for a struct field. * * @param name The name of the struct field. * @return A <tt>Member</tt> descriptor. */ final Field getField(Ruby runtime, IRubyObject name) { return getMember(runtime, name).field; }
@JRubyMethod(name = "values") public IRubyObject values(ThreadContext context) { IRubyObject[] values = new IRubyObject[layout.getFieldCount()]; int i = 0; for (StructLayout.Member m : layout.getMembers()) { values[i++] = m.get(context, this, getMemory()); } return RubyArray.newArrayMayCopy(context.runtime, values); }
@JRubyMethod(name = "[]") public IRubyObject aref(ThreadContext context, IRubyObject fieldName) { return getField(context.runtime, fieldName); }
@JRubyMethod(name = "new", meta = true, required = 3, optional = 1) public static final IRubyObject newStructLayout(ThreadContext context, IRubyObject klass, IRubyObject[] args) { IRubyObject rbFields = args[0], size = args[1], alignment = args[2]; if (!(rbFields instanceof RubyArray)) { throw context.runtime.newTypeError(rbFields, context.runtime.getArray()); } List<IRubyObject> fields = Arrays.asList(((RubyArray) rbFields).toJavaArrayMaybeUnsafe()); return new StructLayout(context.runtime, (RubyClass) klass, fields, RubyNumeric.num2int(size), RubyNumeric.num2int(alignment)); }
StructLayout.createStructLayoutClass(runtime, ffi);
if (layout.isUnion()) { if (t.alignment() == layout.getNativeAlignment()) { alignmentType = t; break; throw layout.getRuntime().newRuntimeError("cannot discern base alignment type for union of alignment " + layout.getNativeAlignment()); com.kenai.jffi.Type[] fields = new com.kenai.jffi.Type[layout.getNativeSize() / alignmentType.size()]; Arrays.fill(fields, alignmentType); Collection<StructLayout.Member> structMembers = layout.getMembers(); java.util.List<com.kenai.jffi.Type> fields = new java.util.ArrayList<com.kenai.jffi.Type>(); fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
/** * Returns a {@link Field} descriptor for a struct field. * * @param name The name of the struct field. * @return A <tt>Member</tt> descriptor. */ final Field getField(Ruby runtime, IRubyObject name) { return getMember(runtime, name).field; }
@JRubyMethod(name = "values") public IRubyObject values(ThreadContext context) { IRubyObject[] values = new IRubyObject[layout.getFieldCount()]; int i = 0; for (StructLayout.Member m : layout.getMembers()) { values[i++] = m.get(context, this, getMemory()); } return RubyArray.newArrayMayCopy(context.runtime, values); }
@JRubyMethod(name = "[]") public IRubyObject aref(ThreadContext context, IRubyObject fieldName) { return getField(context.runtime, fieldName); }
@JRubyMethod(name = "new", meta = true, required = 3, optional = 1) public static final IRubyObject newStructLayout(ThreadContext context, IRubyObject klass, IRubyObject[] args) { IRubyObject rbFields = args[0], size = args[1], alignment = args[2]; if (!(rbFields instanceof RubyArray)) { throw context.runtime.newTypeError(rbFields, context.runtime.getArray()); } List<IRubyObject> fields = Arrays.asList(((RubyArray) rbFields).toJavaArrayMaybeUnsafe()); return new StructLayout(context.runtime, (RubyClass) klass, fields, RubyNumeric.num2int(size), RubyNumeric.num2int(alignment)); }
StructLayout.createStructLayoutClass(runtime, ffi);
if (layout.isUnion()) { if (t.alignment() == layout.getNativeAlignment()) { alignmentType = t; break; throw layout.getRuntime().newRuntimeError("cannot discern base alignment type for union of alignment " + layout.getNativeAlignment()); com.kenai.jffi.Type[] fields = new com.kenai.jffi.Type[layout.getNativeSize() / alignmentType.size()]; Arrays.fill(fields, alignmentType); Collection<StructLayout.Member> structMembers = layout.getMembers(); java.util.List<com.kenai.jffi.Type> fields = new java.util.ArrayList<com.kenai.jffi.Type>(); fieldType = FFIUtil.getFFIType(m.type()); if (fieldType == null) { throw layout.getRuntime().newTypeError("unsupported Struct field type " + m);
/** * Returns a {@link Field} descriptor for a struct field. * * @param name The name of the struct field. * @return A <tt>Member</tt> descriptor. */ final Field getField(Ruby runtime, IRubyObject name) { return getMember(runtime, name).field; }
@JRubyMethod(name = "values") public IRubyObject values(ThreadContext context) { IRubyObject[] values = new IRubyObject[layout.getFieldCount()]; int i = 0; for (StructLayout.Member m : layout.getMembers()) { values[i++] = m.get(context, this, getMemory()); } return RubyArray.newArrayNoCopy(context.runtime, values); }
@JRubyMethod(name = "[]") public IRubyObject aref(ThreadContext context, IRubyObject fieldName) { return getField(context.runtime, fieldName); }
@JRubyMethod(name = { "alignment" }) public IRubyObject alignment(ThreadContext context) { return layout.alignment(context); }