- すべてのスーパー・インタフェース:
Constable
- 既知のすべての実装クラス:
GroupLayout,SequenceLayout,ValueLayout
public interface MemoryLayout extends Constable
ValueLayoutを参照してください)および「パディング・レイアウト」の値を表すために使用されます。名前の推奨は、内容を無視する必要があるメモリー・セグメントの一部を表し、主に位置合せ(ofPaddingBits(long)を参照してください)のために存在します。 一般的な値レイアウトの定数の一部は、MemoryLayoutsクラスで定義されます。
より複雑なレイアウトをより単純なものから導出できます: 「順序レイアウト」は1つ以上の要素レイアウト(SequenceLayoutを参照してください)の繰返しを示し、「グループ・レイアウト」は、(typically)異種メンバーのレイアウト(GroupLayoutを参照してください)の集計を示します。
たとえば、Cでの次の構造体宣言について考えてみます:
前述の宣言は、次のようにレイアウト・オブジェクトを使用してモデル化できます:typedef struct { char kind; int value; } TaggedValues[5];
SequenceLayout taggedValues = MemoryLayout.ofSequence(5, MemoryLayout.ofStruct( MemoryLayout.ofValueBits(8, ByteOrder.NATIVE_ORDER).withName("kind"), MemoryLayout.ofPaddingBits(24), MemoryLayout.ofValueBits(32, ByteOrder.NATIVE_ORDER).withName("value") ) ).withName("TaggedValues");
このインタフェースのすべての実装はvalue-basedである必要があります。MemoryLayoutのインスタンスでアイデンティティに依存する操作(参照の等価性の(==)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予期しない結果が生じる可能性があるため、使用しないでください。 比較する場合は、equalsメソッドを使用することをお薦めします。
非プラットフォーム・クラスは、MemoryLayoutを直接実装することはできません。
サイズ、位置合せおよびバイト順序
すべてのレイアウトにはサイズが設定され、値とパディングのレイアウト・サイズは常に明示的に指定されています。これは、使用されているプラットフォームに関係なく、レイアウト摘要が常に同じサイズであることを意味します。 派生レイアウトの場合、サイズは次のように計算されます:- 要素レイアウトが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インスタンスのシーケンスとして表現されます。
レイアウト・パスは、別のレイアウト(bitOffset(PathElement...)を参照してください)内で任意にネストされたレイアウトのオフセットを取得し、選択されたレイアウト(varHandle(Class, PathElement...)を参照してください)に対応するメモリー・アクセス・ハンドルを迅速に取得して、別のレイアウト内で任意にネストされたレイアウトを選択する場合(select(PathElement...)を参照)、または別のレイアウト(map(UnaryOperator, PathElement...)を参照してください)内でネストされたレイアウト要素を変換する場合に役立ちます。
このような「レイアウト・パス」は、このクラスのメソッドを使用してプログラムで作成できます。 たとえば、前述のように構築された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.ofPadding(32), PathElement.sequenceElement(), PathElement.groupElement("value"));
レイアウト・パスには、1つ以上の「フリー・ディメンション」を含めることができます。 たとえば、未指定のシーケンス要素(つまり、パス・コンポーネントの1つがMemoryLayout taggedValuesWithHole = MemoryLayout.ofSequence(5, MemoryLayout.ofStruct( MemoryLayout.ofValueBits(8, ByteOrder.NATIVE_ORDER).withName("kind"). MemoryLayout.ofPaddingBits(32), MemoryLayout.ofPaddingBits(32) ));
MemoryLayout.PathElement.sequenceElement()メソッドを使用して取得された場合です。)をたどるレイアウト・パスは、実行時にバインドする必要がある追加の空きディメンションを持ちます。 これは、次のコードに示すように、レイアウトからメモリー・アクセス変数ハンドルを取得するときに重要です:
前述の例で構築されたレイアウト・パスは、フリー・ディメンション(VarHandle valueHandle = taggedValues.varHandle(int.class, PathElement.sequenceElement(), PathElement.groupElement("value"));
valueという名前のwhichメンバー・レイアウトを囲みシーケンスのレイアウトから選択する必要があることを指定していないため)を特徴としているため、メモリー・アクセス変数ハンドルvalueHandleは「追加」 longアクセス座標を特徴としています。
レイアウト属性
レイアウトは、オプションで1つ以上のattributesに関連付けることができます。 レイアウト属性は、名前がStringで値がConstableであるname/valueペアを形成します。 最も一般的なレイアウト属性の形式は、「レイアウト名」 (LAYOUT_NAMEを参照してください)です。これは、メモリー・レイアウトに関連付けることができ、「レイアウト・パス」の構築時に参照できるカスタム名です。 - APIのノート:
- 将来、Java言語で許可される場合、
MemoryLayoutがsealedインタフェースになる可能性があり、明示的に許可されているタイプ以外はサブクラス化できなくなります。 - 実装要件:
- このインタフェースの実装は不変、スレッド・セーフ、およびvalue-basedです。
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 インタフェース 説明 static interfaceMemoryLayout.PathElementこのクラスのインスタンスは、「レイアウト・パス」の形成に使用されます。 -
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static StringLAYOUT_NAMEメモリー・レイアウト(name()およびwithName(String)を参照)のnameプロパティの指定に使用される属性名。 -
メソッドのサマリー
修飾子と型 メソッド 説明 Optional<Constable>attribute(String name)指定された名前の(それが存在する場合)の属性を返します。Stream<String>attributes()このレイアウトに関連付けられた属性名のストリームを返します。longbitAlignment()このレイアウトに関連付けられている配置制約をビット単位で返します。default longbitOffset(MemoryLayout.PathElement... elements)指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位で計算します。この場合、パスはこのレイアウトのルートとみなされます。longbitSize()レイアウト・サイズをビット単位で計算します。default longbyteAlignment()このレイアウトに関連付けられているバイト単位の配置制約を返します。default longbyteOffset(MemoryLayout.PathElement... elements)指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)を計算します。この場合、パスはこのレイアウトのルートとみなされます。default longbyteSize()レイアウト・サイズをバイト単位で計算します。Optional<? extends DynamicConstantDesc<? extends MemoryLayout>>describeConstable()booleanequals(Object that)指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。inthashCode()このレイアウトのハッシュ・コード値を返します。booleanhasSize()このレイアウトには指定されたサイズがありますか?booleanisPadding()これはパディング・レイアウト(例:ofPaddingBits(long)から作成されたレイアウト)ですか。default MemoryLayoutmap(UnaryOperator<MemoryLayout> op, MemoryLayout.PathElement... elements)このレイアウトのルートにあるパスから選択したレイアウトが、指定された操作の適用結果で置き換えられるこのレイアウトの変換済コピーが作成されます。Optional<String>name()このレイアウトに関連するname (もしあれば)を返します。static MemoryLayoutofPaddingBits(long size)指定したサイズで新しいパディング・レイアウトを作成します。static SequenceLayoutofSequence(long elementCount, MemoryLayout elementLayout)指定された要素レイアウトおよび要素数を使用して、新規順序レイアウトを作成します。static SequenceLayoutofSequence(MemoryLayout elementLayout)バインドなし要素カウントと指定された要素レイアウトを使用して、新しい順序レイアウトを作成します。static GroupLayoutofStruct(MemoryLayout... elements)指定したメンバー・レイアウトで新しい「構造体」グループ・レイアウトを作成します。static GroupLayoutofUnion(MemoryLayout... elements)指定したメンバー・レイアウトで新しいunionグループ・レイアウトを作成します。static ValueLayoutofValueBits(long size, ByteOrder order)指定されたバイト順とサイズの値レイアウトを作成します。default MemoryLayoutselect(MemoryLayout.PathElement... elements)このレイアウトのルートとなっているパスからレイアウトを選択します。StringtoString()このレイアウトの文字列表現を返します。default VarHandlevarHandle(Class<?> carrier, MemoryLayout.PathElement... elements)特定のレイアウト・パスで選択されたレイアウトでメモリーを参照解除するために使用できるメモリー・アクセス変数ハンドルを作成します。この場合、パスはこのレイアウトのルートとみなされます。MemoryLayoutwithAttribute(String name, Constable value)このレイアウトと同じ属性と新しく指定された属性を持つ新しいメモリー・レイアウトを返します。MemoryLayoutwithBitAlignment(long bitAlignment)目的の位置合せ制約を機能する新しいレイアウトを作成します。MemoryLayoutwithName(String name)必要なレイアウトnameが機能する新しいレイアウトを作成します。
-
フィールド詳細
-
LAYOUT_NAME
static final String LAYOUT_NAMEメモリー・レイアウト(name()およびwithName(String)を参照)のnameプロパティの指定に使用される属性名。- 関連項目:
- 定数フィールド値
-
-
メソッドの詳細
-
describeConstable
Optional<? extends DynamicConstantDesc<? extends MemoryLayout>> describeConstable()- 定義:
- インタフェース
Constable内のdescribeConstable - 戻り値:
- 最終的な名目記述子を含む
Optional、または作成できない場合は空のOptional。
-
hasSize
boolean hasSize()このレイアウトには指定されたサイズがありますか? レイアウトが(次を含む)でサイズが未指定の(SequenceLayout.elementCount()を参照してください)の順序レイアウトである場合、そのレイアウトには指定されたサイズがありません。 値レイアウト(ValueLayoutを参照してください)およびパディングのレイアウト(ofPaddingBits(long)を参照してください) alwaysには指定されたサイズがあるため、このメソッドは常にtrueを返します。- 戻り値:
- このレイアウトが指定されたサイズの場合、
true。
-
bitSize
long bitSize()レイアウト・サイズをビット単位で計算します。- 戻り値:
- レイアウトのサイズ(ビット単位)。
- 例外:
UnsupportedOperationException- レイアウトが、またはレイアウトに含まれている場合、(SequenceLayoutを参照してください)は未指定のサイズの順序レイアウトです。
-
byteSize
default long byteSize()レイアウト・サイズをバイト単位で計算します。- 戻り値:
- レイアウト・サイズ(バイト)。
- 例外:
UnsupportedOperationException- レイアウトが次のものであるか、またはレイアウトが含まれている場合、(SequenceLayoutを参照してください)のサイズが指定されていないシーケンス・レイアウトであるか、bitSize()が8の倍数でないとき。
-
name
このレイアウトに関連するname (もしあれば)を返します。これは次のコードと等価です。
attribute(LAYOUT_NAME).map(String.class::cast);- 戻り値:
- レイアウトname (もしあれば)。
- 関連項目:
withName(String)
-
withName
MemoryLayout withName(String name)必要なレイアウトnameが機能する新しいレイアウトを作成します。これは次のコードと等価です。
withAttribute(LAYOUT_NAME, name);- パラメータ:
name- レイアウト名。- 戻り値:
- 関連付けられたnameを除き、このレイアウトと同じ新しいレイアウト。
- 関連項目:
name()
-
bitAlignment
long bitAlignment()このレイアウトに関連付けられている配置制約をビット単位で返します。 レイアウトの位置合せにより、レイアウトのビット単位の位置合せである2つのAの機能が定義されます。A <= 8の場合、A/8は、このレイアウトを適切にポイントするポインタに対して整列する必要があるバイト数です。 このため、:A=8では、すべての(通常の意味で)がパケットで共有されないことを意味します。A=64は、aligned (on LP64)、A=32int aligned、A=16short 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=4int aligned、A=2short alignedなどの単語を意味します。A=64は、x86/SV ABI (AVX-512データ)で必要とされる最も厳密な位置合せです。
withBitAlignment(long)を参照してください)に明示的な位置合せ制約が設定されていない場合、このメソッドはこのレイアウトに関連付けられた「自然整列」制約(バイト単位)を返します。- 戻り値:
- レイアウト位置合せ制約(バイト)。
- 例外:
UnsupportedOperationException-bitAlignment()が8の倍数でない場合。
-
withBitAlignment
MemoryLayout withBitAlignment(long bitAlignment)目的の位置合せ制約を機能する新しいレイアウトを作成します。- パラメータ:
bitAlignment- レイアウト位置合せ制約。ビットで表されます。- 戻り値:
- このレイアウトと同じ新しいレイアウト。ただし、関連付けられている位置合せ制約を除きます。
- 例外:
IllegalArgumentException-bitAlignmentが2の累乗でない場合、または8未満の場合。
-
属性
指定された名前の(それが存在する場合)の属性を返します。- パラメータ:
name- 属性名- 戻り値:
- 指定された名前の(それが存在する場合)の属性。
-
withAttribute
MemoryLayout withAttribute(String name, Constable value)このレイアウトと同じ属性と新しく指定された属性を持つ新しいメモリー・レイアウトを返します。 このレイアウトに同じ名前の属性がすでに含まれている場合は、返されるレイアウトで既存の属性値が上書きされます。- パラメータ:
name- 属性名value- 属性値- 戻り値:
- このレイアウトと同じ属性と新しく指定された属性を備えた新しいメモリー・レイアウト。
-
attributes
このレイアウトに関連付けられた属性名のストリームを返します。- 戻り値:
- このレイアウトに関連付けられた属性名のストリーム。
-
bitOffset
default long bitOffset(MemoryLayout.PathElement... elements)指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位で計算します。この場合、パスはこのレイアウトのルートとみなされます。- APIのノート:
- レイアウト・パスに(以上)空きディメンションが1つある場合、そのようなディメンションに対応するすべてのインデックスが
0に設定されているかのようにオフセットが計算されます。 - パラメータ:
elements- レイアウト・パスの要素。- 戻り値:
elementsのレイアウト・パスで選択されるレイアウトのオフセット(ビット単位)。- 例外:
IllegalArgumentException- レイアウト・パスで、このレイアウト内にネストされたレイアウトが選択されない場合、または複数の順序要素インデックスを(MemoryLayout.PathElement.sequenceElement()およびMemoryLayout.PathElement.sequenceElement(long, long)を参照してください)で選択する1つ以上のパス要素がレイアウト・パスに含まれている場合。UnsupportedOperationException- レイアウト・パスによってトラバースされるレイアウトの1つが未指定のサイズである場合。
-
byteOffset
default long byteOffset(MemoryLayout.PathElement... elements)指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)を計算します。この場合、パスはこのレイアウトのルートとみなされます。- APIのノート:
- レイアウト・パスに(以上)空きディメンションが1つある場合、そのようなディメンションに対応するすべてのインデックスが
0に設定されているかのようにオフセットが計算されます。 - パラメータ:
elements- レイアウト・パスの要素。- 戻り値:
elementsのレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)。- 例外:
IllegalArgumentException- レイアウト・パスで、このレイアウト内にネストされたレイアウトが選択されない場合、または複数の順序要素インデックスを(MemoryLayout.PathElement.sequenceElement()およびMemoryLayout.PathElement.sequenceElement(long, long)を参照してください)で選択する1つ以上のパス要素がレイアウト・パスに含まれている場合。UnsupportedOperationException- レイアウト・パスによってトラバースされるレイアウトのいずれかのサイズが未指定の場合、またはbitOffset(elements)が8の倍数でない場合。
-
varHandle
default VarHandle varHandle(Class<?> carrier, MemoryLayout.PathElement... elements)特定のレイアウト・パスで選択されたレイアウトでメモリーを参照解除するために使用できるメモリー・アクセス変数ハンドルを作成します。この場合、パスはこのレイアウトのルートとみなされます。- APIのノート:
- 結果のvarハンドルには、このレイアウト・パスに含まれる未指定の各シーケンス・アクセス・コンポーネントについて、追加の
longアクセス座標があります。 さらに、結果の変数ハンドルは、すべてのメモリー・アクセス変数ハンドルに共通している特定の「アクセス・モード制限」の機能も備えています。 - パラメータ:
carrier- varハンドルというキャリアのタイプ。elements- レイアウト・パスの要素。- 戻り値:
elementsのレイアウト・パスで選択された(ネストする可能性がある)レイアウトでメモリーを参照解除するために使用できるvarハンドルです。- 例外:
UnsupportedOperationException- レイアウト・パスに、互換性のない位置合せ制約を持つ1つ以上の要素がある場合、またはレイアウト・パスによってトラバースされるレイアウトの1つが未指定のサイズを持っている場合。IllegalArgumentException- キャリアがプリミティブ・タイプを表していない場合、キャリアがvoid、booleanの場合、またはelementsのレイアウト・パスで値レイアウト(ValueLayoutを参照してください)が選択されていない場合、または選択された値レイアウトのサイズが、指定されたキャリア・タイプのものと一致しない場合、。
-
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()これはパディング・レイアウト(例:ofPaddingBits(long)から作成されたレイアウト)ですか。- 戻り値:
- このレイアウトがパディング・レイアウトの場合はtrue。
-
equals
boolean equals(Object that)指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。 指定されたオブジェクトもレイアウトであり、このレイアウトと等しい場合にのみ、trueを返します。 2つのレイアウトが同じ種類であり、同じサイズ、名前および位置合せ制約を持つ場合は、それらが等価であるとみなされます。 また、レイアウトの種類に応じて、追加の条件を満たす必要があります:- 同じバイト順序の(
ValueLayout.order()を参照してください)がある場合、2つの値レイアウトが等しいとみなされます。 - 2つのシーケンス・レイアウトが同じ要素カウント(
SequenceLayout.elementCount()を参照してください)を持つ場合、およびその要素レイアウト(SequenceLayout.elementLayout()を参照してください)も同じである場合は、2つのシーケンス・レイアウトが等しいとみなされます - 2つのグループ・レイアウトが同じ種類の(
GroupLayout.isStruct()、GroupLayout.isUnion()を参照してください。)である場合、およびそのメンバー・レイアウト(GroupLayout.memberLayouts()を参照してください)も同じである場合は、等価であるとみなされます。
- オーバーライド:
equals、クラス:Object- パラメータ:
that- このレイアウトと等価性を持たせるために比較するオブジェクト。- 戻り値:
- 指定されたオブジェクトがこのレイアウトに等しい場合、
true。 - 関連項目:
Object.hashCode()、HashMap
- 同じバイト順序の(
-
hashCode
int hashCode()このレイアウトのハッシュ・コード値を返します。- オーバーライド:
hashCode、クラス:Object- 戻り値:
- このレイアウトのハッシュ・コード値。
- 関連項目:
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
toString
String toString()このレイアウトの文字列表現を返します。 -
ofPaddingBits
static MemoryLayout ofPaddingBits(long size)指定したサイズで新しいパディング・レイアウトを作成します。- パラメータ:
size- パディングのサイズ(ビット)。- 戻り値:
- 新しいセレクタ・レイアウト。
- 例外:
IllegalArgumentException-size <= 0の場合
-
ofValueBits
static ValueLayout ofValueBits(long size, ByteOrder order)指定されたバイト順とサイズの値レイアウトを作成します。- パラメータ:
size- 値レイアウトのサイズ。order- 値レイアウトのバイト順。- 戻り値:
- 新しい値のレイアウト。
- 例外:
IllegalArgumentException-size <= 0の場合
-
ofSequence
static SequenceLayout ofSequence(long elementCount, MemoryLayout elementLayout)指定された要素レイアウトおよび要素数を使用して、新規順序レイアウトを作成します。- パラメータ:
elementCount- 順序要素の数。elementLayout- 順序要素レイアウト。- 戻り値:
- 指定された要素のレイアウトとサイズを使用した新しい順序レイアウト。
- 例外:
IllegalArgumentException-elementCount < 0の場合。
-
ofSequence
static SequenceLayout ofSequence(MemoryLayout elementLayout)バインドなし要素カウントと指定された要素レイアウトを使用して、新しい順序レイアウトを作成します。- パラメータ:
elementLayout- 順序レイアウトの要素レイアウト。- 戻り値:
- 指定された要素レイアウトを使用した新しい順序レイアウト。
-
ofStruct
static GroupLayout ofStruct(MemoryLayout... elements)指定したメンバー・レイアウトで新しい「構造体」グループ・レイアウトを作成します。- パラメータ:
elements- 「構造体」グループ・レイアウトのメンバー・レイアウト。- 戻り値:
- 指定したメンバー・レイアウトを含む新しい「構造体」グループ・レイアウト。
-
ofUnion
static GroupLayout ofUnion(MemoryLayout... elements)指定したメンバー・レイアウトで新しいunionグループ・レイアウトを作成します。- パラメータ:
elements- unionレイアウトのメンバー・レイアウト。- 戻り値:
- 指定したメンバー・レイアウトを含む新しいunionグループ・レイアウト。
-