モジュール jdk.incubator.foreign
パッケージ jdk.incubator.foreign

クラスSequenceLayout

java.lang.Object
jdk.incubator.foreign.SequenceLayout
すべての実装されたインタフェース:
Constable, MemoryLayout

public final class SequenceLayout extends Object implements MemoryLayout
順序レイアウト。 順序レイアウトは、指定されたレイアウトの繰返しを表すために使用されます(順序レイアウト「要素レイアウト」とも呼ばれます)。 反復カウント。(たとえば、「有限」順序レイアウト用)が存在する場合、順序レイアウト「エレメント件数」と呼ばれます。 確定順序レイアウトは、順序レイアウト要素のレイアウトが、順序レイアウト要素の数と同じ回数繰り返されるグループ・レイアウトとみなすことができます。 つまり、次のレイアウトになります:

MemoryLayout.sequenceLayout(3, MemoryLayout.valueLayout(32, ByteOrder.BIG_ENDIAN));
 
次のレイアウトと同等です:

MemoryLayout.structLayout(
    MemoryLayout.valueLayout(32, ByteOrder.BIG_ENDIAN),
    MemoryLayout.valueLayout(32, ByteOrder.BIG_ENDIAN),
    MemoryLayout.valueLayout(32, ByteOrder.BIG_ENDIAN));
 

これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 比較する場合は、equalsメソッドを使用することをお薦めします。

特に指定がないかぎり、null引数、またはこのクラスのメソッドに1つ以上のnull要素を含む配列引数を渡すと、NullPointerExceptionがスローされます。

実装要件:
このクラスは不変でスレッドセーフです。
  • メソッドの詳細

    • elementLayout

      public MemoryLayout elementLayout()
      この順序レイアウトに関連付けられた要素レイアウトを返します。
      戻り値:
      この順序レイアウトに関連付けられた要素レイアウト。
    • elementCount

      public OptionalLong elementCount()
      この順序レイアウト(もしあれば)の要素カウントを返します。
      戻り値:
      この順序レイアウト(もしあれば)の要素数。
    • withElementCount

      public SequenceLayout withElementCount(long elementCount)
      要素レイアウト、位置合せ制約および名前がこのシーケンス・レイアウトと同じであり、指定された要素数が含まれる新しいシーケンス・レイアウトを取得します。
      パラメータ:
      elementCount - 新規要素数。
      戻り値:
      指定された要素数の新規の順序。
      例外:
      IllegalArgumentException - elementCount < 0の場合。
    • reshape

      public SequenceLayout reshape(long... elementCounts)
      このシーケンス・レイアウト(flatten()を参照してください)の平坦化された投影内の要素レイアウトが、指定された要素カウントに従って1つ以上のネストされたシーケンス・レイアウトに再配置される新しいシーケンス・レイアウトを返します。 この変換では、レイアウト・サイズが保持されます。つまり、指定された要素数を乗算すると、このシーケンス・レイアウトのフラット化された投影と同じ要素数が生成される必要があります。

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

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

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

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

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

      public SequenceLayout flatten()
      要素レイアウトが、このシーケンス・レイアウトの要素レイアウトを再帰的にトラバースすることで検出される最初の非シーケンス要素レイアウトである、新しいフラット化シーケンス・レイアウトを返します。 この変換によってレイアウト・サイズが保持されます。このシーケンスのレイアウトにネストされたシーケンスのレイアウトがドロップされ、返されたシーケンスのレイアウトにその要素数が組み込まれます。 たとえば、次のような種類のシーケンス・レイアウトがあるとします:
      
          var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, MemoryLayouts.JAVA_INT));
       
      seq.flatten()をコールすると、次のシーケンス・レイアウトが生成されます:
      
          var flattenedSeq = MemoryLayout.sequenceLayout(12, MemoryLayouts.JAVA_INT);
       
      戻り値:
      このレイアウト(ただし、要素数が異なる可能性があります。)と同じサイズの新しいシーケンス・レイアウト。その要素レイアウトはシーケンス・レイアウトではありません。
      例外:
      UnsupportedOperationException - この順序レイアウト、またはフラット化されるネストされた順序レイアウトのいずれかに要素数がない場合。
    • toString

      public String toString()
      次のクラスからコピーされた説明: Object
      オブジェクトの文字列表現を返します。
      定義:
      インタフェースMemoryLayout内のtoString
      オーバーライド:
      toString、クラスObject
      戻り値:
      このオブジェクトの文字列表現
    • equals

      public boolean equals(Object other)
      次のクラスからコピーされた説明: Object
      このオブジェクトと他のオブジェクトが等しいかどうかを示します。

      equalsメソッドは、null以外のオブジェクト参照での同値関係を実装します。

      • 反射性(reflexive): null以外の参照値xについて、x.equals(x)trueを返します。
      • 対称性(symmetric): null以外の参照値xおよびyについて、y.equals(x)trueを返す場合に限り、x.equals(y)trueを返します。
      • 推移性(transitive): null以外の参照値xy、およびzについて、x.equals(y)trueを返し、y.equals(z)trueを返す場合、x.equals(z)trueを返します。
      • 一貫性(consistent): null以外の参照値xおよびyについて、x.equals(y)の複数の呼出しは、このオブジェクトに対するequalsによる比較で使われた情報が変更されていなければ、一貫してtrueを返すか、一貫してfalseを返します。
      • null以外の参照値xについて、x.equals(null)falseを返します。

      等価関係は、操作対象の要素を「同等クラス」にパーティション化し、等価クラスのすべてのメンバーは互いに等しくなります。 等価クラスのメンバーは、少なくともなんらかの目的で互いに置換可能です。

      定義:
      インタフェースMemoryLayout内のequals
      パラメータ:
      other - 比較対象の参照オブジェクト。
      戻り値:
      このオブジェクトがobj引数と同じである場合はtrue、それ以外の場合はfalse
      関連項目:
    • hashCode

      public int hashCode()
      次のクラスからコピーされた説明: Object
      オブジェクトのハッシュ・コード値を返します。 このメソッドは、HashMapによって提供されるハッシュ表などの、ハッシュ表の利点のためにサポートされています。

      hashCodeの一般的な規則は次のとおりです。

      • Javaアプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、このオブジェクトに対するequalsの比較で使用される情報が変更されていなければ、hashCodeメソッドは常に同じ整数を返す必要があります。 ただし、この整数は同じアプリケーションの実行ごとに同じである必要はありません。
      • 2つのオブジェクトがequalsメソッドに従って等しい場合、2つのオブジェクトのそれぞれで hashCodeメソッドを呼び出すと、同じ整数結果が生成される必要があります。
      • 2つのオブジェクトがequalsメソッドに従って等しくない場合、2つのオブジェクトのそれぞれでhashCodeメソッドを呼び出すと、個別の整数結果が生成される必要はありません。 ただし、プログラマは、等しくないオブジェクトに対して異なる整数の結果を生成すると、ハッシュ表のパフォーマンスが向上する可能性があることに注意するようにしてください。

      定義:
      インタフェースMemoryLayout内のhashCode
      戻り値:
      このオブジェクトのハッシュ・コード値。
      関連項目:
    • describeConstable

      public Optional<DynamicConstantDesc<SequenceLayout>> describeConstable()
      インタフェースからコピーされた説明:MemoryLayout
      このレイアウトの公称記述子を含むOptional(構成できる場合)または空のOptional(作成できない場合)を返します。
      定義:
      インタフェースConstable内のdescribeConstable
      定義:
      インタフェースMemoryLayout内のdescribeConstable
      戻り値:
      最終的な名目記述子を含むOptional、または作成できない場合は空のOptional
    • withName

      public SequenceLayout withName(String name)
      必要なレイアウトnameが機能する新しいレイアウトを作成します。

      これは次のコードと等価です。

      
          withAttribute(LAYOUT_NAME, name);
       

      定義:
      インタフェースMemoryLayout内のwithName
      パラメータ:
      name - レイアウト名。
      戻り値:
      このレイアウトと同じ新しいレイアウト(関連付けられているnameを除く)。
      関連項目:
    • withBitAlignment

      public SequenceLayout withBitAlignment(long alignmentBits)
      目的の位置合せ制約を機能する新しいレイアウトを作成します。
      定義:
      インタフェースMemoryLayout内のwithBitAlignment
      パラメータ:
      alignmentBits - レイアウト位置合せ制約。ビットで表されます。
      戻り値:
      このレイアウトと同じ新しいレイアウトですが、関連付けられている位置合わせの制約を除きます。
    • withAttribute

      public SequenceLayout withAttribute(String name, Constable value)
      このレイアウトと同じ属性と新しく指定された属性を持つ新しいメモリー・レイアウトを返します。 このレイアウトに同じ名前の属性がすでに含まれている場合は、返されるレイアウトで既存の属性値が上書きされます。
      定義:
      インタフェースMemoryLayout内のwithAttribute
      パラメータ:
      name - 属性名
      value - 属性値
      戻り値:
      このレイアウトと同じ属性と新しく指定された属性を備えた新しいメモリー・レイアウト。
    • name

      public final Optional<String> name()
      インタフェースからコピーされた説明:MemoryLayout
      このレイアウトに関連するname (もしあれば)を返します。

      これは次のコードと等価です。

      
          attribute(LAYOUT_NAME).map(String.class::cast);
       

      定義:
      インタフェースMemoryLayout内のname
      戻り値:
      レイアウトname (もしあれば)。
      関連項目:
    • attribute

      public Optional<Constable> attribute(String name)
      インタフェースからコピーされた説明:MemoryLayout
      指定された名前の(それが存在する場合)の属性を返します。
      定義:
      インタフェースMemoryLayout内のattribute
      パラメータ:
      name - 属性名
      戻り値:
      指定された名前の(それが存在する場合)の属性。
    • attributes

      public Stream<String> attributes()
      インタフェースからコピーされた説明:MemoryLayout
      このレイアウトに関連付けられた属性名のストリームを返します。
      定義:
      インタフェースMemoryLayout内のattributes
      戻り値:
      このレイアウトに関連付けられた属性名のストリーム。
    • bitAlignment

      public final long bitAlignment()
      インタフェースからコピーされた説明:MemoryLayout
      このレイアウトに関連付けられている配置制約をビット単位で返します。 レイアウトの位置合せにより、レイアウトのビット単位の位置合せである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データ)で必要とされる最も厳密な位置合せです。
      このレイアウト(MemoryLayout.withBitAlignment(long)を参照してください)に明示的な位置合せ制約が設定されていない場合、このメソッドはこのレイアウトに関連付けられた「自然整列」制約(ビット単位)を返します。
      定義:
      インタフェースMemoryLayout内のbitAlignment
      戻り値:
      レイアウト位置合せ制約をビット単位で指定します。
    • hasSize

      public boolean hasSize()
      インタフェースからコピーされた説明:MemoryLayout
      このレイアウトには指定されたサイズがありますか? レイアウトが(次を含む)でサイズが未指定の(elementCount()を参照してください)の順序レイアウトである場合、そのレイアウトには指定されたサイズがありません。 値レイアウト(ValueLayoutを参照してください)およびパディングのレイアウト(MemoryLayout.paddingLayout(long)を参照してください) alwaysには指定されたサイズがあるため、このメソッドは常にtrueを返します。
      定義:
      インタフェースMemoryLayout内のhasSize
      戻り値:
      このレイアウトが指定されたサイズの場合、true
    • bitSize

      public long bitSize()
      インタフェースからコピーされた説明:MemoryLayout
      レイアウト・サイズをビット単位で計算します。
      定義:
      インタフェースMemoryLayout内のbitSize
      戻り値:
      レイアウトのサイズ(ビット単位)。
    • isPadding

      public boolean isPadding()
      インタフェースからコピーされた説明:MemoryLayout
      これはパディング・レイアウト(例: MemoryLayout.paddingLayout(long)から作成されたレイアウト)ですか。
      定義:
      インタフェースMemoryLayout内のisPadding
      戻り値:
      このレイアウトがパディング・レイアウトの場合はtrue。