インタフェースSequenceLayout

すべてのスーパー・インタフェース:
MemoryLayout

public sealed interface SequenceLayout extends MemoryLayout
特定の「要素レイアウト」の均質な繰返しを示す複合レイアウト。 繰返し回数は、順序レイアウト「エレメント件数」と呼ばれます。 シーケンス・レイアウトは、シーケンス・レイアウトの要素レイアウトがシーケンス・レイアウトの要素数と同じ回数繰り返される構造体レイアウトと考えることができます。 つまり、次のレイアウトになります:
MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
次のレイアウトと同等です:
MemoryLayout.structLayout(
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
実装要件:
このクラスは、不変、スレッド・セーフおよびvalue-basedです。
導入されたバージョン:
22
  • ネストされたクラスのサマリー

    インタフェースで宣言されたネストされたクラス/インタフェース MemoryLayout

    MemoryLayout.PathElement
    修飾子と型
    インタフェース
    説明
    static interface 
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    long
    この順序レイアウトの要素数を返します。
    このシーケンス・レイアウトの要素レイアウトを返します。
    フラット化された順序レイアウトを返します。
    reshape(long... elementCounts)
    このシーケンス・レイアウトの要素を、多次元シーケンス・レイアウトに再配置します。
    withByteAlignment(long byteAlignment)
    このレイアウトと同じ特性を持つメモリー・レイアウトを返しますが、指定された整列制約(バイト単位)を使用します。
    withElementCount(long elementCount)
    このレイアウトと同じ特性を持つシーケンス・レイアウトを、指定された要素数とともに返します。
    このレイアウトと同じ特性を持つメモリー・レイアウトを、指定された名前で返します。

    インタフェースで宣言されたメソッド MemoryLayout

    arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle, withoutName
    修飾子と型
    メソッド
    説明
    指定されたレイアウト・パスによって選択されたオフセットでメモリー・セグメント内の隣接する要素にアクセスするvarハンドルを作成します。アクセスされた要素にはこのレイアウトがあり、パスの初期レイアウトはこのレイアウトです。
    long
    このレイアウトに関連付けられているバイト単位の配置制約を返します。
    long
    指定されたレイアウト・パスによって選択されたレイアウトのオフセットをバイト数で計算します。パス内の初期レイアウトはこのレイアウトです。
    指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト)を計算するメソッド・ハンドルを作成します。パス内の初期レイアウトはこのレイアウトです。
    long
    レイアウト・サイズをバイト単位で返します。
    boolean
    equals(Object other)
    指定されたオブジェクトをこのレイアウトと比較し、等価性を維持します。
    int
    このレイアウトのハッシュ・コード値を返します。
    このレイアウトに関連付けられている名前(もしあれば)を返します。
    long
    scale(long offset, long index)
    offset + (byteSize() * index)を返します。
    このレイアウトでMemoryLayout.scale(long, long)を呼び出すために使用できるメソッド・ハンドルを返します。
    指定されたパスから選択されたレイアウトを返します。パス内の初期レイアウトはこのレイアウトです。
    メモリー・セグメントを指定して、指定されたレイアウト・パスによって選択されたレイアウトに対応するsliceを返すメソッド・ハンドルを作成します。パス内の初期レイアウトはこのレイアウトです。
    このレイアウトの文字列表現を返します。
    指定されたレイアウト・パスによって選択されたオフセットでメモリー・セグメントにアクセスするvarハンドルを作成します。パス内の初期レイアウトはこのレイアウトになります。
    このレイアウトと同じ特性を持つメモリー・レイアウトを名前なしで返します。
  • メソッドの詳細

    • elementLayout

      MemoryLayout elementLayout()
      このシーケンス・レイアウトの要素レイアウトを返します。
      戻り値:
      この順序レイアウトの要素レイアウト
    • elementCount

      long elementCount()
      この順序レイアウトの要素数を返します。
      戻り値:
      この順序レイアウトの要素数
    • withElementCount

      SequenceLayout withElementCount(long elementCount)
      このレイアウトと同じ特性を持つシーケンス・レイアウトを、指定された要素数とともに返します。
      パラメータ:
      elementCount - 新しい要素数
      戻り値:
      このレイアウトと同じ特性を持つが、指定された要素数を持つ順序レイアウト
      スロー:
      IllegalArgumentException - elementCountが負の場合
      IllegalArgumentException - elementLayout.bitSize() * elementCountがオーバーフローした場合
    • reshape

      SequenceLayout reshape(long... elementCounts)
      このシーケンス・レイアウトの要素を、多次元シーケンス・レイアウトに再配置します。 結果のレイアウトは、この順序レイアウトの「平坦化された投影」内の要素レイアウトが、指定された要素数に従って1つ以上のネストされた順序レイアウトに再配置される順序レイアウトです。 この変換では、レイアウト・サイズが保持されます。つまり、指定された要素数を乗算すると、このシーケンス・レイアウトのフラット化された投影と同じ要素数が生成される必要があります。

      たとえば、次のような種類のシーケンス・レイアウトがあるとします:

      var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
      
      seq.reshape(2, 6)をコールすると、次のシーケンス・レイアウトが生成されます:
      var reshapeSeq = MemoryLayout.sequenceLayout(2, MemoryLayout.sequenceLayout(6, ValueLayout.JAVA_INT));
      

      指定された要素数の1つが特別な値-1である場合、その位置の要素数は、残りの要素数およびこのレイアウトのフラット化された投影の要素数から推測されます。 たとえば、前述のreshapeSeqに相当するレイアウトは、次の方法で計算することもできます:

      var reshapeSeqImplicit1 = seq.reshape(-1, 6);
      var reshapeSeqImplicit2 = seq.reshape(2, -1);
      

      パラメータ:
      elementCounts - 要素数の配列。最大1つは-1です。
      戻り値:
      この順序レイアウト(flatten()を参照してください)の「平坦化された投影」内の要素レイアウトが、1つ以上のネストされた順序レイアウトに再配置される順序レイアウト
      スロー:
      IllegalArgumentException - 2つ以上の要素数が-1に設定されている場合、または1つ以上の要素数が<= 0 (ただし、-1以外)の場合、または必要な推論の後で要素数を乗算しても、この順序レイアウトのフラット化された投影と同じ要素数は得られません
    • flatten

      SequenceLayout flatten()
      フラット化された順序レイアウトを返します。 返された順序レイアウトの要素レイアウトは、この順序レイアウトの要素レイアウトを(必要に応じて再帰的に)で検査することによって最初に検出された順序ではないレイアウトです:
      MemoryLayout flatElementLayout(SequenceLayout sequenceLayout) {
         return switch (sequenceLayout.elementLayout()) {
             case SequenceLayout nestedSequenceLayout -> flatElementLayout(nestedSequenceLayout);
             case MemoryLayout layout -> layout;
         };
      }
      

      この変換によってレイアウト・サイズが保持されます。このシーケンスのレイアウトにネストされたシーケンスのレイアウトがドロップされ、返されたシーケンスのレイアウトにその要素数が組み込まれます。 たとえば、次のような種類のシーケンス・レイアウトがあるとします:

      var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
      
      seq.flatten()をコールすると、次のシーケンス・レイアウトが生成されます:
      var flattenedSeq = MemoryLayout.sequenceLayout(12, ValueLayout.JAVA_INT);
      

      戻り値:
      このレイアウト(ただし、要素数が異なる可能性があります。)と同じサイズの順序レイアウト。要素レイアウトは順序レイアウトではありません。
    • withName

      SequenceLayout withName(String name)
      このレイアウトと同じ特性を持つメモリー・レイアウトを、指定された名前で返します。
      定義:
      インタフェースMemoryLayout内のwithName
      パラメータ:
      name - レイアウト名
      戻り値:
      このレイアウトと同じ特性を持つが、指定された名前を持つメモリー・レイアウト
      関連項目:
    • withByteAlignment

      SequenceLayout withByteAlignment(long byteAlignment)
      このレイアウトと同じ特性を持つメモリー・レイアウトを返しますが、指定された整列制約(バイト単位)を使用します。
      定義:
      インタフェースMemoryLayout内のwithByteAlignment
      パラメータ:
      byteAlignment - レイアウト整列制約(バイト単位)
      戻り値:
      このレイアウトと同じ特性を持つメモリー・レイアウト。ただし、指定された整列制約(バイト単位)
      スロー:
      IllegalArgumentException - byteAlignmentが2の累乗でない場合
      IllegalArgumentException - byteAlignment < elementLayout().byteAlignment()の場合