- すべてのスーパー・インタフェース:
Constable
- 既知のすべての実装クラス:
GroupLayout
,SequenceLayout
,ValueLayout
,ValueLayout.OfAddress
,ValueLayout.OfBoolean
,ValueLayout.OfByte
,ValueLayout.OfChar
,ValueLayout.OfDouble
,ValueLayout.OfFloat
,ValueLayout.OfInt
,ValueLayout.OfLong
,ValueLayout.OfShort
ValueLayout
を参照してください)および「パディング・レイアウト」の値を表すために使用されます。名前の推奨は、内容を無視する必要があるメモリー・セグメントの一部を表し、主に位置合せ(paddingLayout(long)
を参照してください)のために存在します。 一般的な値レイアウトの定数の一部は、ValueLayout
クラスで定義されます。
より複雑なレイアウトをより単純なものから導出できます: 「順序レイアウト」は1つ以上の要素レイアウト(SequenceLayout
を参照してください)の繰返しを示し、「グループ・レイアウト」は、(typically)異種メンバーのレイアウト(GroupLayout
を参照してください)の集計を示します。
たとえば、Cでの次の構造体宣言について考えてみます:
typedef struct {
char kind;
int value;
} TaggedValues[5];
SequenceLayout taggedValues = MemoryLayout.sequenceLayout(5,
MemoryLayout.structLayout(
ValueLayout.JAVA_BYTE.withName("kind"),
MemoryLayout.paddingLayout(24),
ValueLayout.JAVA_INT.withName("value")
)
).withName("TaggedValues");
このインタフェースのすべての実装はvalue-basedである必要があります。プログラマは、equalのインスタンスを交換可能として扱う必要があり、同期にインスタンスを使用しないでください。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 比較する場合は、equals
メソッドを使用することをお薦めします。
特に指定がないかぎり、null
引数、またはこのクラスのメソッドに1つ以上のnull
要素を含む配列引数を渡すと、NullPointerException
がスローされます。
サイズ、位置合せおよびバイト順序
すべてのレイアウトにはサイズが設定され、値とパディングのレイアウト・サイズは常に明示的に指定されています。これは、使用されているプラットフォームに関係なく、レイアウト摘要が常に同じサイズであることを意味します。 派生レイアウトの場合、サイズは次のように計算されます:- 要素レイアウトがEで、サイズがlの「有限」順序レイアウトSの場合、SのサイズはEのサイズにLを乗算した値です
- 「制限なし」順序レイアウトのサイズは、「不明」です。
- メンバー・レイアウトM1を含むグループ・レイアウトGの場合、サイズがS1、S2、... Sn、それぞれM2、... Mn、Gのサイズは、グループが「構造体」であるかunionであるかに応じて、それぞれS1 + S2 + ... + Snまたはmax(S1, S2, ... Sn)のどちらかになります
さらに、すべてのレイアウトは、次のように推測できる「自然整列」の機能です:
- パディング・レイアウトLの場合、自然位置合せはサイズに関係なく1です。つまり、明示的位置合せ制約がない場合、パディング・レイアウトはネスト先のグループ・レイアウトの位置合せ制約に影響しません。
- サイズがNの値レイアウトLの場合、Lの自然位置合せはNです。
- 要素レイアウトがEである順序レイアウトSの場合、Sでは自然の位置合せがEです。
- メンバー・レイアウトがM1、M2、... Mnのグループ・レイアウトGの場合、位置がA1、A2、... 「1つの」となります。Gの自然な位置合せはmax(A1, A2 ... An)です。
withBitAlignment(long)
を参照してください)が必要な場合は、レイアウトの自然位置合せを上書きできます。これは、ハイパーリンク化されたレイアウトを記述するのに役立ちます。
すべての値レイアウトには、レイアウトの作成時に設定されるexplicitバイト順(ByteOrder
を参照してください)があります。
レイアウト・パス
「レイアウト・パス」はrootレイアウト(通常、グループまたは順序レイアウトです)から派生し、ルート・レイアウト内にネストされたレイアウトで終了 - これはレイアウト・パスによってレイアウトselectedされたものです。 レイアウト・パスは通常、1つ以上のMemoryLayout.PathElement
インスタンスのシーケンスとして表現されます。
レイアウト・パスは、たとえば、別のレイアウト内で任意にネストされたレイアウトのoffsetsを取得したり、選択したレイアウトに対応する「メモリー・アクセス・ハンドル」をすばやく取得したり、別のレイアウト内で任意にネストされたレイアウトを「選択」したり、別のレイアウト内でネストされたレイアウト要素をtransform
するために役立ちます。
このような「レイアウト・パス」は、このクラスのメソッドを使用してプログラムで作成できます。 たとえば、前述のように構築されたtaggedValues
レイアウト・インスタンスの場合、次のようにfirst順序要素でvalue
というメンバー・レイアウトのオフセットをビット単位で取得できます:
long valueOffset = taggedValues.bitOffset(PathElement.sequenceElement(0),
PathElement.groupElement("value")); // yields 32
value
という名前のメンバー・レイアウトを次のように選択できます:
MemoryLayout value = taggedValues.select(PathElement.sequenceElement(),
PathElement.groupElement("value"));
value
という名前のレイアウトを別のレイアウトに置換することもできます:
MemoryLayout taggedValuesWithHole = taggedValues.map(l -> MemoryLayout.paddingLayout(32),
PathElement.sequenceElement(), PathElement.groupElement("value"));
MemoryLayout taggedValuesWithHole = MemoryLayout.sequenceLayout(5,
MemoryLayout.structLayout(
ValueLayout.JAVA_BYTE.withName("kind"),
MemoryLayout.paddingLayout(32),
MemoryLayout.paddingLayout(32)
));
MemoryLayout.PathElement.sequenceElement()
メソッドを使用して取得された場合です。)をたどるレイアウト・パスは、実行時にバインドする必要がある追加の空きディメンションを持ちます。 これは、次のコードに示すように、レイアウトからメモリー・アクセス変数ハンドルを取得するときに重要です:
VarHandle valueHandle = taggedValues.varHandle(PathElement.sequenceElement(),
PathElement.groupElement("value"));
value
という名前のwhichメンバー・レイアウトを囲みシーケンスのレイアウトから選択する必要があることを指定していないため)を特徴としているため、メモリー・アクセス変数ハンドルvalueHandle
は「追加」 long
アクセス座標を特徴としています。
フリー・ディメンションのレイアウト・パスは、bitOffset(PathElement...)
またはbyteOffsetHandle(PathElement...)
メソッドを使用したオフセット計算メソッド・ハンドルの作成にも使用できます。 ここでも、フリー・ディメンションは、作成されたメソッド・ハンドルのlong
パラメータに変換されます。 メソッド・ハンドルを使用すると、メソッド・ハンドルの起動時にこれらの索引を指定することで、異なる索引で順序の要素のオフセットをコンピュートできます。 次に例を示します。
MethodHandle offsetHandle = taggedValues.byteOffsetHandle(PathElement.sequenceElement(),
PathElement.groupElement("kind"));
long offset1 = (long) offsetHandle.invokeExact(1L); // 8
long offset2 = (long) offsetHandle.invokeExact(2L); // 16
レイアウト属性
レイアウトは、オプションでnameに関連付けることができます。 レイアウト名は、「レイアウト・パス」の作成時に参照できます。- 実装要件:
- このインタフェースの実装は不変、スレッド・セーフ、およびvalue-basedです。
-
ネストされたクラスのサマリー
ネストされたクラス -
メソッドのサマリー
修飾子と型メソッド説明long
このレイアウトに関連付けられている配置制約をビット単位で返します。default long
bitOffset
(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位で計算します。この場合、パスはこのレイアウトのルートとみなされます。default MethodHandle
bitOffsetHandle
(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスで選択されたレイアウトのオフセットをビット単位でコンピュートするために使用できるメソッド・ハンドルを作成します。この場合、パスはこのレイアウト内でルートとみなされます。long
bitSize()
レイアウト・サイズをビット単位で返します。default long
このレイアウトに関連付けられているバイト単位の配置制約を返します。default long
byteOffset
(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)を計算します。この場合、パスはこのレイアウトのルートとみなされます。default MethodHandle
byteOffsetHandle
(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスで選択されたレイアウトのオフセットをバイト単位でコンピュートするために使用できるメソッド・ハンドルを作成します。このパスは、このレイアウト内ではルートとみなされます。long
byteSize()
レイアウト・サイズをバイト単位で返します。Optional<? extends DynamicConstantDesc<? extends MemoryLayout>>
boolean
指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。int
hashCode()
このレイアウトのハッシュ・コード値を返します。boolean
hasSize()
このレイアウトに指定したサイズがある場合、true
を返します。boolean
このレイアウトがパディング・レイアウトの場合、trueを返します。default MemoryLayout
map
(UnaryOperator<MemoryLayout> op, MemoryLayout.PathElement... elements) このレイアウトのルートにあるパスから選択したレイアウトが、指定された操作の適用結果で置き換えられるこのレイアウトの変換済コピーが作成されます。name()
このレイアウトに関連付けられたname (もしあれば)を返します。static MemoryLayout
paddingLayout
(long size) 指定したサイズで新しいパディング・レイアウトを作成します。default MemoryLayout
select
(MemoryLayout.PathElement... elements) このレイアウトのルートとなっているパスからレイアウトを選択します。static SequenceLayout
sequenceLayout
(long elementCount, MemoryLayout elementLayout) 指定された要素レイアウトおよび要素数を使用して、新規順序レイアウトを作成します。static SequenceLayout
sequenceLayout
(MemoryLayout elementLayout) バインドなし要素カウントと指定された要素レイアウトを使用して、新しい順序レイアウトを作成します。default MethodHandle
sliceHandle
(MemoryLayout.PathElement... elements) メモリー・セグメントが指定されたメソッド・ハンドルを作成し、特定のレイアウト・パスによって選択されたレイアウトに対応するsliceを返します。このレイアウトでは、パスはルートとみなされます。static GroupLayout
structLayout
(MemoryLayout... elements) 指定したメンバー・レイアウトで新しい「構造体」グループ・レイアウトを作成します。toString()
このレイアウトの文字列表現を返します。static GroupLayout
unionLayout
(MemoryLayout... elements) 指定したメンバー・レイアウトで新しいunionグループ・レイアウトを作成します。static ValueLayout
valueLayout
(Class<?> carrier, ByteOrder order) 指定されたJavaキャリアおよびバイト順序の値レイアウトを作成します。default VarHandle
varHandle
(MemoryLayout.PathElement... elements) 特定のレイアウト・パスで選択されたレイアウトでメモリーを参照解除するために使用できるメモリー・アクセス変数ハンドルを作成します。この場合、パスはこのレイアウトのルートとみなされます。withBitAlignment
(long bitAlignment) 目的の位置合せ制約を機能する新しいレイアウトを作成します。必要なレイアウトnameが機能する新しいレイアウトを作成します。
-
メソッドの詳細
-
describeConstable
Optional<? extends DynamicConstantDesc<? extends MemoryLayout>> describeConstable()- 定義:
- インタフェース
Constable
内のdescribeConstable
- 戻り値:
- このレイアウトの公称記述子を含む
Optional
(構成可能な場合)、または空のOptional
(構成できない場合)
-
hasSize
boolean hasSize()このレイアウトに指定したサイズがある場合、true
を返します。 レイアウトが(次を含む)でサイズが未指定の(SequenceLayout.elementCount()
を参照してください)の順序レイアウトである場合、そのレイアウトには指定されたサイズがありません。 値レイアウト(ValueLayout
を参照してください)およびパディングのレイアウト(paddingLayout(long)
を参照してください) alwaysには指定されたサイズがあるため、このメソッドは常にtrue
を返します。- 戻り値:
- このレイアウトが指定されたサイズの場合、
true
。
-
bitSize
long bitSize()レイアウト・サイズをビット単位で返します。- 戻り値:
- レイアウト・サイズ(ビット単位)
- 例外:
UnsupportedOperationException
- レイアウトが、またはレイアウトに含まれている場合、(SequenceLayout
を参照してください)は未指定のサイズの順序レイアウトです。
-
byteSize
long byteSize()レイアウト・サイズをバイト単位で返します。- 戻り値:
- レイアウト・サイズ(バイト)
- 例外:
UnsupportedOperationException
- レイアウトが次のものであるか、またはレイアウトが含まれている場合、(SequenceLayout
を参照してください)のサイズが指定されていないシーケンス・レイアウトであるか、bitSize()
が8の倍数でないとき。
-
name
このレイアウトに関連付けられたname (もしあれば)を返します。- 戻り値:
- このレイアウトに関連付けられたname (もしあれば)
- 関連項目:
-
withName
MemoryLayout withName(String name) 必要なレイアウトnameが機能する新しいレイアウトを作成します。- パラメータ:
name
- レイアウト名。- 戻り値:
- このレイアウトと同じ新しいレイアウト(関連付けられているnameを除く)。
- 関連項目:
-
bitAlignment
long bitAlignment()このレイアウトに関連付けられている配置制約をビット単位で返します。 レイアウトの位置合せにより、レイアウトのビット単位の位置合せである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データ)で必要とされる最も厳密な位置合せです。
withBitAlignment(long)
を参照してください)に明示的な位置合せ制約が設定されていない場合、このメソッドはこのレイアウトに関連付けられた「自然整列」制約(ビット単位)を返します。- 戻り値:
- レイアウト位置合せ制約をビット単位で指定します。
-
byteAlignment
default long byteAlignment()このレイアウトに関連付けられているバイト単位の配置制約を返します。 レイアウトの位置合せでは、レイアウトのバイト単位の位置合せである2つのA
の累乗を定義します。A
は、このレイアウトを適切に示すポインタに対して整列する必要があるバイト数です。 このため、:A=1
では、すべての(通常の意味で)がパケットで共有されないことを意味します。A=8
は、aligned (on LP64)、A=4
int aligned、A=2
short alignedなどの単語を意味します。A=64
は、x86/SV ABI (AVX-512データ)で必要とされる最も厳密な位置合せです。
withBitAlignment(long)
を参照してください)に明示的な位置合せ制約が設定されていない場合、このメソッドはこのレイアウトに関連付けられた「自然整列」制約(バイト単位)を返します。- 戻り値:
- レイアウト位置合せ制約(バイト)。
- 例外:
UnsupportedOperationException
-bitAlignment()
が8の倍数でない場合。
-
withBitAlignment
MemoryLayout withBitAlignment(long bitAlignment) 目的の位置合せ制約を機能する新しいレイアウトを作成します。- パラメータ:
bitAlignment
- レイアウト位置合せ制約。ビットで表されます。- 戻り値:
- このレイアウトと同じ新しいレイアウトですが、関連付けられている位置合わせの制約を除きます。
- 例外:
IllegalArgumentException
-bitAlignment
が2の累乗でない場合、または8未満の場合。
-
bitOffset
default long bitOffset(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位で計算します。この場合、パスはこのレイアウトのルートとみなされます。- パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
elements
のレイアウト・パスで選択されるレイアウトのオフセット(ビット単位)。- 例外:
IllegalArgumentException
- レイアウト・パスで、このレイアウト内にネストされたレイアウトが選択されない場合、または複数の順序要素インデックスを(MemoryLayout.PathElement.sequenceElement()
およびMemoryLayout.PathElement.sequenceElement(long, long)
を参照してください)で選択する1つ以上のパス要素がレイアウト・パスに含まれている場合。UnsupportedOperationException
- レイアウト・パスによってトラバースされるレイアウトの1つが未指定のサイズである場合。NullPointerException
-elements == null
、またはelements
の要素のいずれかがnull
の場合。
-
bitOffsetHandle
default MethodHandle bitOffsetHandle(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスで選択されたレイアウトのオフセットをビット単位でコンピュートするために使用できるメソッド・ハンドルを作成します。この場合、パスはこのレイアウト内でルートとみなされます。戻されるメソッド・ハンドルには、戻り型が
long
で、指定されたレイアウト・パス(MemoryLayout.PathElement.sequenceElement()
を参照してください)に空きディメンションがあるのと同じ数のlong
パラメータ・タイプがあり、パラメータの順序はパス要素の順序に対応します。 戻されたメソッド・ハンドルは、bitOffset(PathElement...)
と同様のレイアウト・オフセットのコンピュートに使用できますが、一部の順序索引はメソッド・ハンドルの起動時にのみ指定されます。メソッド・ハンドルによって返される最後のオフセットは、次のように計算されます:
whereoffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
x_1
、x_2
、 ...x_n
はlong
引数として指定される「動的」値、c_1
、c_2
、...です。c_m
は、staticオフセット定数、s_0
、s_1
、...です。s_n
は、レイアウト・パスから導出されるstaticスタイルの定数です。- パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
- 欠落しているシーケンス要素インデックスで指定された場合に、指定されたレイアウト・パス要素で指定されたレイアウト要素のビット・オフセットをコンピュートするために使用できるメソッド・ハンドル。
- 例外:
IllegalArgumentException
- レイアウト・パスに、複数のシーケンス要素索引(MemoryLayout.PathElement.sequenceElement(long, long)
を参照してください)を選択する1つ以上のパス要素が含まれている場合。UnsupportedOperationException
- レイアウト・パスによってトラバースされるレイアウトの1つが未指定のサイズである場合。
-
byteOffset
default long byteOffset(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)を計算します。この場合、パスはこのレイアウトのルートとみなされます。- パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
elements
のレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)。- 例外:
IllegalArgumentException
- レイアウト・パスで、このレイアウト内にネストされたレイアウトが選択されない場合、または複数の順序要素インデックスを(MemoryLayout.PathElement.sequenceElement()
およびMemoryLayout.PathElement.sequenceElement(long, long)
を参照してください)で選択する1つ以上のパス要素がレイアウト・パスに含まれている場合。UnsupportedOperationException
- レイアウト・パスによってトラバースされるレイアウトのいずれかのサイズが未指定の場合、またはbitOffset(elements)
が8の倍数でない場合。NullPointerException
-elements == null
、またはelements
の要素のいずれかがnull
の場合。
-
byteOffsetHandle
default MethodHandle byteOffsetHandle(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスで選択されたレイアウトのオフセットをバイト単位でコンピュートするために使用できるメソッド・ハンドルを作成します。このパスは、このレイアウト内ではルートとみなされます。戻されるメソッド・ハンドルには、戻り型が
long
で、指定されたレイアウト・パス(MemoryLayout.PathElement.sequenceElement()
を参照してください)に空きディメンションがあるのと同じ数のlong
パラメータ・タイプがあり、パラメータの順序はパス要素の順序に対応します。 戻されたメソッド・ハンドルは、byteOffset(PathElement...)
と同様のレイアウト・オフセットのコンピュートに使用できますが、一部の順序索引はメソッド・ハンドルの起動時にのみ指定されます。メソッド・ハンドルによって返される最後のオフセットは、次のように計算されます:
wherebitOffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n) offset = bitOffset / 8
x_1
、x_2
、 ...x_n
はlong
引数として指定される「動的」値、c_1
、c_2
、...です。c_m
は、staticオフセット定数、s_0
、s_1
、...です。s_n
は、レイアウト・パスから導出されるstaticスタイルの定数です。計算されたビット単位のオフセットが8の倍数でない場合、メソッド・ハンドルは
UnsupportedOperationException
をスローします。- パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
- 欠落しているシーケンス要素インデックスで指定された場合に、指定されたレイアウト・パス要素で指定されたレイアウト要素のバイト・オフセットをコンピュートするために使用できるメソッド・ハンドル。
- 例外:
IllegalArgumentException
- レイアウト・パスに、複数のシーケンス要素索引(MemoryLayout.PathElement.sequenceElement(long, long)
を参照してください)を選択する1つ以上のパス要素が含まれている場合。UnsupportedOperationException
- レイアウト・パスによってトラバースされるレイアウトの1つが未指定のサイズである場合。
-
varHandle
default VarHandle varHandle(MemoryLayout.PathElement... elements) 特定のレイアウト・パスで選択されたレイアウトでメモリーを参照解除するために使用できるメモリー・アクセス変数ハンドルを作成します。この場合、パスはこのレイアウトのルートとみなされます。戻されたメモリー・アクセスvarハンドルによってアクセスされる最終的なメモリー・ロケーションは、次のように計算できます:
ここで、address = base + offset
base
はMemorySegment
アクセス座標(MemorySegment.address()
およびMemoryAddress.toRawLongValue()
を参照してください)およびoffset
で表されるベース・アドレスを示し、次の形式で表すことができます:
whereoffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
x_1
、x_2
、 ...x_n
はlong
引数として指定される「動的」値、c_1
、c_2
、...です。c_m
は、staticオフセット定数、s_0
、s_1
、...です。s_n
は、レイアウト・パスから導出されるstaticスタイルの定数です。- APIのノート:
- 結果のvarハンドルには、このレイアウト・パスに含まれる未指定の各シーケンス・アクセス・コンポーネントについて、追加の
long
アクセス座標があります。 さらに、結果の変数ハンドルは、すべてのメモリー・アクセス変数ハンドルに共通している特定の「アクセス・モード制限」の機能も備えています。 - パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
elements
のレイアウト・パスで選択された(ネストする可能性がある)レイアウトでメモリーを参照解除するために使用できるvarハンドルです。- 例外:
UnsupportedOperationException
- レイアウト・パスに、互換性のない位置合せ制約を持つ1つ以上の要素がある場合、またはレイアウト・パスによってトラバースされるレイアウトの1つが未指定のサイズを持っている場合。IllegalArgumentException
-elements
のレイアウト・パスで値レイアウト(ValueLayout
を参照してください)が選択されない場合。
-
sliceHandle
default MethodHandle sliceHandle(MemoryLayout.PathElement... elements) メモリー・セグメントが指定されたメソッド・ハンドルを作成し、特定のレイアウト・パスによって選択されたレイアウトに対応するsliceを返します。このレイアウトでは、パスはルートとみなされます。戻されるメソッド・ハンドルには、
MemorySegment
の戻り型があり、スライスされるセグメントを表す先行パラメータとしてMemorySegment
パラメータと、指定されたレイアウト・パス(MemoryLayout.PathElement.sequenceElement()
を参照してください)に空きディメンションがあるときと同じ数の後続のlong
パラメータ・タイプがあり、パラメータの順序はパス要素の順序に対応します。 返されるメソッド・ハンドルを使用して、MemorySegment.asSlice(long, long)
と同様のスライスを作成できますが、offset引数は、メソッド・ハンドルの起動時に指定されたインデックスに基づいて動的にコンピュートされます。返されたセグメントのオフセットは次のように計算されます:
wherebitOffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n) offset = bitOffset / 8
x_1
、x_2
、 ...x_n
はlong
引数として指定される「動的」値、c_1
、c_2
、...です。c_m
は、staticオフセット定数、s_0
、s_1
、...です。s_n
は、レイアウト・パスから導出されるstaticスタイルの定数です。オフセットの計算後、返されたセグメントは、次のようにコールして作成されます:
segment.asSlice(offset, layout.byteSize());
segment
はスライスされるセグメントで、layout
は、select(PathElement...)
のように、特定のレイアウト・パスによって選択されたレイアウトです。計算されたビット単位のオフセットが8の倍数でない場合、メソッド・ハンドルは
UnsupportedOperationException
をスローします。- パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
- セグメントを指定して、選択したレイアウト要素のスライスを作成するために使用できるメソッド・ハンドル。
- 例外:
UnsupportedOperationException
- 選択したレイアウトのサイズが8の倍数でない場合。
-
select
default MemoryLayout select(MemoryLayout.PathElement... elements) このレイアウトのルートとなっているパスからレイアウトを選択します。- パラメータ:
elements
- レイアウト・パスの要素。- 戻り値:
elements
でレイアウト・パスによって選択されるレイアウト。- 例外:
IllegalArgumentException
- レイアウト・パスがこのレイアウトでネストされたレイアウトを選択しない場合、またはレイアウト・パスに、1つ以上の順序要素インデックスを(MemoryLayout.PathElement.sequenceElement(long)
およびMemoryLayout.PathElement.sequenceElement(long, long)
を参照してください)で選択する1つ以上のパス要素が含まれている場合。
-
map
default MemoryLayout map(UnaryOperator<MemoryLayout> op, MemoryLayout.PathElement... elements) このレイアウトのルートにあるパスから選択したレイアウトが、指定された操作の適用結果で置き換えられるこのレイアウトの変換済コピーが作成されます。- パラメータ:
op
- 選択したレイアウトに適用される単項操作。elements
- レイアウト・パスの要素。- 戻り値:
elements
のレイアウト・パスで選択されたレイアウトが、選択されたレイアウトにop
を適用した結果で置き換えられた新しいレイアウト。- 例外:
IllegalArgumentException
- レイアウト・パスがこのレイアウトでネストされたレイアウトを選択しない場合、またはレイアウト・パスに、1つ以上の順序要素インデックスを(MemoryLayout.PathElement.sequenceElement(long)
およびMemoryLayout.PathElement.sequenceElement(long, long)
を参照してください)で選択する1つ以上のパス要素が含まれている場合。
-
isPadding
boolean isPadding()このレイアウトがパディング・レイアウトの場合、trueを返します。- 戻り値:
- このレイアウトがパディング・レイアウトの場合、true
-
equals
boolean equals(Object that) 指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。 指定されたオブジェクトもレイアウトであり、このレイアウトと等しい場合にのみ、true
を返します。 2つのレイアウトが同じ種類であり、同じサイズ、名前および位置合せ制約を持つ場合は、それらが等価であるとみなされます。 また、レイアウトの種類に応じて、追加の条件を満たす必要があります:- 同じバイト順序の(
ValueLayout.order()
を参照してください)がある場合、2つの値レイアウトが等しいとみなされます。 - 2つのシーケンス・レイアウトが同じ要素カウント(
SequenceLayout.elementCount()
を参照してください)を持つ場合、およびその要素レイアウト(SequenceLayout.elementLayout()
を参照してください)も同じである場合は、2つのシーケンス・レイアウトが等しいとみなされます - 2つのグループ・レイアウトが同じ種類の(
GroupLayout.isStruct()
、GroupLayout.isUnion()
を参照してください。)である場合、およびそのメンバー・レイアウト(GroupLayout.memberLayouts()
を参照してください)も同じである場合は、等価であるとみなされます。
- 同じバイト順序の(
-
hashCode
int hashCode()このレイアウトのハッシュ・コード値を返します。 -
toString
String toString()このレイアウトの文字列表現を返します。 -
paddingLayout
static MemoryLayout paddingLayout(long size) 指定したサイズで新しいパディング・レイアウトを作成します。- パラメータ:
size
- パディングのサイズ(ビット)。- 戻り値:
- 新しいセレクタ・レイアウト。
- 例外:
IllegalArgumentException
-size <= 0
の場合
-
valueLayout
static ValueLayout valueLayout(Class<?> carrier, ByteOrder order) 指定されたJavaキャリアおよびバイト順序の値レイアウトを作成します。 結果値レイアウトのタイプは、指定されたキャリアによって決まります:ValueLayout.OfBoolean
(boolean.class
の場合)ValueLayout.OfByte
(byte.class
の場合)ValueLayout.OfShort
(short.class
の場合)ValueLayout.OfChar
(char.class
の場合)ValueLayout.OfInt
(int.class
の場合)ValueLayout.OfFloat
(float.class
の場合)ValueLayout.OfLong
(long.class
の場合)ValueLayout.OfDouble
(double.class
の場合)ValueLayout.OfAddress
(MemoryAddress.class
の場合)
- パラメータ:
carrier
- 値レイアウト・キャリア。order
- 値レイアウトのバイト順。- 戻り値:
- 新しい値のレイアウト。
- 例外:
IllegalArgumentException
- キャリア・タイプがサポートされていない場合。
-
sequenceLayout
static SequenceLayout sequenceLayout(long elementCount, MemoryLayout elementLayout) 指定された要素レイアウトおよび要素数を使用して、新規順序レイアウトを作成します。- パラメータ:
elementCount
- 順序要素の数。elementLayout
- 順序要素レイアウト。- 戻り値:
- 指定された要素のレイアウトとサイズを使用した新しい順序レイアウト。
- 例外:
IllegalArgumentException
-elementCount < 0
の場合。
-
sequenceLayout
static SequenceLayout sequenceLayout(MemoryLayout elementLayout) バインドなし要素カウントと指定された要素レイアウトを使用して、新しい順序レイアウトを作成します。- パラメータ:
elementLayout
- 順序レイアウトの要素レイアウト。- 戻り値:
- 指定された要素レイアウトを使用した新しい順序レイアウト。
-
structLayout
static GroupLayout structLayout(MemoryLayout... elements) 指定したメンバー・レイアウトで新しい「構造体」グループ・レイアウトを作成します。- パラメータ:
elements
- 「構造体」グループ・レイアウトのメンバー・レイアウト。- 戻り値:
- 指定したメンバー・レイアウトを含む新しい「構造体」グループ・レイアウト。
-
unionLayout
static GroupLayout unionLayout(MemoryLayout... elements) 指定したメンバー・レイアウトで新しいunionグループ・レイアウトを作成します。- パラメータ:
elements
- unionレイアウトのメンバー・レイアウト。- 戻り値:
- 指定したメンバー・レイアウトを含む新しいunionグループ・レイアウト。
-