Package org.jruby.ext.ffi
Class StructLayout
java.lang.Object
org.jruby.RubyBasicObject
org.jruby.RubyObject
org.jruby.ext.ffi.Type
org.jruby.ext.ffi.StructLayout
- All Implemented Interfaces:
Serializable,Cloneable,Comparable<IRubyObject>,InstanceVariables,InternalVariables,IRubyObject,CoreObjectType
Defines the memory layout for a native structure.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class(package private) static final classstatic classstatic final class(package private) static final classstatic final class(package private) static final classEnum (maps :foo => 1, :bar => 2, etc)static class(package private) static interfacestatic final class(package private) static final classstatic final class(package private) static final class(package private) static final classstatic final classA struct member.(package private) static final class(package private) static classstatic final class(package private) static final classPrimitive (byte, short, int, long, float, double) types are all handled by a PrimitiveMember type.static final class(package private) static final classstatic interface(package private) static final class(package private) static final classNested classes/interfaces inherited from class org.jruby.ext.ffi.Type
Type.Array, Type.BuiltinNested classes/interfaces inherited from class org.jruby.RubyObject
RubyObject.DataNested classes/interfaces inherited from class org.jruby.RubyBasicObject
RubyBasicObject.Finalizer -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final intThe number of cacheable fields in this struct(package private) static final StringThe name to use to register this class in the JRuby runtimeprivate final List<IRubyObject>The ordered list of field names (as symbols)private final List<StructLayout.Field>The ordered list of fieldsprivate final StructLayout.Member[]private final booleanprivate final Map<IRubyObject,StructLayout.Member> The name:offset map for this structprivate final Collection<StructLayout.Member>The ordered list of fields(package private) static final StructLayout.Storageprivate final intThe number of reference fields in this structFields inherited from class org.jruby.ext.ffi.Type
alignment, nativeType, sizeFields inherited from class org.jruby.RubyObject
IVAR_INSPECTING_OBJECT_ALLOCATOR, OBJECT_ALLOCATOR, REIFYING_OBJECT_ALLOCATORFields inherited from class org.jruby.RubyBasicObject
ALL_F, BASICOBJECT_ALLOCATOR, COMPARE_BY_IDENTITY_F, ERR_INSECURE_SET_INST_VAR, FALSE_F, FL_USHIFT, flags, FROZEN_F, IS_OVERLAID_F, metaClass, NEVER, NIL_F, REFINED_MODULE_F, STAMP_OFFSET, TAINTED_F, UNDEF, UNTRUST_F, USER0_F, USER1_F, USER2_F, USER3_F, USER4_F, USER5_F, USER6_F, USER7_F, USER8_F, USER9_F, USERA_F, VAR_TABLE_OFFSET, varTable, varTableStampFields inherited from interface org.jruby.runtime.builtin.IRubyObject
NULL_ARRAY -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateStructLayout(Ruby runtime, RubyClass klass, Collection<IRubyObject> fields, int size, int alignment) Creates a new StructLayout instance. -
Method Summary
Modifier and TypeMethodDescriptionaref(ThreadContext context, IRubyObject fieldName) static RubyClasscreateStructLayoutClass(Ruby runtime, RubyModule module) Registers the StructLayout class in the JRuby runtime.booleanThis override does not do a "checked" dispatch.fields(ThreadContext context) get(ThreadContext context, IRubyObject ptr, IRubyObject name) Gets the value of the struct member corresponding to name.private static MemoryOpgetArrayComponentMemoryOp(Type.Array arrayType) (package private) final int(package private) final int(package private) final StructLayout.FieldgetField(Ruby runtime, IRubyObject name) Returns aStructLayout.Fielddescriptor for a struct field.final intfinal Collection<StructLayout.Field>(package private) final StructLayout.MembergetMember(Ruby runtime, IRubyObject name) Returns aStructLayout.Memberdescriptor for a struct field.final Collection<StructLayout.Member>(package private) final int(package private) final intfinal intgetSize()(package private) final IRubyObjectgetValue(ThreadContext context, IRubyObject name, StructLayout.Storage cache, IRubyObject ptr) inthashCode()This override does not do "checked" dispatch since Object usually has #hash defined.final booleanisUnion()members(ThreadContext context) Gets a ruby array of the names of all members of this struct.static final IRubyObjectnewStructLayout(ThreadContext context, IRubyObject klass, IRubyObject[] args) private static intnextIndex(int idx, int length) offset_of(ThreadContext context, IRubyObject fieldName) offsets(ThreadContext context) Gets a ruby array of the offsets of all members of this struct.put(ThreadContext context, IRubyObject ptr, IRubyObject name, IRubyObject value) Sets the native value of the struct member corresponding to name.(package private) final voidputValue(ThreadContext context, IRubyObject name, StructLayout.Storage cache, IRubyObject ptr, IRubyObject value) private static intsymbolIndex(IRubyObject name, int length) union_bang(ThreadContext context) Methods inherited from class org.jruby.ext.ffi.Type
alignment, createTypeClass, getNativeAlignment, getNativeAlignment, getNativeSize, getNativeSize, getNativeType, getTypeClass, sizeMethods inherited from class org.jruby.RubyObject
attachToObjectSpace, callInit, callInit, callInit, callInit, callInit, callInit, callInit, callInit, callInit, callInit, convertToType, createObjectClass, dig, dig1, dig2, eqlInternal, equalInternal, getNativeClassIndex, inspect, op_eqq, puts, specificEval, toRubyString, toStringMethods inherited from class org.jruby.RubyBasicObject
addFinalizer, anyToString, asJavaString, asString, callMethod, callMethod, callMethod, callMethod, callMethod, callMethod, callMethod, callMethod, callMethod, callSuper, checkArrayType, checkCallMethod, checkCallMethod, checkFrozen, checkStringType, checkStringType19, compareTo, convertToArray, convertToFloat, convertToHash, convertToInteger, convertToInteger, convertToInteger, convertToString, copyInstanceVariablesInto, copySpecialInstanceVariables, createBasicObjectClass, dataGetStruct, dataGetStructChecked, dataWrapStruct, decode, display, dup, ensureInstanceVariablesSettable, eql, eql_p, equal_p, equal_p19, evalUnder, extend, fastGetInstanceVariable, fastGetInternalVariable, fastHasInstanceVariable, fastHasInternalVariable, fastSetInstanceVariable, fastSetInternalVariable, freeze, frozen_p, getFFIHandle, getFlag, getInstanceEvalClass, getInstanceVariable, getInstanceVariableList, getInstanceVariableNameList, getInstanceVariables, getInternalVariable, getInternalVariables, getJavaClass, getMetaClass, getMetaClass, getNativeHandle, getNativeTypeIndex, getObjectId, getRuntime, getSingletonClass, getSingletonClassClone, getSingletonClassCloneAndAttach, getType, getVariable, getVariableCount, getVariableList, getVariableNameList, hash, hashyInspect, hasInstanceVariable, hasInstanceVariables, hasInternalVariable, hasVariables, id, infectBy, initialize, initialize_copy, initialize19, inspect, inspectHashCode, instance_eval, instance_eval, instance_eval, instance_eval, instance_eval19, instance_eval19, instance_eval19, instance_eval19, instance_exec, instance_exec19, instance_of_p, instance_variable_defined_p, instance_variable_get, instance_variable_set, instance_variables, instance_variables19, isBuiltin, isClass, isFalse, isFrozen, isImmediate, isModule, isNil, isSpecialConst, isSpecialObject, isTaint, isTrue, isUntrusted, kind_of_p, makeMetaClass, method, method_missing, method_missing19, method19, methods, methods, methods19, nil_p, nonFixnumHashCode, OBJ_INIT_COPY, objInitCopy, op_cmp, op_equal, op_equal_19, op_match, op_match19, op_not, op_not_equal, op_not_match, private_methods, private_methods19, protected_methods, protected_methods19, public_methods, public_methods19, rbClone, rbClone, rbInspect, remove_instance_variable, removeFinalizers, removeInstanceVariable, removeInternalVariable, respond_to_p, respond_to_p, respond_to_p19, respond_to_p19, respondsTo, respondsToMissing, respondsToMissing, send, send, send, send, send, send19, send19, send19, send19, setFFIHandle, setFlag, setFrozen, setInstanceVariable, setInternalVariable, setMetaClass, setNativeHandle, setTaint, setUntrusted, setVariable, singleton_method, singleton_method_added, singleton_method_added19, singleton_method_removed, singleton_method_removed19, singleton_method_undefined, singleton_method_undefined19, singleton_methods, specificEval, specificEval, specificEval, specificEval, syncVariables, syncVariables, taint, taint, tainted_p, testFrozen, testFrozen, to_a, to_a, to_s, toJava, trust, type, type_deprecated, untaint, untrust, untrusted_p, validateInstanceVariable, validateInstanceVariable, validateInstanceVariable, variableTableContains, variableTableFastContains, variableTableFastFetch, variableTableFastStore, variableTableFetch, variableTableRemove, variableTableStore, variableTableSync, yieldUnder, yieldUnder
-
Field Details
-
nullStorage
-
CLASS_NAME
The name to use to register this class in the JRuby runtime- See Also:
-
identityLookupTable
-
memberMap
The name:offset map for this struct -
fieldNames
The ordered list of field names (as symbols) -
fields
The ordered list of fields -
members
The ordered list of fields -
cacheableFieldCount
private final int cacheableFieldCountThe number of cacheable fields in this struct -
referenceFieldCount
private final int referenceFieldCountThe number of reference fields in this struct -
isUnion
private final boolean isUnion
-
-
Constructor Details
-
StructLayout
private StructLayout(Ruby runtime, RubyClass klass, Collection<IRubyObject> fields, int size, int alignment) Creates a new StructLayout instance.- Parameters:
runtime- The runtime for the StructLayout.fields- The fields map for this struct.size- the total size of the struct.alignment- The minimum alignment required when allocating memory.
-
-
Method Details
-
createStructLayoutClass
Registers the StructLayout class in the JRuby runtime.- Parameters:
runtime- The JRuby runtime to register the new class in.- Returns:
- The new class
-
newStructLayout
public static final IRubyObject newStructLayout(ThreadContext context, IRubyObject klass, IRubyObject[] args) -
get
Gets the value of the struct member corresponding to name.- Parameters:
ptr- The address of the structure in memory.name- The name of the member.- Returns:
- A ruby value for the native value of the struct member.
-
put
Sets the native value of the struct member corresponding to name.- Parameters:
ptr- The address of the structure in memory.name- The name of the member.- Returns:
- A ruby value for the native value of the struct member.
-
members
Gets a ruby array of the names of all members of this struct.- Returns:
- a RubyArray containing the names of all members.
-
offsets
Gets a ruby array of the offsets of all members of this struct.- Returns:
- a RubyArray containing the offsets of all members.
-
offset_of
-
aref
-
fields
-
union_bang
-
getValue
final IRubyObject getValue(ThreadContext context, IRubyObject name, StructLayout.Storage cache, IRubyObject ptr) -
putValue
final void putValue(ThreadContext context, IRubyObject name, StructLayout.Storage cache, IRubyObject ptr, IRubyObject value) -
equals
Description copied from class:RubyObjectThis override does not do a "checked" dispatch.- Overrides:
equalsin classRubyObject- See Also:
-
hashCode
public int hashCode()Description copied from class:RubyObjectThis override does not do "checked" dispatch since Object usually has #hash defined.- Overrides:
hashCodein classRubyObject- See Also:
-
symbolIndex
-
nextIndex
private static int nextIndex(int idx, int length) -
getMember
Returns aStructLayout.Memberdescriptor for a struct field.- Parameters:
name- The name of the struct field.- Returns:
- A Member descriptor.
-
getField
Returns aStructLayout.Fielddescriptor for a struct field.- Parameters:
name- The name of the struct field.- Returns:
- A Member descriptor.
-
getSize
public final int getSize() -
getReferenceFieldCount
final int getReferenceFieldCount() -
getReferenceFieldIndex
-
getCacheableFieldCount
final int getCacheableFieldCount() -
getCacheableFieldIndex
-
getFieldCount
public final int getFieldCount() -
getFields
-
getMembers
-
isUnion
public final boolean isUnion() -
getArrayComponentMemoryOp
-