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

インタフェースSequenceLayout

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

public sealed interface SequenceLayout extends MemoryLayoutPREVIEW
SequenceLayoutは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでSequenceLayoutを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
特定の「要素レイアウト」の均質な繰返しを示す複合レイアウト。 繰返し回数は、順序レイアウト「エレメント件数」と呼ばれます。 シーケンス・レイアウトは、シーケンス・レイアウトの要素レイアウトがシーケンス・レイアウトの要素数と同じ回数繰り返される構造体レイアウトと考えることができます。 つまり、次のレイアウトになります:
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です。
導入されたバージョン:
19
  • メソッドの詳細

    • elementLayout

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

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

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

      SequenceLayoutPREVIEW 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の場合、その位置の要素数は、残りの要素数およびこのレイアウトのフラット化された投影の要素数から推測されます。 たとえば、前述のreshapeSeqに相当するレイアウトは、次の方法で計算することもできます:

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

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

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

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