java.lang.Object
java.lang.foreign.ValueLayout
- すべての実装されたインタフェース:
MemoryLayoutPREVIEW
- 直系の既知のサブクラス:
ValueLayout.OfAddressPREVIEW
,ValueLayout.OfBooleanPREVIEW
,ValueLayout.OfBytePREVIEW
,ValueLayout.OfCharPREVIEW
,ValueLayout.OfDoublePREVIEW
,ValueLayout.OfFloatPREVIEW
,ValueLayout.OfIntPREVIEW
,ValueLayout.OfLongPREVIEW
,ValueLayout.OfShortPREVIEW
public sealed class ValueLayout extends Object implements MemoryLayoutPREVIEW permits ValueLayout.OfBytePREVIEW, ValueLayout.OfShortPREVIEW, ValueLayout.OfCharPREVIEW, ValueLayout.OfIntPREVIEW, ValueLayout.OfFloatPREVIEW, ValueLayout.OfLongPREVIEW, ValueLayout.OfDoublePREVIEW, ValueLayout.OfBooleanPREVIEW, ValueLayout.OfAddressPREVIEW
ValueLayout
は、JavaプラットフォームのプレビューAPIです。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
値レイアウト。 値レイアウトは、「整数」タイプの(署名済または未署名)やfloating-pointタイプなど、基本データ型の値に関連付けられたメモリー・レイアウトをモデル化するために使用します。 各値レイアウトには、サイズ、整列(ビット単位)、byte orderおよびcarrierがあります。つまり、値レイアウトを使用してメモリー・リージョンをaccessingPREVIEWするときに使用するJavaタイプです。
このクラスは、Javaプリミティブ型およびアドレスの有用な値レイアウト定数を定義します。 このクラスのレイアウト定数は、暗黙的な整列とバイト順序の想定を行います: このクラスのすべてのレイアウト定数はバイト揃えで、バイト順序は「プラットフォームのデフォルト」に設定されるため、配列やByteBuffer
などの他のAPIを簡単に操作できます。
- 実装要件:
- このクラスとそのサブクラスは不変でスレッド・セーフであり、value-basedです。
- 導入されたバージョン:
- 19
-
ネストされたクラスのサマリー
修飾子と型クラス説明static final class
Preview.キャリアがMemoryAddress.class
の値レイアウト。static final class
Preview.キャリアがboolean.class
の値レイアウト。static final class
Preview.キャリアがbyte.class
の値レイアウト。static final class
Preview.キャリアがchar.class
の値レイアウト。static final class
Preview.キャリアがdouble.class
の値レイアウト。static final class
Preview.キャリアがfloat.class
の値レイアウト。static final class
Preview.キャリアがint.class
の値レイアウト。static final class
Preview.キャリアがlong.class
の値レイアウト。static final class
Preview.キャリアがshort.class
の値レイアウト。インタフェースjava.lang.foreign.MemoryLayoutPREVIEWで宣言されたネストされたクラス/インタフェース
MemoryLayout.PathElementPREVIEW
-
フィールドのサマリー
修飾子と型フィールド説明static final ValueLayout.OfAddressPREVIEW
マシン・アドレス(size_t
)と同じサイズ、ビット位置合わせをsizeof(size_t) * 8
に設定し、バイト順序をByteOrder.nativeOrder()
に設定した値レイアウト定数。static final ValueLayout.OfBooleanPREVIEW
Javaboolean
と同じサイズの値レイアウト定数、8に設定されたビット整列、およびByteOrder.nativeOrder()
に設定されたバイト順序。static final ValueLayout.OfBytePREVIEW
Javabyte
と同じサイズの値レイアウト定数、8に設定されたビット整列、およびByteOrder.nativeOrder()
に設定されたバイト順序。static final ValueLayout.OfCharPREVIEW
サイズがJavachar
、ビット位置合わせが16、バイト順序がByteOrder.nativeOrder()
に設定された値レイアウト定数。static final ValueLayout.OfDoublePREVIEW
Javadouble
と同じサイズ、64に設定されたビット整列、ByteOrder.nativeOrder()
に設定されたバイト順序を持つ値レイアウト定数。static final ValueLayout.OfFloatPREVIEW
サイズがJavafloat
、ビット位置合わせが32、バイト順序がByteOrder.nativeOrder()
に設定されている値レイアウト定数。static final ValueLayout.OfIntPREVIEW
サイズがJavaint
、ビット位置合わせが32、バイト順序がByteOrder.nativeOrder()
に設定されている値レイアウト定数。static final ValueLayout.OfLongPREVIEW
Javalong
と同じサイズ、64に設定されたビット整列、ByteOrder.nativeOrder()
に設定されたバイト順序を持つ値レイアウト定数。static final ValueLayout.OfShortPREVIEW
サイズがJavashort
、ビット位置合わせが16、バイト順序がByteOrder.nativeOrder()
に設定された値レイアウト定数。 -
メソッドのサマリー
修飾子と型メソッド説明arrayElementVarHandle
(int... shape) マルチディメンション配列の間接参照に使用できる「アカド」アクセス変数ハンドルを作成します。final long
このレイアウトに関連付けられている配置制約をビット単位で返します。long
bitSize()
レイアウト・サイズをビット単位で返します。long
byteSize()
レイアウト・サイズをバイト単位で返します。Class<?>
carrier()
この値レイアウトに関連付けられたキャリアを返します。boolean
指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。int
hashCode()
このレイアウトのハッシュ・コード値を返します。boolean
このレイアウトがパディング・レイアウトの場合、trueを返します。name()
このレイアウトに関連付けられている名前(もしあれば)を返します。order()
値のバイト順を返します。toString()
このレイアウトの文字列表現を返します。withBitAlignment
(long alignmentBits) このレイアウトと同じサイズおよび名前のメモリー・レイアウトを返しますが、指定された整列制約(ビット単位)を使用します。サイズと位置合わせの制約がこのレイアウトと同じですが、指定された名前でメモリー・レイアウトを返します。この値レイアウトと同じキャリア、整列制約および名前を持つ値レイアウトを返しますが、指定されたバイト順で返されます。インタフェースjava.lang.foreign.MemoryLayoutPREVIEWで宣言されたメソッド
bitAlignment, bitOffset, bitOffsetHandle, bitSize, byteAlignment, byteOffset, byteOffsetHandle, byteSize, isPadding, name, select, sliceHandle, varHandle
-
フィールド詳細
-
ADDRESS
public static final ValueLayout.OfAddressPREVIEW ADDRESSマシン・アドレス(size_t
)と同じサイズ、ビット位置合わせをsizeof(size_t) * 8
に設定し、バイト順序をByteOrder.nativeOrder()
に設定した値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(MemoryAddress.class, ByteOrder.nativeOrder()) .withBitAlignment(<address size>);
-
JAVA_BYTE
public static final ValueLayout.OfBytePREVIEW JAVA_BYTEJavabyte
と同じサイズの値レイアウト定数、8に設定されたビット整列、およびByteOrder.nativeOrder()
に設定されたバイト順序。 次のコードと同等です:MemoryLayout.valueLayout(byte.class, ByteOrder.nativeOrder()).withBitAlignment(8);
-
JAVA_BOOLEAN
public static final ValueLayout.OfBooleanPREVIEW JAVA_BOOLEANJavaboolean
と同じサイズの値レイアウト定数、8に設定されたビット整列、およびByteOrder.nativeOrder()
に設定されたバイト順序。 次のコードと同等です:MemoryLayout.valueLayout(boolean.class, ByteOrder.nativeOrder()).withBitAlignment(8);
-
JAVA_CHAR
public static final ValueLayout.OfCharPREVIEW JAVA_CHARサイズがJavachar
、ビット位置合わせが16、バイト順序がByteOrder.nativeOrder()
に設定された値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(char.class, ByteOrder.nativeOrder()).withBitAlignment(16);
-
JAVA_SHORT
public static final ValueLayout.OfShortPREVIEW JAVA_SHORTサイズがJavashort
、ビット位置合わせが16、バイト順序がByteOrder.nativeOrder()
に設定された値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(short.class, ByteOrder.nativeOrder()).withBitAlignment(16);
-
JAVA_INT
public static final ValueLayout.OfIntPREVIEW JAVA_INTサイズがJavaint
、ビット位置合わせが32、バイト順序がByteOrder.nativeOrder()
に設定されている値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(int.class, ByteOrder.nativeOrder()).withBitAlignment(32);
-
JAVA_LONG
public static final ValueLayout.OfLongPREVIEW JAVA_LONGJavalong
と同じサイズ、64に設定されたビット整列、ByteOrder.nativeOrder()
に設定されたバイト順序を持つ値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(long.class, ByteOrder.nativeOrder()).withBitAlignment(64);
-
JAVA_FLOAT
public static final ValueLayout.OfFloatPREVIEW JAVA_FLOATサイズがJavafloat
、ビット位置合わせが32、バイト順序がByteOrder.nativeOrder()
に設定されている値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(float.class, ByteOrder.nativeOrder()).withBitAlignment(32);
-
JAVA_DOUBLE
public static final ValueLayout.OfDoublePREVIEW JAVA_DOUBLEJavadouble
と同じサイズ、64に設定されたビット整列、ByteOrder.nativeOrder()
に設定されたバイト順序を持つ値レイアウト定数。 次のコードと同等です:MemoryLayout.valueLayout(double.class, ByteOrder.nativeOrder()).withBitAlignment(64);
-
-
メソッドの詳細
-
order
public ByteOrder order()値のバイト順を返します。- 戻り値:
- 値のバイト順
-
withOrder
public ValueLayoutPREVIEW withOrder(ByteOrder order) この値レイアウトと同じキャリア、整列制約および名前を持つ値レイアウトを返しますが、指定されたバイト順で返されます。- パラメータ:
order
- 必要なバイト順。- 戻り値:
- 指定されたバイト順の値レイアウト。
-
toString
public String toString()このレイアウトの文字列表現を返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のtoString
- 戻り値:
- このレイアウトの文字列表現
-
equals
public boolean equals(Object other) 指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。 指定されたオブジェクトもレイアウトであり、このレイアウトと等しい場合にのみ、true
を返します。 2つのレイアウトが同じ種類であり、同じサイズ、名前および位置合せ制約を持つ場合は、それらが等価であるとみなされます。 また、レイアウトの種類に応じて、追加の条件を満たす必要があります:- orderとcarrierが同じ場合、2つの値のレイアウトは等しいとみなされます
- 同じ要素数(
SequenceLayout.elementCount()
PREVIEWを参照してください)を持つ場合、およびそれらの要素レイアウト(SequenceLayout.elementLayout()
PREVIEWを参照してください)も等しい場合、2つの順序レイアウトは等しいとみなされます - 2つのグループ・レイアウトは同じ種類の(
GroupLayout.isStruct()
PREVIEW、GroupLayout.isUnion()
PREVIEWを参照してください)であり、メンバー・レイアウト(GroupLayout.memberLayouts()
PREVIEWを参照してください)も同じ場合、同じとみなされます
- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のequals
- パラメータ:
other
- このレイアウトと等価性を持たせるために比較するオブジェクト。- 戻り値:
- 指定されたオブジェクトがこのレイアウトに等しい場合、
true
。 - 関連項目:
-
arrayElementVarHandle
public VarHandle arrayElementVarHandle(int... shape) マルチディメンション配列の間接参照に使用できる「アカド」アクセス変数ハンドルを作成します。 この配列のレイアウトは、shape.length
ネストされた順序レイアウトを含む順序レイアウトです。 深さshape.length
での順序レイアウトの要素レイアウトは、この値のレイアウトです。 その結果、shape.length == 0
の場合、配列レイアウトには1つのディメンションのみが含まれます。結果のvarハンドルは、
long
型のsizes.length + 1
座標を備えており、これはマルチディメンション配列の索引として使用されます。たとえば、次のメソッド・コールがあります:
VarHandle arrayHandle = ValueLayout.JAVA_INT.arrayElementVarHandle(10, 20);
SequenceLayout arrayLayout = MemoryLayout.sequenceLayout(-1, MemoryLayout.sequenceLayout(10, MemoryLayout.sequenceLayout(20, ValueLayout.JAVA_INT)));
arrayHandle
は、タイプlong
の3つの座標を備えています。各座標は、対応する順序レイアウトへの索引として解釈されます。 varハンドルの座標を左から右にそれぞれx
、y
およびz
として参照する場合、varハンドルによって参照される最終オフセットは次の式で計算できます:
また、offset = (10 * 20 * 4 * x) + (20 * 4 * y) + (4 * z)
x
、y
およびz
の値は、次のように制約されます:0 <= x < arrayLayout.elementCount()
0 <= y < 10
0 <= z < 20
次のアクセス式について考えます:
int value1 = arrayHandle.get(10, 2, 4); // ok, accessed offset = 8176 int value2 = arrayHandle.get(0, 0, 30); // out of bounds value for z
x
、y
およびz
の値が前述の境界に適合するため、アクセスは整形式です。 2番目のケースでは、z
の値が指定された範囲外であるため、IndexOutOfBoundsException
を使用してアクセスが失敗します。- パラメータ:
shape
- ネストされた配列ディメンションのサイズ。- 戻り値:
shape.length + 1
long
座標を持つ多ディメンション配列を間接参照するために使用できるvarハンドル。- 例外:
IllegalArgumentException
-shape[i] < 0
の場合、少なくとも1つの索引i
。UnsupportedOperationException
-bitAlignment() > bitSize()
の場合。- 関連項目:
-
carrier
public Class<?> carrier()この値レイアウトに関連付けられたキャリアを返します。- 戻り値:
- この値レイアウトに関連付けられたキャリア
-
hashCode
public int hashCode()このレイアウトのハッシュ・コード値を返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のhashCode
- 戻り値:
- このレイアウトのハッシュ・コード値
- 関連項目:
-
withName
public ValueLayoutPREVIEW withName(String name) サイズと位置合わせの制約がこのレイアウトと同じですが、指定された名前でメモリー・レイアウトを返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のwithName
- パラメータ:
name
- レイアウト名。- 戻り値:
- 指定された名前のメモリー・レイアウト。
- 関連項目:
-
withBitAlignment
public ValueLayoutPREVIEW withBitAlignment(long alignmentBits) このレイアウトと同じサイズおよび名前のメモリー・レイアウトを返しますが、指定された整列制約(ビット単位)を使用します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のwithBitAlignment
- パラメータ:
alignmentBits
- レイアウト位置合せ制約。ビットで表されます。- 戻り値:
- 指定された整列制約を持つメモリー・レイアウト。
-
name
インタフェースからコピーされた説明:MemoryLayout
このレイアウトに関連付けられている名前(もしあれば)を返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のname
- 戻り値:
- このレイアウトに関連付けられている名前(もしあれば)
- 関連項目:
-
bitAlignment
public final long bitAlignment()インタフェースからコピーされた説明:MemoryLayout
このレイアウトに関連付けられている配置制約をビット単位で返します。 レイアウトの位置合せにより、レイアウトのビット単位の位置合せである2つのA
の機能が定義されます。A <= 8
の場合、A/8
は、このレイアウトを適切にポイントするポインタに対して整列する必要があるバイト数です。 このため、:A=8
では、すべての(通常の意味で)がパケットで共有されないことを意味します。A=64
は、aligned (on LP64)、A=32
int aligned、A=16
short alignedなどの単語を意味します。A=512
は、x86/SV ABI (AVX-512データ)で必要とされる最も厳密な位置合せです。
MemoryLayout.withBitAlignment(long)
PREVIEWを参照してください)に明示的な位置合せ制約が設定されていない場合、このメソッドは、このレイアウトに関連付けられている「自然整列」制約(ビット単位)を返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のbitAlignment
- 戻り値:
- レイアウト位置合せ制約をビット単位で指定します。
-
byteSize
public long byteSize()インタフェースからコピーされた説明:MemoryLayout
レイアウト・サイズをバイト単位で返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のbyteSize
- 戻り値:
- レイアウト・サイズ(バイト)
-
bitSize
public long bitSize()インタフェースからコピーされた説明:MemoryLayout
レイアウト・サイズをビット単位で返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のbitSize
- 戻り値:
- レイアウト・サイズ(ビット単位)
-
isPadding
public boolean isPadding()インタフェースからコピーされた説明:MemoryLayout
このレイアウトがパディング・レイアウトの場合、trueを返します。- 定義:
- インタフェース
MemoryLayoutPREVIEW
内のisPadding
- 戻り値:
- このレイアウトがパディング・レイアウトの場合、true
-
ValueLayout
を使用できます。