java.lang.Object
jdk.incubator.foreign.SequenceLayout
- すべての実装されたインタフェース:
Constable
,MemoryLayout
public final class SequenceLayout extends Object implements 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クラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 比較する場合は、equals
メソッドを使用することをお薦めします。
特に指定がないかぎり、null
引数、またはこのクラスのメソッドに1つ以上のnull
要素を含む配列引数を渡すと、NullPointerException
がスローされます。
- 実装要件:
- このクラスは不変でスレッドセーフです。
-
ネストされたクラスのサマリー
インタフェースjdk.incubator.foreign.MemoryLayoutで宣言されたネストされたクラス/インタフェース
MemoryLayout.PathElement
-
メソッドのサマリー
修飾子と型メソッド説明final long
このレイアウトに関連付けられている配置制約をビット単位で返します。long
bitSize()
レイアウト・サイズをビット単位で返します。long
byteSize()
レイアウト・サイズをバイト単位で返します。この順序レイアウト(もしあれば)の要素カウントを返します。この順序レイアウトに関連付けられた要素レイアウトを返します。boolean
このオブジェクトと他のオブジェクトが等しいかどうかを示します。flatten()
要素レイアウトが、このシーケンス・レイアウトの要素レイアウトを再帰的にトラバースすることで検出される最初の非シーケンス要素レイアウトである、新しいフラット化シーケンス・レイアウトを返します。int
hashCode()
オブジェクトのハッシュ・コード値を返します。boolean
hasSize()
このレイアウトに指定したサイズがある場合、true
を返します。boolean
このレイアウトがパディング・レイアウトの場合、trueを返します。name()
このレイアウトに関連付けられたname (もしあれば)を返します。reshape
(long... elementCounts) このシーケンス・レイアウト(flatten()
を参照してください)の平坦化された投影内の要素レイアウトが、指定された要素カウントに従って1つ以上のネストされたシーケンス・レイアウトに再配置される新しいシーケンス・レイアウトを返します。toString()
オブジェクトの文字列表現を返します。withBitAlignment
(long alignmentBits) 目的の位置合せ制約を機能する新しいレイアウトを作成します。withElementCount
(long elementCount) 要素レイアウト、位置合せ制約および名前がこのシーケンス・レイアウトと同じであり、指定された要素数が含まれる新しいシーケンス・レイアウトを取得します。必要なレイアウトnameが機能する新しいレイアウトを作成します。クラス java.lang.Objectで宣言されたメソッド
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
インタフェースjdk.incubator.foreign.MemoryLayoutで宣言されたメソッド
bitAlignment, bitOffset, bitOffsetHandle, bitSize, byteAlignment, byteOffset, byteOffsetHandle, byteSize, hasSize, isPadding, map, name, select, sliceHandle, varHandle
-
メソッドの詳細
-
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, 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()
を参照してください)が、ネストされたシーケンス・レイアウトに再配置される新しいシーケンス・レイアウト。 - 例外:
UnsupportedOperationException
- このシーケンス・レイアウトに要素数がない場合。IllegalArgumentException
- 複数の要素数が-1
に設定されている場合、または1つ以上の要素数が<= 0
(ただし、-1
以外)である場合、または必要な推論後に要素数を乗算しても、この順序レイアウトのフラット化された投影と同じ要素数は得られません。
-
flatten
public SequenceLayout flatten()要素レイアウトが、このシーケンス・レイアウトの要素レイアウトを再帰的にトラバースすることで検出される最初の非シーケンス要素レイアウトである、新しいフラット化シーケンス・レイアウトを返します。 この変換によってレイアウト・サイズが保持されます。このシーケンスのレイアウトにネストされたシーケンスのレイアウトがドロップされ、返されたシーケンスのレイアウトにその要素数が組み込まれます。 たとえば、次のような種類のシーケンス・レイアウトがあるとします:var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
seq.flatten()
をコールすると、次のシーケンス・レイアウトが生成されます:var flattenedSeq = MemoryLayout.sequenceLayout(12, ValueLayout.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以外の参照値
x
、y
、および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
。 - 関連項目:
- 反射性(reflexive): null以外の参照値
-
hashCode
public int hashCode()次のクラスからコピーされた説明:Object
オブジェクトのハッシュ・コード値を返します。 このメソッドは、HashMap
によって提供されるハッシュ表などの、ハッシュ表の利点のためにサポートされています。hashCode
の一般的な規則は次のとおりです。- Javaアプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、このオブジェクトに対する
equals
の比較で使用される情報が変更されていなければ、hashCode
メソッドは常に同じ整数を返す必要があります。 ただし、この整数は同じアプリケーションの実行ごとに同じである必要はありません。 - 2つのオブジェクトが
equals
メソッドに従って等しい場合、2つのオブジェクトのそれぞれでhashCode
メソッドを呼び出すと、同じ整数結果が生成される必要があります。 - 2つのオブジェクトが
equals
メソッドに従って等しくない場合、2つのオブジェクトのそれぞれでhashCode
メソッドを呼び出すと、個別の整数結果が生成される必要はありません。 ただし、プログラマは、等しくないオブジェクトに対して異なる整数の結果を生成すると、ハッシュ表のパフォーマンスが向上する可能性があることに注意するようにしてください。
- 定義:
- インタフェース
MemoryLayout
内のhashCode
- 戻り値:
- このオブジェクトのハッシュ・コード値。
- 関連項目:
- Javaアプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、このオブジェクトに対する
-
describeConstable
public Optional<DynamicConstantDesc<SequenceLayout>> describeConstable()インタフェースからコピーされた説明:MemoryLayout
- 定義:
- インタフェース
Constable
内のdescribeConstable
- 定義:
- インタフェース
MemoryLayout
内のdescribeConstable
- 戻り値:
- このレイアウトの公称記述子を含む
Optional
(構成可能な場合)、または空のOptional
(構成できない場合)
-
withName
public SequenceLayout withName(String name) 必要なレイアウトnameが機能する新しいレイアウトを作成します。- 定義:
- インタフェース
MemoryLayout
内のwithName
- パラメータ:
name
- レイアウト名。- 戻り値:
- このレイアウトと同じ新しいレイアウト(関連付けられているnameを除く)。
- 関連項目:
-
withBitAlignment
public SequenceLayout withBitAlignment(long alignmentBits) 目的の位置合せ制約を機能する新しいレイアウトを作成します。- 定義:
- インタフェース
MemoryLayout
内のwithBitAlignment
- パラメータ:
alignmentBits
- レイアウト位置合せ制約。ビットで表されます。- 戻り値:
- このレイアウトと同じ新しいレイアウトですが、関連付けられている位置合わせの制約を除きます。
-
name
インタフェースからコピーされた説明:MemoryLayout
このレイアウトに関連付けられたname (もしあれば)を返します。- 定義:
- インタフェース
MemoryLayout
内のname
- 戻り値:
- このレイアウトに関連付けられたname (もしあれば)
- 関連項目:
-
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
- 戻り値:
- レイアウト位置合せ制約をビット単位で指定します。
-
byteSize
public long byteSize()インタフェースからコピーされた説明:MemoryLayout
レイアウト・サイズをバイト単位で返します。- 定義:
- インタフェース
MemoryLayout
内のbyteSize
- 戻り値:
- レイアウト・サイズ(バイト)
-
hasSize
public boolean hasSize()インタフェースからコピーされた説明:MemoryLayout
このレイアウトに指定したサイズがある場合、true
を返します。 レイアウトが(次を含む)でサイズが未指定の(elementCount()
を参照してください)の順序レイアウトである場合、そのレイアウトには指定されたサイズがありません。 値レイアウト(ValueLayout
を参照してください)およびパディングのレイアウト(MemoryLayout.paddingLayout(long)
を参照してください) alwaysには指定されたサイズがあるため、このメソッドは常にtrue
を返します。- 定義:
- インタフェース
MemoryLayout
内のhasSize
- 戻り値:
- このレイアウトが指定されたサイズの場合、
true
。
-
bitSize
public long bitSize()インタフェースからコピーされた説明:MemoryLayout
レイアウト・サイズをビット単位で返します。- 定義:
- インタフェース
MemoryLayout
内のbitSize
- 戻り値:
- レイアウト・サイズ(ビット単位)
-
isPadding
public boolean isPadding()インタフェースからコピーされた説明:MemoryLayout
このレイアウトがパディング・レイアウトの場合、trueを返します。- 定義:
- インタフェース
MemoryLayout
内のisPadding
- 戻り値:
- このレイアウトがパディング・レイアウトの場合、true
-