モジュール java.base
パッケージ java.lang.foreign

インタフェースMemoryLayout

既知のすべてのサブインタフェース:
GroupLayoutPREVIEW, PaddingLayoutPREVIEW, SequenceLayoutPREVIEW, StructLayoutPREVIEW, UnionLayoutPREVIEW, ValueLayoutPREVIEW, ValueLayout.OfAddressPREVIEW, ValueLayout.OfBooleanPREVIEW, ValueLayout.OfBytePREVIEW, ValueLayout.OfCharPREVIEW, ValueLayout.OfDoublePREVIEW, ValueLayout.OfFloatPREVIEW, ValueLayout.OfIntPREVIEW, ValueLayout.OfLongPREVIEW, ValueLayout.OfShortPREVIEW

MemoryLayoutは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでMemoryLayoutを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
メモリー・レイアウトは、メモリー・セグメントの内容を記述します。 レイアウト階層には、「値レイアウト」という2つのリーフがあります。これは、名前が示すように、指定されたサイズおよび種類(ValueLayoutPREVIEWを参照してください)および「パディング・レイアウト」の値を表すために使用されます。これは、コンテンツを無視する必要があるメモリー・セグメントの一部を表し、主に整列理由(paddingLayout(long)を参照してください)のために存在します。 共通の値レイアウト定数は、ValueLayoutPREVIEWクラスで定義されます。

より複雑なレイアウトをより単純なものから導出できます: 「順序レイアウト」は、1つ以上の要素レイアウト(SequenceLayoutPREVIEWを参照してください)の繰返しを示します。「グループ・レイアウト」は、(typically)異機種間メンバー・レイアウト(GroupLayoutPREVIEWを参照してください)の集計を示します。

レイアウトは、オプションでnameに関連付けることができます。 レイアウト名は、レイアウト・パスの作成時に参照できます。

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");

サイズ、位置合せおよびバイト順序

すべてのレイアウトにはサイズが設定され、値とパディングのレイアウト・サイズは常に明示的に指定されています。これは、使用されているプラットフォームに関係なく、レイアウト摘要が常に同じサイズであることを意味します。 派生レイアウトの場合、サイズは次のように計算されます:
  • 要素レイアウトがEでサイズがLである順序レイアウトSの場合、SのサイズはEのサイズで、Lを掛けます
  • メンバー・レイアウトM1を含むグループ・レイアウトGの場合、サイズがS1S2、... Sn、それぞれM2、... MnGのサイズは、グループが「構造体」であるかunionであるかに応じて、それぞれS1 + S2 + ... + Snまたはmax(S1, S2, ... Sn)のどちらかになります

さらに、すべてのレイアウトは、次のように推測できる「自然整列」の機能です:

  • パディング・レイアウトLの場合、自然位置合せはサイズに関係なく1です。つまり、明示的位置合せ制約がない場合、パディング・レイアウトはネスト先のグループ・レイアウトの位置合せ制約に影響しません。
  • サイズがNの値レイアウトLの場合、Lの自然位置合せはNです。
  • 要素レイアウトがEである順序レイアウトSの場合、Sでは自然の位置合せがEです。
  • メンバー・レイアウトがM1M2、... Mnのグループ・レイアウトGの場合、位置がA1A2、... 「1つの」となります。Gの自然な位置合せはmax(A1, A2 ... An)です。
必要な(withBitAlignment(long)を参照してください)が必要な場合は、レイアウトの自然位置合せを上書きできます。これは、ハイパーリンク化されたレイアウトを記述するのに役立ちます。

すべての値レイアウトには、レイアウトの作成時に設定されるexplicitバイト順(ByteOrderを参照してください)があります。

レイアウト・パス

「レイアウト・パス」rootレイアウト(通常、グループまたは順序レイアウトです)から派生し、ルート・レイアウト内にネストされたレイアウトで終了 - これはレイアウト・パスによってレイアウトselectedされたものです。 レイアウト・パスは通常、1つ以上のMemoryLayout.PathElementPREVIEWインスタンスのシーケンスとして表されます。

たとえば、レイアウト・パスは、別のレイアウト内で任意のネストされたレイアウトのoffsetsを取得したり、選択したレイアウトに対応する「メモリー・アクセス・ハンドル」を迅速に取得したり、別のレイアウト内で任意のネストされたレイアウトを「選択」するために役立ちます。

このような「レイアウト・パス」は、このクラスのメソッドを使用してプログラムで作成できます。 たとえば、前述のように構築された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"));
レイアウト・パスには、1つ以上の「フリー・ディメンション」を含めることができます。 たとえば、指定されていない順序要素(つまり、パス・コンポーネントの1つがMemoryLayout.PathElement.sequenceElement()PREVIEWメソッドで取得されました)を横断するレイアウト・パスには、実行時にバインドする必要がある追加の空きディメンションがあります。 これは、次のコードのように、レイアウトから「メモリー・セグメント・ビューの可変ハンドル」PREVIEWを取得する場合に重要です:
VarHandle valueHandle = taggedValues.varHandle(PathElement.sequenceElement(),
                                               PathElement.groupElement("value"));
前述の例で構築されたレイアウト・パスは、1つの空きディメンション(valueという名前のwhichメンバー・レイアウトを囲みシーケンスのレイアウトから選択する必要があることを指定していないため)のみを備えているため、varハンドル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

実装要件:
このインタフェースの実装は不変、スレッド・セーフ、およびvalue-basedです。
シール済クラス階層グラフ:
MemoryLayoutのシール済クラス階層グラフMemoryLayoutのシール済クラス階層グラフ
導入されたバージョン:
19
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    インタフェース
    説明
    static interface 
    Preview.
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    long
    このレイアウトに関連付けられている配置制約をビット単位で返します。
    default long
    指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位で計算します。パスはこのレイアウトでルートとみなされます。
    default MethodHandle
    指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位でコンピュートするために使用できるメソッド・ハンドルを作成します。パスはこのレイアウトでルートとみなされます。
    long
    レイアウト・サイズをビット単位で返します。
    default long
    このレイアウトに関連付けられているバイト単位の配置制約を返します。
    default long
    指定されたレイアウト・パスによって選択されたレイアウトのオフセットをバイト単位で計算します。パスはこのレイアウトでルートとみなされます。
    default MethodHandle
    指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)をコンピュートするために使用できるメソッド・ハンドルを作成します。パスはこのレイアウトでルートとみなされます。
    long
    レイアウト・サイズをバイト単位で返します。
    boolean
    equals(Object other)
    指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。
    int
    このレイアウトのハッシュ・コード値を返します。
    このレイアウトに関連付けられている名前(もしあれば)を返します。
    paddingLayout(long size)
    指定したサイズでパディング・レイアウトを作成します。
    このレイアウトのルートとなっているパスからレイアウトを選択します。
    sequenceLayout(long elementCount, MemoryLayoutPREVIEW elementLayout)
    指定された要素レイアウトおよび要素数を使用して順序レイアウトを作成します。
    longをオーバーフローしないように、指定された要素レイアウトおよび最大要素数の順序レイアウトを作成します。
    default MethodHandle
    メモリー・セグメントを指定して、指定されたレイアウト・パスによって選択されたレイアウトに対応するslicePREVIEWを返すメソッド・ハンドルを作成します。パスはこのレイアウトでルートとみなされます。
    指定されたメンバー・レイアウトを使用して構造体レイアウトを作成します。
    このレイアウトの文字列表現を返します。
    指定されたメンバー・レイアウトを使用してユニオン・レイアウトを作成します。
    valueLayout(Class<?> carrier, ByteOrder order)
    指定されたJavaキャリアおよびバイト順序の値レイアウトを作成します。
    default VarHandle
    指定されたレイアウト・パスによって選択されたレイアウトでメモリー・セグメントにアクセスするために使用できるvarハンドルを作成します。このレイアウトでは、パスはこのレイアウトのルートとみなされます。
    withBitAlignment(long bitAlignment)
    このレイアウトと同じサイズおよび名前を持つ同じタイプのメモリー・レイアウトを返しますが、指定された整列制約(ビット単位)を使用します。
    このレイアウトと同じサイズおよび整列制約を持つ、指定された名前の同じタイプのメモリー・レイアウトを返します。
  • メソッドの詳細

    • bitSize

      long bitSize()
      レイアウト・サイズをビット単位で返します。
      戻り値:
      レイアウト・サイズ(ビット単位)
    • byteSize

      long byteSize()
      レイアウト・サイズをバイト単位で返します。
      戻り値:
      レイアウト・サイズ(バイト)
      例外:
      UnsupportedOperationException - bitSize()が8の倍数でない場合。
    • name

      Optional<String> name()
      このレイアウトに関連付けられている名前(もしあれば)を返します。
      戻り値:
      このレイアウトに関連付けられている名前(もしあれば)
      関連項目:
    • withName

      MemoryLayoutPREVIEW withName(String 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

      MemoryLayoutPREVIEW withBitAlignment(long bitAlignment)
      このレイアウトと同じサイズおよび名前を持つ同じタイプのメモリー・レイアウトを返しますが、指定された整列制約(ビット単位)を使用します。
      パラメータ:
      bitAlignment - レイアウト位置合せ制約。ビットで表されます。
      戻り値:
      指定された境界整列制約を持つメモリー・レイアウト。
      例外:
      IllegalArgumentException - bitAlignmentが2の累乗でない場合、または8未満の場合。
    • bitOffset

      default long bitOffset(MemoryLayout.PathElementPREVIEW... elements)
      指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位で計算します。パスはこのレイアウトでルートとみなされます。
      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      elementsのレイアウト・パスで選択されるレイアウトのオフセット(ビット単位)。
      例外:
      IllegalArgumentException - レイアウト・パスがこのレイアウトにネストされたレイアウトを選択しない場合、またはレイアウト・パスに複数の順序要素索引(MemoryLayout.PathElement.sequenceElement()PREVIEWおよびMemoryLayout.PathElement.sequenceElement(long, long)PREVIEWを参照してください)を選択するパス要素が1つ以上含まれている場合。
      NullPointerException - elements == null、またはelementsの要素のいずれかがnullの場合。
    • bitOffsetHandle

      default MethodHandle bitOffsetHandle(MemoryLayout.PathElementPREVIEW... elements)
      指定されたレイアウト・パスによって選択されたレイアウトのオフセットをビット単位でコンピュートするために使用できるメソッド・ハンドルを作成します。パスはこのレイアウトでルートとみなされます。

      戻されるメソッド・ハンドルの戻り型はlongで、指定されたレイアウト・パス(MemoryLayout.PathElement.sequenceElement()PREVIEWを参照してください)に空きディメンションがあるのと同じ数のlongパラメータ型が特徴で、パラメータの順序はパス要素の順序に対応します。 返されるメソッド・ハンドルを使用して、bitOffset(PathElement...)のようなレイアウト・オフセットをコンピュートできますが、メソッド・ハンドルの呼出し時にのみシーケンス索引が指定されます。

      メソッド・ハンドルによって返される最後のオフセットは、次のように計算されます:

      
       offset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
       
      where x_1x_2、 ... x_nlong引数として指定される「動的」値、c_1c_2、...です。c_mは、staticオフセット定数、s_0s_1、...です。s_nは、レイアウト・パスから導出されるstaticスタイルの定数です。

      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      欠落しているシーケンス要素インデックスで指定された場合に、指定されたレイアウト・パス要素で指定されたレイアウト要素のビット・オフセットをコンピュートするために使用できるメソッド・ハンドル。
      例外:
      IllegalArgumentException - レイアウト・パスに複数の順序要素索引(MemoryLayout.PathElement.sequenceElement(long, long)PREVIEWを参照してください)を選択するパス要素を1つ以上含む場合。
    • byteOffset

      default long byteOffset(MemoryLayout.PathElementPREVIEW... elements)
      指定されたレイアウト・パスによって選択されたレイアウトのオフセットをバイト単位で計算します。パスはこのレイアウトでルートとみなされます。
      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      elementsのレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)。
      例外:
      IllegalArgumentException - レイアウト・パスがこのレイアウトにネストされたレイアウトを選択しない場合、またはレイアウト・パスに複数の順序要素索引(MemoryLayout.PathElement.sequenceElement()PREVIEWおよびMemoryLayout.PathElement.sequenceElement(long, long)PREVIEWを参照してください)を選択するパス要素が1つ以上含まれている場合。
      UnsupportedOperationException - bitOffset(elements)が8の倍数でない場合。
      NullPointerException - elements == null、またはelementsの要素のいずれかがnullの場合。
    • byteOffsetHandle

      default MethodHandle byteOffsetHandle(MemoryLayout.PathElementPREVIEW... elements)
      指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト単位)をコンピュートするために使用できるメソッド・ハンドルを作成します。パスはこのレイアウトでルートとみなされます。

      戻されるメソッド・ハンドルの戻り型はlongで、指定されたレイアウト・パス(MemoryLayout.PathElement.sequenceElement()PREVIEWを参照してください)に空きディメンションがあるのと同じ数のlongパラメータ型が特徴で、パラメータの順序はパス要素の順序に対応します。 返されるメソッド・ハンドルを使用して、byteOffset(PathElement...)のようなレイアウト・オフセットをコンピュートできますが、メソッド・ハンドルの呼出し時にのみシーケンス索引が指定されます。

      メソッド・ハンドルによって返される最後のオフセットは、次のように計算されます:

      
       bitOffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
       offset = bitOffset / 8
       
      where x_1x_2、 ... x_nlong引数として指定される「動的」値、c_1c_2、...です。c_mは、staticオフセット定数、s_0s_1、...です。s_nは、レイアウト・パスから導出されるstaticスタイルの定数です。

      計算されたビット単位のオフセットが8の倍数でない場合、メソッド・ハンドルはUnsupportedOperationExceptionをスローします。

      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      欠落しているシーケンス要素インデックスで指定された場合に、指定されたレイアウト・パス要素で指定されたレイアウト要素のバイト・オフセットをコンピュートするために使用できるメソッド・ハンドル。
      例外:
      IllegalArgumentException - レイアウト・パスに複数の順序要素索引(MemoryLayout.PathElement.sequenceElement(long, long)PREVIEWを参照してください)を選択するパス要素を1つ以上含む場合。
    • varHandle

      default VarHandle varHandle(MemoryLayout.PathElementPREVIEW... elements)
      指定されたレイアウト・パスによって選択されたレイアウトでメモリー・セグメントにアクセスするために使用できるvarハンドルを作成します。このレイアウトでは、パスはこのレイアウトのルートとみなされます。

      返されたvarハンドルからアクセスする最終アドレスは次のように計算できます:

      
       address = base(segment) + offset
       
      ここで、base(segment)は、アクセスされるメモリー・セグメントの物理ベース・アドレスを返す関数を示します。 ネイティブ・セグメントの場合、この関数はネイティブ・セグメントのaddressPREVIEWを返します。 ヒープ・セグメントの場合、ヒープ・セグメントのアドレスが仮想化されるため、この関数はより複雑です。 offset座標は、次の形式で表すことができます:
      
       offset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
       
      ここで、x_1x_2、... x_nlong引数として提供される「動的」値です。一方、c_1c_2、... c_mstaticオフセット定数で、s_1s_2、... s_nは、レイアウト・パスから導出されるstaticの積層定数です。

      また、指定された動的値は、レイアウト・パス(0 <= x_i < b_i)から導出されるバインド(1 <= i <= nまたはIndexOutOfBoundsExceptionがスローされる)に準拠している必要があります。

      APIのノート:
      結果のvarハンドルには、このレイアウト・パスに含まれる未指定の各シーケンス・アクセス・コンポーネントについて、追加のlongアクセス座標があります。 さらに、結果のvarハンドルは、すべてのメモリー・セグメント・ビュー・ハンドルに共通する特定の「アクセス・モード制限」を備えています。
      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      elementsのレイアウト・パスによって選択された(ネストする可能性がある)レイアウトでメモリー・セグメントへのアクセスに使用できるvarハンドル。
      例外:
      UnsupportedOperationException - レイアウト・パスに、互換性のない線形拘束を持つ1つ以上の要素がある場合。
      IllegalArgumentException - elementsのレイアウト・パスで値レイアウト(ValueLayoutPREVIEWを参照してください)が選択されていない場合。
      関連項目:
    • sliceHandle

      default MethodHandle sliceHandle(MemoryLayout.PathElementPREVIEW... elements)
      メモリー・セグメントを指定して、指定されたレイアウト・パスによって選択されたレイアウトに対応するslicePREVIEWを返すメソッド・ハンドルを作成します。パスはこのレイアウトでルートとみなされます。

      返されるメソッド・ハンドルの戻り型はMemorySegmentで、スライスされるセグメントを表す先頭パラメータとしてMemorySegmentパラメータを備え、指定されたレイアウト・パス(MemoryLayout.PathElement.sequenceElement()PREVIEWを参照してください)に空きディメンションがあるのと同じ数の末尾のlongパラメータ・タイプを備えています。パラメータの順序はパス要素の順序に対応します。 戻されたメソッド・ハンドルを使用して、MemorySegment.asSlice(long, long)PREVIEWの使用に似たスライスを作成できますが、オフセット引数は、メソッド・ハンドルの起動時に指定された索引に基づいて動的にコンピュートされます。

      返されたセグメントのオフセットは次のように計算されます:

      
       bitOffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
       offset = bitOffset / 8
       
      ここで、x_1x_2、... x_nlong引数として提供される「動的」値です。一方、c_1c_2、... c_mstaticオフセット定数で、s_1s_2、... s_nは、レイアウト・パスから導出されるstaticの積層定数です。

      オフセットの計算後、返されたセグメントは、次のようにコールして作成されます:

      segment.asSlice(offset, layout.byteSize());
      
      ここで、segmentはスライスされるセグメントで、layoutは、select(PathElement...)のように、特定のレイアウト・パスによって選択されたレイアウトです。

      計算されたビット単位のオフセットが8の倍数でない場合、メソッド・ハンドルはUnsupportedOperationExceptionをスローします。

      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      セグメントを指定して、選択したレイアウト要素のスライスを作成するために使用できるメソッド・ハンドル。
      例外:
      UnsupportedOperationException - 選択したレイアウトのサイズが8の倍数でない場合。
    • select

      このレイアウトのルートとなっているパスからレイアウトを選択します。
      パラメータ:
      elements - レイアウト・パスの要素。
      戻り値:
      elementsでレイアウト・パスによって選択されるレイアウト。
      例外:
      IllegalArgumentException - レイアウト・パスがこのレイアウトにネストされたレイアウトを選択しない場合、またはレイアウト・パスに1つ以上のパス要素が含まれる索引(MemoryLayout.PathElement.sequenceElement(long)PREVIEWおよびMemoryLayout.PathElement.sequenceElement(long, long)PREVIEWを参照してください)を選択します。
    • equals

      boolean equals(Object other)
      指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。 指定されたオブジェクトもレイアウトであり、このレイアウトと等しい場合にのみ、trueを返します。 2つのレイアウトが同じ種類で、サイズ、名前および整列制約が同じ場合、2つのレイアウトは同じとみなされます。 また、レイアウトの種類に応じて、追加の条件を満たす必要があります:
      オーバーライド:
      equals、クラスObject
      パラメータ:
      other - このレイアウトと等価性を持たせるために比較するオブジェクト。
      戻り値:
      指定されたオブジェクトがこのレイアウトに等しい場合、true
      関連項目:
    • hashCode

      int hashCode()
      このレイアウトのハッシュ・コード値を返します。
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      このレイアウトのハッシュ・コード値
      関連項目:
    • toString

      String toString()
      このレイアウトの文字列表現を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      このレイアウトの文字列表現
    • paddingLayout

      static PaddingLayoutPREVIEW paddingLayout(long size)
      指定したサイズでパディング・レイアウトを作成します。
      パラメータ:
      size - パディングのサイズ(ビット)。
      戻り値:
      新しいセレクタ・レイアウト。
      例外:
      IllegalArgumentException - size <= 0の場合
    • valueLayout

      static ValueLayoutPREVIEW valueLayout(Class<?> carrier, ByteOrder order)
      指定されたJavaキャリアおよびバイト順序の値レイアウトを作成します。 結果値レイアウトのタイプは、指定されたキャリアによって決まります:
      パラメータ:
      carrier - 値レイアウト・キャリア。
      order - 値レイアウトのバイト順。
      戻り値:
      指定されたJavaキャリアおよびバイト順序での値のレイアウト。
      例外:
      IllegalArgumentException - キャリア・タイプがサポートされていない場合。
    • sequenceLayout

      static SequenceLayoutPREVIEW sequenceLayout(long elementCount, MemoryLayoutPREVIEW elementLayout)
      指定された要素レイアウトおよび要素数を使用して順序レイアウトを作成します。
      パラメータ:
      elementCount - 順序要素の数。
      elementLayout - 順序要素レイアウト。
      戻り値:
      指定された要素レイアウトおよびサイズの新しい順序レイアウト。
      例外:
      IllegalArgumentException - elementCount が負の場合。
    • sequenceLayout

      static SequenceLayoutPREVIEW sequenceLayout(MemoryLayoutPREVIEW elementLayout)
      longをオーバーフローしないように、指定された要素レイアウトおよび最大要素数の順序レイアウトを作成します。 これは次のコードと等価です。
      sequenceLayout(Long.MAX_VALUE / elementLayout.bitSize(), elementLayout);
      
      パラメータ:
      elementLayout - 順序要素レイアウト。
      戻り値:
      指定された要素レイアウトおよび最大要素数を持つ新しい順序レイアウト。
    • structLayout

      static StructLayoutPREVIEW structLayout(MemoryLayoutPREVIEW... elements)
      指定されたメンバー・レイアウトを使用して構造体レイアウトを作成します。
      パラメータ:
      elements - 構造体レイアウトのメンバー・レイアウト。
      戻り値:
      指定されたメンバー・レイアウトを持つ構造体レイアウト。
      例外:
      IllegalArgumentException - メンバー・レイアウトの「ビット・サイズ」の合計がオーバーフローした場合。
    • unionLayout

      static UnionLayoutPREVIEW unionLayout(MemoryLayoutPREVIEW... elements)
      指定されたメンバー・レイアウトを使用してユニオン・レイアウトを作成します。
      パラメータ:
      elements - 結合レイアウトのメンバー・レイアウト。
      戻り値:
      特定のメンバー・レイアウトを含むユニオン・レイアウト。