- 型パラメータ:
E
-ETYPE
のボックス版、ベクトルの要素型
VectorShuffle
は、「ソース索引」と呼ばれる、順序付けされた不変の一連のint
値を表します。各ソース索引は、互換性のあるVector
からソース・レーンを数値で選択します。
同じ「要素型」 (ETYPE
)およびshape
のVectorShuffle
およびVector
には同じ数のレーンがあるため、(具体的には、そのvector species
には互換性があります)との互換性があります。
シャッフルは、rearrange
メソッドを使用して(compatible)ソース・ベクトルに適用されます。
シャッフルにはベクトル種から導出されたレーン構造がありますが、レーン索引はレーン値ではなくint
として格納されます。
このメソッドは、ソース・ベクトルへのランダム・アクセスによってレーン値を収集し、ソース索引を参照してレーンを選択します。 ソース索引がシャッフルに複数回出現する場合は、選択したレーン値が結果に複数回コピーされます。 特定のレーンがソース索引によって選択されない場合、そのレーン値は無視されます。 結果のベクトルには、シャッフルのソース・インデックスによって選択されたすべてのソース・レーン値が含まれます。 結果のレーン値は、元のベクトル・レーンの順序ではなく、シャッフル・ソース索引に従って順序付けされます。
各シャッフルには、シャッフルが演算するベクトルの互換性を決定するvectorSpecies()
プロパティがあります。 これにより、シャッフルのlength()
は常に、それが演算するベクトルのVLENGTHと等しくなります。 要素種とシャッフル種のシェイプは、シャッフルの動作とは直接関係ありません。 レーン数が一定であるかぎり、シャッフルは他のレーン・タイプへのconvertedにすることが容易です。
その内部状態では、シャッフルは常に[-VLENGTH..VLENGTH-1]
からの狭い範囲の整数値を保持します。 正の数は自己説明的で、任意のソース・ベクトルに適用されるレーン番号です。 負の数(存在する場合)は、シャッフルが有効なレーン索引ではないraw整数値から作成されたことを示す符号です。
シャッフルに負の数で表される無効なソース索引は、「例外索引」と呼ばれます。
例外的な索引は様々な方法で処理されます:
- 特に明記されていないかぎり、レーンが例外的なインデックスによって処理されると、シャッフル使用メソッドは
ArrayIndexOutOfBoundsException
をスローします。 - 無効なソース索引(負であるかどうか)が最初にシャッフルにロードされると、
wrapIndex()
による場合と同様に、[-VLENGTH..-1]
の負の範囲に部分的に正規化されます。 この例外的な索引の処理は、正の数と正でない数の隣接する範囲にラップしながら、通常の索引と例外的な索引の区別を保持するため、「部分ラッピング」と呼ばれます。 部分的にラップされた索引は、VLENGTH
の最終オフセットを追加することで、後で完全に正の範囲にラップできます。 - 一部のアプリケーションでは、別のソース・ベクトルへの"steer"アクセスに使用される例外的な索引。 そのような場合、
[-VLENGTH..-1]
の範囲内にある例外索引値は、有効な範囲である[0..VLENGTH-1]
まで循環され、2番目のソース・ベクトルで使用されます。 -
VLENGTH
が小さい別のシャッフル種からシャッフルがキャストされると、すべての索引が新しいVLENGTH
に対して再検証され、一部の索引が例外索引に変換される可能性があります。 いずれの場合も、シャッフル・キャスティングは例外的なインデックスを通常のインデックスに変換しません。
値ベースのクラスとアイデンティティ演算
VectorShuffle
は、Vector
とともにvalue-basedクラスです。 ==
などのアイデンティティ依存の演算では、予期しない結果が発生したり、パフォーマンスが低下する可能性があります。 また、ベクトル・シャッフル・オブジェクトは、ローカルおよびパラメータにstatic final
定数として格納できますが、セマンティクスが有効な場合でも、他のJavaフィールドまたは配列要素に格納すると、パフォーマンスが低下する可能性があります。 最後に、可能な場合、ベクトル・シャッフルはループ内で計算されず、かわりにループ不変ローカルまたはstatic final
定数として格納される必要があります。 -
メソッドのサマリー
修飾子と型メソッド説明abstract <F> VectorShuffle
<F> cast
(VectorSpecies<F> species) このシャッフルを、要素型F
の指定された種のシャッフルに変換します。abstract <F> VectorShuffle
<F> check
(VectorSpecies<F> species) このシャッフルが指定された種を持っていることを確認し、このシャッフルをそのまま返します。abstract int
checkIndex
(int index) [0..VLENGTH-1]
の有効範囲外のレーン索引の検証機能。abstract VectorShuffle
<E> checkIndex()
検証ファンクションをすべてのレーンに適用し、このシャッフルに例外的な索引がある場合はIndexOutOfBoundsException
をスローします。final boolean
このシャッフルが他のオブジェクトと同一かどうかを示します。static <E> VectorShuffle
<E> fromArray
(VectorSpecies<E> species, int[] sourceIndexes, int offset) オフセットから始まるint
配列から、指定された種のシャッフルを作成します。static <E> VectorShuffle
<E> fromOp
(VectorSpecies<E> species, IntUnaryOperator fn) 範囲[0..VLENGTH-1]
に適用される演算子の連続する値から、指定された種のシャッフルを作成します。static <E> VectorShuffle
<E> fromValues
(VectorSpecies<E> species, int... sourceIndexes) 一連のソース・インデックスから、指定された種のシャッフルを作成します。protected final Object
final int
hashCode()
レーンのソース・インデックスとベクトル種に基づいて、シャッフルのハッシュ・コード値を返します。abstract void
intoArray
(int[] a, int offset) このシャッフルをoffsetから始まるint
配列に格納します。static <E> VectorShuffle
<E> iota
(VectorSpecies<E> species, int start, int step, boolean wrap) start
から始まり、指定されたstep
によってステップ実行される連続値に設定されたソース索引を使用してシャッフルを作成します。abstract VectorMask
<E> 有効な索引(負でない値)を含むすべてのレーンを検索し、それらのレーンが正確に設定されているマスクを返します。int
laneSource
(int i) レーン索引i
のint
レーン要素を取得final int
length()
このシャッフルによって処理されたレーンの数を返します。static <E> VectorShuffle
<E> makeUnzip
(VectorSpecies<E> species, int part) 2つのベクトルの連結を解凍するシャッフルを作成します。代わりに、入力レーンを1つまたは他の出力ベクトルに格納します。static <E> VectorShuffle
<E> makeZip
(VectorSpecies<E> species, int part) 2つのベクトルをまとめて圧縮するシャッフルを作成します。代わりに、一方のベクトルからレーンを選択します。abstract VectorShuffle
<E> rearrange
(VectorShuffle<E> s) 別のシャッフルによって制御されているレーン・インデックスを選択して、このシャッフルのレーン要素を再配置します。abstract int[]
toArray()
このシャッフルのレーンのソース・インデックスを含むint
配列を返します。final String
toString()
このシャッフルの文字列表現を"Shuffle[0,1,2...]"
形式で返し、ソース・インデックスをレーン順に報告します。toVector()
このシャッフルをベクトルに変換し、シャッフルのレーンのソース・インデックスに対応する整数値のベクトルを作成します。abstract VectorSpecies
<E> このシャッフルの種を返します。abstract int
wrapIndex
(int index) [0..VLENGTH-1]
の有効範囲外のレーン索引の検証機能。abstract VectorShuffle
<E> wrapIndex()
検証ファンクションをすべてのレーンに適用し、例外的な索引をラップされた通常の索引に置き換えます。
-
メソッドの詳細
-
vectorSpecies
-
length
public final int length()このシャッフルによって処理されたレーンの数を返します。 これは、演算対象のベクトルのVLENGTH
と同じです。- 戻り値:
- シャッフル・レーンの数
-
cast
public abstract <F> VectorShuffle<F> cast(VectorSpecies<F> species) このシャッフルを、要素型F
の指定された種のシャッフルに変換します。 様々なレーンのソース索引は変更されません。 例外的なソース索引は例外的なままで、有効な索引は有効なままです。- 型パラメータ:
F
- 種のboxed要素の型- パラメータ:
species
- 目的のシャッフルの種- 戻り値:
- シェイプおよび要素型によって変換されたシャッフル
- 例外:
IllegalArgumentException
- このシャッフルの長さと種の長さが異なる場合
-
check
public abstract <F> VectorShuffle<F> check(VectorSpecies<F> species) このシャッフルが指定された種を持っていることを確認し、このシャッフルをそのまま返します。 効果は次の疑似コードのようになります :species == vectorSpecies() ? this : throw new ClassCastException()
。- 型パラメータ:
F
- 必要な種のボックス化された要素型- パラメータ:
species
- 必要な種- 戻り値:
- 同じシャッフル
- 例外:
ClassCastException
- シャッフル種が間違っている場合- 関連項目:
-
checkIndex
public abstract int checkIndex(int index) [0..VLENGTH-1]
の有効範囲外のレーン索引の検証機能。index
がこの範囲内にある場合、変更されずに返されます。 それ以外の場合は、IndexOutOfBoundsException
がスローされます。- パラメータ:
index
- レーンのインデックス- 戻り値:
index
- 例外:
IndexOutOfBoundsException
-index
がVLENGTH
以上の場合、または負の値の場合- 関連項目:
-
wrapIndex
public abstract int wrapIndex(int index) [0..VLENGTH-1]
の有効範囲外のレーン索引の検証機能。index
は、VLENGTH
の適切な倍数を加算または減算することで、この範囲に強制的に入ります。 具体的には、length-floor
の値を計算することで、索引が必要な範囲に縮小されます。ここで、floor=vectorSpecies().loopBound(length)
は次に低いVLENGTH
の倍数です。VLENGTH
が2の累乗であるかぎり、削減された索引もindex & (VLENGTH - 1)
と等しくなります。- パラメータ:
index
- レーンのインデックス- 戻り値:
index
。VLENGTH
の適切な倍数によって[0..VLENGTH-1
の範囲に調整されます- 関連項目:
-
checkIndexes
public abstract VectorShuffle<E> checkIndexes()checkIndex()
検証ファンクションをすべてのレーンに適用し、このシャッフルに例外的な索引がある場合はIndexOutOfBoundsException
をスローします。- 戻り値:
- 現在のシャッフル、変更なし
- 例外:
IndexOutOfBoundsException
- このシャッフル内のレーンに例外的なインデックスが含まれている場合- 関連項目:
-
wrapIndexes
public abstract VectorShuffle<E> wrapIndexes()wrapIndex()
検証ファンクションをすべてのレーンに適用し、例外的な索引をラップされた通常の索引に置き換えます。- 戻り値:
- すべての例外インデックスがラップされた、現在のシャッフル
- 関連項目:
-
laneIsValid
public abstract VectorMask<E> laneIsValid()有効な索引(負でない値)を含むすべてのレーンを検索し、それらのレーンが正確に設定されているマスクを返します。- 戻り値:
- 有効なソース・インデックスを含むレーンのマスク
- 関連項目:
-
fromValues
public static <E> VectorShuffle<E> fromValues(VectorSpecies<E> species, int... sourceIndexes) 一連のソース・インデックスから、指定された種のシャッフルを作成します。N
がシャッフル・レーンのインデックスであるシャッフル・レーンごとに、N
のthインデックス値が種VLENGTH
に対して検証され、(無効な場合)は[-VLENGTH..-1]
の範囲内の例外インデックスに部分的にラップされます。- 型パラメータ:
E
- boxed要素型- パラメータ:
species
- シャッフル種sourceIndexes
- シャッフルの描画元のソース・インデックス- 戻り値:
- 各レーンのソース・インデックスが指定された
int
値に設定されているシャッフル。例外の場合は部分的にラップされる - 例外:
IndexOutOfBoundsException
-sourceIndexes.length != VLENGTH
の場合- 関連項目:
-
fromArray
public static <E> VectorShuffle<E> fromArray(VectorSpecies<E> species, int[] sourceIndexes, int offset) オフセットから始まるint
配列から、指定された種のシャッフルを作成します。N
がシャッフル・レーンのインデックスであるシャッフル・レーンごとに、インデックスoffset + N
の配列要素が種VLENGTH
に対して検証され、(無効な場合)は[-VLENGTH..-1]
の範囲内の例外的なインデックスに部分的にラップされます。- 型パラメータ:
E
- boxed要素型- パラメータ:
species
- シャッフル種sourceIndexes
- シャッフルの描画元のソース・インデックスoffset
- 配列へのオフセット- 戻り値:
- 各レーンのソース・インデックスが指定された
int
値に設定されているシャッフル。例外の場合は部分的にラップされる - 例外:
IndexOutOfBoundsException
-offset < 0
またはoffset > sourceIndexes.length - VLENGTH
の場合- 関連項目:
-
fromOp
public static <E> VectorShuffle<E> fromOp(VectorSpecies<E> species, IntUnaryOperator fn) 範囲[0..VLENGTH-1]
に適用される演算子の連続する値から、指定された種のシャッフルを作成します。N
がシャッフル・レーンのインデックスであるシャッフル・レーンごとに、N
のthインデックス値が種VLENGTH
に対して検証され、(無効な場合)は[-VLENGTH..-1]
の範囲内の例外インデックスに部分的にラップされます。このメソッドから生成された
VectorShuffle
値が定数として使用されるように注意して、コードが最適に生成されるようにしてください。 たとえば、シャッフル値は、static final
フィールドまたはループ不変ローカル変数に保持できます。このメソッドは、マップされた索引の配列からシャッフルが作成されたかのように動作します:
int[] a = new int[species.length()]; for (int i = 0; i < a.length; i++) { a[i] = fn.applyAsInt(i); } return VectorShuffle.fromArray(a, 0);
- 型パラメータ:
E
- boxed要素型- パラメータ:
species
- シャッフル種fn
- レーン索引マッピング関数- 戻り値:
- マップされたインデックスのシャッフル
- 関連項目:
-
iota
public static <E> VectorShuffle<E> iota(VectorSpecies<E> species, int start, int step, boolean wrap) start
から始まり、指定されたstep
によってステップ実行される連続値に設定されたソース索引を使用してシャッフルを作成します。このメソッドは、式
VectorShuffle.fromOp(species, i -> R(start + i * step))
の値を戻します。ここで、R
はwrap
がtrueの場合はwrapIndex
で、それ以外の場合はアイデンティティ関数です。wrap
がfalseの場合、各索引は種VLENGTH
に対して検証され、(無効な場合)は[-VLENGTH..-1]
の範囲の例外的な索引に部分的にラップされます。 それ以外の場合、wrap
がtrueであれば、wrapIndex
による場合と同様に、各索引を有効範囲[0..VLENGTH-1]
に減らします。- APIのノート:
- 無効なソース索引をラップする場合は、
wrap
パラメータをtrue
に設定する必要があります。 それ以外の場合は、false
に設定すると、unary rearrange
などの後続の演算で無効なソース索引を範囲チェックできます。 - 型パラメータ:
E
- boxed要素型- パラメータ:
species
- シャッフル種start
- ソース索引シーケンスの開始値step
- 隣接するソース索引間の差異wrap
- 結果の索引をラップするかどうか- 戻り値:
- シーケンシャル・レーン・インデックスのシャッフル(ラップされている可能性がある)
- 関連項目:
-
makeZip
public static <E> VectorShuffle<E> makeZip(VectorSpecies<E> species, int part) 2つのベクトルをまとめて圧縮するシャッフルを作成します。代わりに、一方のベクトルからレーンを選択します。 zipの論理結果はいずれかの入力のサイズの2倍であるため、「拡張された結果」は部品番号で選択された2つの物理的な部分に分割されます。 たとえば、[a,b,c,d]
と[1,2,3,4]
の両方のベクトルを圧縮すると、[a,1,b,2]
と[c,3,d,4]
の2つの部分で取得する必要がある拡張論理結果[a,1,b,2,c,3,d,4]
が生成されます。このメソッドは、
P
がpart*VLENGTH/2
である式VectorShuffle.fromOp(species, i -> i/2 + (i%2)*VLENGTH + P
の値を返します。シャッフルの奇数レーン内のソース索引は、2番目のベクトルから選択する無効な索引(部分正規化後の
>= VLENGTH
または< 0
)になることに注意してください。- 型パラメータ:
E
- boxed要素型- パラメータ:
species
- シャッフルの種part
- 結果(ゼロまたは1つ)のパート番号- 戻り値:
- 2つのベクトルを
2*VLENGTH
レーンに圧縮し、選択したパートを返すシャッフル - 例外:
ArrayIndexOutOfBoundsException
-part
がゼロまたはいずれでもない場合- 関連項目:
-
makeUnzip
public static <E> VectorShuffle<E> makeUnzip(VectorSpecies<E> species, int part) 2つのベクトルの連結を解凍するシャッフルを作成します。代わりに、入力レーンを1つまたは他の出力ベクトルに格納します。 解凍の論理結果はいずれかの入力のサイズの2倍であるため、「拡張された結果」は部品番号で選択された2つの物理的な部分に分割されます。 たとえば、2つのベクトル[a,1,b,2][c,3,d,4]
を解凍すると、[a,b,c,d]
と[1,2,3,4]
の2つの部分に結果が生成されます。このメソッドは、式
VectorShuffle.fromOp(species, i -> i*2+part
の値を返します。シャッフルの上半分のソース索引は、もう一方のベクトルから選択する無効な索引(部分正規化後の
>= VLENGTH
または< 0
)になります。- 型パラメータ:
E
- boxed要素型- パラメータ:
species
- シャッフルの種part
- 結果(ゼロまたは1つ)のパート番号- 戻り値:
2*VLENGTH
レーンを2つのベクトルに解凍し、選択したパートを返すシャッフル- 例外:
ArrayIndexOutOfBoundsException
-part
がゼロまたはいずれでもない場合- 関連項目:
-
toArray
public abstract int[] toArray()このシャッフルのレーンのソース・インデックスを含むint
配列を返します。このメソッドは、このシャッフルを割り当てられた配列(
intoArray
を使用して)に格納するかのように動作し、その配列を次のように返します:int[] a = new int[this.length()]; VectorShuffle.intoArray(a, 0); return a;
- APIのノート:
- シャッフル・ソース索引は、常に
-VLENGTH
からVLENGTH-1
の範囲内にあります。 ソース索引は、負の場合にのみ例外です。 - 戻り値:
- このシャッフルのレーンのソース・インデックスを含む配列
-
intoArray
public abstract void intoArray(int[] a, int offset) このシャッフルをoffsetから始まるint
配列に格納します。シャッフル・レーン
N
ごとに、そのレーン要素に格納されているレーンのソース索引が配列要素a[offset+N]
に格納されます。- APIのノート:
- シャッフル・ソース索引は、常に
-VLENGTH
からVLENGTH-1
の範囲内にあります。 - パラメータ:
a
-int[]
型の配列offset
- 配列へのオフセット- 例外:
IndexOutOfBoundsException
-offset < 0
またはoffset > a.length - this.length()
の場合
-
toVector
このシャッフルをベクトルに変換し、シャッフルのレーンのソース・インデックスに対応する整数値のベクトルを作成します。このメソッドは、このシャッフル・レーン要素から取得された
int
配列を指定してベクトルを作成した結果を返すかのように動作します:int[] sa = this.toArray(); $type$[] va = new $type$[a.length]; for (int i = 0; i < a.length; i++) { va[i] = ($type$) sa[i]; } return IntVector.fromArray(va, 0);
- APIのノート:
- シャッフル・ソース索引は、常に
-VLENGTH
からVLENGTH-1
の範囲内にあります。 これらの値は、浮動小数点型であっても、結果のベクトルのETYPE
に変換されます。 - 戻り値:
- このシャッフルのベクトル表現
-
laneSource
public int laneSource(int i) レーン索引i
のint
レーン要素を取得- パラメータ:
i
- レーンのインデックス- 戻り値:
- レーン索引
i
のint
レーン要素
-
rearrange
public abstract VectorShuffle<E> rearrange(VectorShuffle<E> s) 別のシャッフルによって制御されているレーン・インデックスを選択して、このシャッフルのレーン要素を再配置します。指定されたシャッフルのレーンごとに、レーン要素
I
を含むレーン索引N
で、このシャッフルからI
のレーン要素が選択され、N
の結果のシャッフルに配置されます。- パラメータ:
s
- シャッフル・コント・ローリング・レーン索引の選択- 戻り値:
- このシャッフルのレーン要素の再配置
-
toString
-
equals
-
hashCode
-
getPayload
protected final Object getPayload()
-