public abstract class Union extends Structure
setType(java.lang.Class<?>)
will be written
to native memory. Upon reading from native memory, Structure, String,
or WString fields will not be initialized unless they are
the current field as identified by a call to setType(java.lang.Class<?>)
. The current
field is always unset by default to avoid accidentally attempting to read
a field that is not valid. In the case of a String, for instance, an
invalid pointer may result in a memory fault when attempting to initialize
the String.Structure.ByReference, Structure.ByValue, Structure.FFIType, Structure.FieldOrder, Structure.StructField, Structure.StructureSet
ALIGN_DEFAULT, ALIGN_GNUC, ALIGN_MSVC, ALIGN_NONE, CALCULATE_SIZE, fieldOrder, layoutInfo
Modifier | Constructor and Description |
---|---|
protected |
Union()
Create a Union whose size and alignment will be calculated
automatically.
|
protected |
Union(Pointer p)
Create a Union of the given size, using default alignment.
|
protected |
Union(Pointer p,
int alignType)
Create a Union of the given size and alignment type.
|
protected |
Union(Pointer p,
int alignType,
TypeMapper mapper)
Create a Union of the given size and alignment type.
|
protected |
Union(TypeMapper mapper)
Create a Union of the given size and alignment type.
|
Modifier and Type | Method and Description |
---|---|
protected java.util.List<java.lang.String> |
getFieldOrder()
Unions do not need a field order, so automatically provide a value to
satisfy checking in the Structure superclass.
|
protected int |
getNativeAlignment(java.lang.Class<?> type,
java.lang.Object value,
boolean isFirstElement)
All fields are considered the "first" element.
|
java.lang.Object |
getTypedValue(java.lang.Class<?> type)
Reads the Structure field of the given type from memory, sets it as
the active type and returns it.
|
java.lang.Object |
readField(java.lang.String fieldName)
Force a read of the given field from native memory.
|
protected java.lang.Object |
readField(Structure.StructField field)
Avoid reading pointer-based fields and structures unless explicitly
selected.
|
void |
setType(java.lang.Class<?> type)
Indicates by type which field will be used to write to native memory.
|
void |
setType(java.lang.String fieldName)
Indicates which field will be used to write to native memory.
|
java.lang.Object |
setTypedValue(java.lang.Object object)
Set the active type and its value.
|
void |
writeField(java.lang.String fieldName)
Write the given field value to native memory.
|
void |
writeField(java.lang.String fieldName,
java.lang.Object value)
Write the given field value to the field and native memory.
|
protected void |
writeField(Structure.StructField field)
Only the currently selected field will be written.
|
allocateMemory, allocateMemory, autoAllocate, autoRead, autoRead, autoWrite, autoWrite, busy, cacheTypeInfo, calculateSize, calculateSize, clear, conditionalAutoRead, createFieldsOrder, createFieldsOrder, createFieldsOrder, createFieldsOrder, dataEquals, dataEquals, ensureAllocated, equals, fieldOffset, fields, getAutoRead, getAutoWrite, getFieldList, getFields, getFieldTypeInfo, getFieldValue, getNativeSize, getNativeSize, getPointer, getStringEncoding, getStructAlignment, getTypeInfo, getTypeInfo, getTypeMapper, hashCode, newInstance, newInstance, read, reading, setAlignType, setAutoRead, setAutoSynch, setAutoWrite, setFieldValue, setStringEncoding, size, size, size, sortFields, toArray, toArray, toString, toString, updateStructureByReference, useMemory, useMemory, useMemory, validate, write
protected Union()
protected Union(Pointer p)
protected Union(Pointer p, int alignType)
protected Union(TypeMapper mapper)
protected Union(Pointer p, int alignType, TypeMapper mapper)
protected java.util.List<java.lang.String> getFieldOrder()
getFieldOrder
in class Structure
public void setType(java.lang.Class<?> type)
setType(String)
instead with the field name.type
- desired active type for the unionjava.lang.IllegalArgumentException
- if the type does not correspond to
any declared union field.public void setType(java.lang.String fieldName)
fieldName
- desired field to use for the active union typejava.lang.IllegalArgumentException
- if the name does not correspond to
any declared union field.public java.lang.Object readField(java.lang.String fieldName)
public void writeField(java.lang.String fieldName)
writeField
in class Structure
fieldName
- which field to synchjava.lang.IllegalArgumentException
- if no field exists with the given namepublic void writeField(java.lang.String fieldName, java.lang.Object value)
writeField
in class Structure
fieldName
- field to writevalue
- value to writejava.lang.IllegalArgumentException
- if no field exists with the given namepublic java.lang.Object getTypedValue(java.lang.Class<?> type)
Union u;
Class type;
u.setType(type);
u.read();
value = u.field;
type
- class type of the Structure field to readpublic java.lang.Object setTypedValue(java.lang.Object object)
Union u;
Class type;
u.setType(type);
u.field = value;
object
- instance of a class which is part of the unionprotected void writeField(Structure.StructField field)
writeField
in class Structure
field
- internal field representation to synch to native memoryprotected java.lang.Object readField(Structure.StructField field)
protected int getNativeAlignment(java.lang.Class<?> type, java.lang.Object value, boolean isFirstElement)
getNativeAlignment
in class Structure
type
- field typevalue
- field value, if availableisFirstElement
- is this field the first element in the struct?