- 类型参数:
E-ETYPE的盒装版本,向量的元素类型
VectorSpecies 依赖于 Java 平台的预览功能:
VectorSpecies指一个或多个预览 API:MemorySegment。
-
方法总结
修饰符和类型方法描述broadcast(long e) 返回给定物种的向量,其中所有车道元素都设置为原始值e。<F> VectorSpecies<F>检查该物种是否具有给定的元素类型,并返回该物种不变。longcheckValue(long e) 检查此物种是否可以表示给定的元素值,并返回未更改的值。int返回该种类向量的通道大小(以位为单位)。static intelementSize(Class<?> elementType) 返回给定向量元素类型 (ETYPE) 的位大小。返回该物种向量的原始元素类型。boolean指示此物种是否与其他某个对象相同。返回该物种的向量,其中车道元素从给定偏移量处的给定数组初始化。fromMemorySegment(MemorySegmentPREVIEW ms, long offset, ByteOrder bo) inthashCode()根据矢量形状和元素类型返回物种的哈希码值。indexInRange(int offset, int limit) 返回该物种的掩码,其中仅设置索引 N 处的车道,以便调整后的索引N+offset在范围[0..limit-1]中。indexInRange(long offset, long limit) 返回该物种的掩码,其中仅设置索引 N 处的车道,以便调整后的索引N+offset在范围[0..limit-1]中。iotaShuffle(int start, int step, boolean wrap) 使用设置为从start开始并按给定的step步进的顺序值的源索引创建随机播放。intlength()返回该物种向量中的泳道数。loadMask(boolean[] bits, int offset) 返回该物种的掩码,其中车道元素从给定偏移量处的给定数组初始化。intloopBound(int length) 返回小于或等于给定length值的VLENGTH的最大倍数的循环控制函数。longloopBound(long length) 返回小于或等于给定length值的VLENGTH的最大倍数的循环控制函数。maskAll(boolean bit) 返回该物种的掩码,其中根据给定的单个boolean设置或取消设置每条车道,该boolean广播到所有车道。Class<? extends VectorMask<E>>maskType()返回该物种的矢量掩码类型。static <E> VectorSpecies<E>of(Class<E> elementType, VectorShape shape) 查找元素类型和形状的种类。static <E> VectorSpecies<E>ofLargestShape(Class<E> etype) 查找给定元素类型的最大向量种类。static <E> VectorSpecies<E>ofPreferred(Class<E> etype) 为给定的矢量元素类型查找当前平台首选的物种。intpartLimit(VectorSpecies<?> outputSpecies, boolean lanewise) 给定这个物种和第二个物种,报告一个(可能)调整 重新诠释 或lane-wise conversion从这个物种到第二个物种的净膨胀或收缩。shuffleFromArray(int[] sourceIndexes, int offset) 从偏移量开始的int数组为该物种创建随机播放。从应用于范围[0..VLENGTH-1]的运算符的连续值中为该物种创建随机播放。shuffleFromValues(int... sourceIndexes) 从一系列源索引中为该物种创建混洗。toString()int返回该物种的任何矢量的总矢量大小(以位为单位)。int返回该物种的任何矢量的总矢量大小(以字节为单位)。返回该物种产生的向量的形状。返回该物种的向量类型。<F> VectorSpecies<F>查找具有给定元素类型和与该物种相同形状的物种。withShape(VectorShape newShape) 查找具有给定形状和与该物种相同的 elementType 的物种。zero()返回该物种的向量,其中所有车道元素都设置为默认原始值(ETYPE)0。
-
方法详情
-
elementType
返回该物种向量的原始元素类型。- 返回:
-
原始元素类型 (
ETYPE) - 参见:
-
vectorType
返回该物种的向量类型。当且仅当它是相应的向量类型时,向量才属于这个种类。- 返回:
- 该物种的载体类型
-
maskType
Class <? extends VectorMask <E >> maskType()返回该物种的矢量掩码类型。- 返回:
- 掩码类型
-
elementSize
int elementSize()返回该种类向量的通道大小(以位为单位)。- 返回:
- 元素大小,以位为单位
-
vectorShape
VectorShape vectorShape()返回该物种产生的向量的形状。- 返回:
- 该物种的任何载体的形状
-
length
int length()返回该物种向量中的泳道数。- API 注意:
- 这也是与该物种的载体相关的掩码或洗牌中的泳道数。
- 返回:
- 矢量车道数
-
vectorBitSize
int vectorBitSize()返回该物种的任何矢量的总矢量大小(以位为单位)。这与this.vectorShape().vectorBitSize()的值相同。- API 注意:
- 此大小可能不同于此物种的掩码或洗牌的大小(以位为单位)。
- 返回:
- 总矢量大小,以位为单位
-
vectorByteSize
int vectorByteSize()返回该物种的任何矢量的总矢量大小(以字节为单位)。这与this.vectorShape().vectorBitSize() / Byte.SIZE的值相同。- API 注意:
- 此大小可能不同于此物种的掩码或洗牌的大小(以位为单位)。
- 返回:
- 总矢量大小,以字节为单位
-
loopBound
int loopBound(int length) 返回小于或等于给定length值的VLENGTH的最大倍数的循环控制函数。这里,VLENGTH是this.length()的结果,length被解释为车道数。结果值R满足此不等式:R <= length < R+VLENGTH具体来说,此方法计算
length - floorMod(length, VLENGTH),其中floorMod通过将其商舍入到负无穷大来计算余数。只要VLENGTH是 2 的幂,那么结果也等于length & ~(VLENGTH - 1)。- 参数:
length- 输入长度- 返回:
- 不大于给定长度的向量长度的最大倍数
- 抛出:
IllegalArgumentException- 如果length为负且结果将溢出为正值- 参见:
-
loopBound
long loopBound(long length) 返回小于或等于给定length值的VLENGTH的最大倍数的循环控制函数。这里,VLENGTH是this.length()的结果,length被解释为车道数。结果值R满足此不等式:R <= length < R+VLENGTH具体来说,此方法计算
length - floorMod(length, VLENGTH),其中floorMod通过将其商向负无穷大四舍五入来计算余数。只要VLENGTH是 2 的幂,那么结果也等于length & ~(VLENGTH - 1)。- 参数:
length- 输入长度- 返回:
- 不大于给定长度的向量长度的最大倍数
- 抛出:
IllegalArgumentException- 如果length为负且结果将溢出为正值- 自从:
- 19
- 参见:
-
indexInRange
返回该物种的掩码,其中仅设置索引 N 处的车道,以便调整后的索引N+offset在范围[0..limit-1]中。此方法返回表达式
maskAll(true).indexInRange(offset, limit)的值- 参数:
offset- 起始索引limit- 索引范围的上限(不包括)- 返回:
- 未设置超出范围车道的掩码
- 参见:
-
indexInRange
返回该物种的掩码,其中仅设置索引 N 处的车道,以便调整后的索引N+offset在范围[0..limit-1]中。此方法返回表达式
maskAll(true).indexInRange(offset, limit)的值- 参数:
offset- 起始索引limit- 索引范围的上限(不包括)- 返回:
- 未设置超出范围车道的掩码
- 自从:
- 19
- 参见:
-
check
检查该物种是否具有给定的元素类型,并返回该物种不变。效果类似于此伪代码:elementType == elementType() ? this : throw new ClassCastException()。- 类型参数:
F- 所需车道类型的盒装元素类型- 参数:
elementType- 所需的车道类型- 返回:
- 同一物种
- 抛出:
ClassCastException- 如果物种的元素类型错误- 参见:
-
partLimit
给定这个物种和第二个物种,报告一个(可能)调整 重新诠释 或lane-wise conversion从这个物种到第二个物种的净膨胀或收缩。返回值的符号和大小取决于建议的输入和输出 shapes 之间的大小差异,并且(可选地,如果lanewise为真)还取决于建议的输入和输出 lanes 之间的大小差异。- 首先,确定逻辑结果大小。如果
lanewise为假,则此大小为输入VSHAPE的大小。如果lanewise为真,则逻辑结果大小是输入VLENGTH乘以 outputETYPE大小的乘积。 - 接下来,将逻辑结果大小与建议的输出形状的大小进行比较,以查看它如何适合。
- 如果逻辑结果恰好符合输出形状,则返回值为零,表示没有净膨胀或收缩。
- 如果逻辑结果会溢出输出形状,则返回值是逻辑结果大小与(较小的)输出大小的比率(大于一)。该比率可以被视为测量“丢弃的输入位”的比例,必须从输入中删除这些位才能使结果适合输出向量。它也是 part limit ,是将输入物种转换为输出物种的方法的
part参数的上限。 - 如果逻辑结果将落入输出形状并有剩余空间,则返回值是一个负数,其绝对值是输出大小与(较小的)逻辑结果大小之间的比率(大于一)。该比率可以被视为测量必须添加到逻辑结果以填充输出向量的“额外填充位”的比例。它也是 part limit ,是将输入物种转换为输出物种的方法的
part参数的唯一下限。
- 参数:
outputSpecies- 建议的输出物种lanewise- 是否考虑车道大小- 返回:
- 大小变化的指示,作为带符号的比率或零
- 参见:
- 首先,确定逻辑结果大小。如果
-
withLanes
查找具有给定元素类型和与该物种相同形状的物种。返回与VectorSpecies.of(newType, this.vectorShape())相同的值。- 类型参数:
F- 盒装元素类型- 参数:
newType- 新元素类型- 返回:
- 新元素类型和相同形状的物种
- 抛出:
IllegalArgumentException- 如果给定的元素类型和形状组合不存在此类物种,或者给定类型不是有效的ETYPE- 参见:
-
withShape
查找具有给定形状和与该物种相同的 elementType 的物种。返回与VectorSpecies.of(this.elementType(), newShape)相同的值。- 参数:
newShape- 新形状- 返回:
- 相同元素类型和新形状的物种
- 抛出:
IllegalArgumentException- 如果给定的元素类型和形状组合不存在此类物种- 参见:
-
of
查找元素类型和形状的种类。- 类型参数:
E- 盒装元素类型- 参数:
elementType- 元素类型shape- 形状- 返回:
- 给定元素类型和形状的物种
- 抛出:
IllegalArgumentException- 如果给定的元素类型和形状组合不存在此类物种,或者给定类型不是有效的ETYPE- 参见:
-
ofLargestShape
查找给定元素类型的最大向量种类。返回的物种是平台选择的物种,其形状具有给定元素类型的最大可能位大小。底层矢量形状可能不支持某些平台上的其他车道类型,这可能会限制 重新解释演员表 的适用性。如果使用平台的 首选物种,则需要重新解释转换的向量算法将更易于移植。
- 类型参数:
E- 盒装元素类型- 参数:
etype- 元素类型- 返回:
- 元素类型的首选物种
- 抛出:
IllegalArgumentException- 如果元素类型不存在这样的物种,或者给定类型不是有效的ETYPE- 参见:
-
ofPreferred
为给定的矢量元素类型查找当前平台首选的物种。这与VectorSpecies.of(etype, VectorShape.preferredShape())的值相同。该物种由平台选择,因此它具有支持所有车道元素类型的最大可能形状。这具有以下含义:
- 实现注意事项:
-
在许多平台上,
ofLargestShape和ofPreferred之间没有行为差异,因为首选形状通常也是每种车道类型的最大可用形状。因此,大多数矢量算法在没有ofLargestShape的情况下也会表现良好。 - 类型参数:
E- 盒装元素类型- 参数:
etype- 元素类型- 返回:
- 这种元素类型的首选物种
- 抛出:
IllegalArgumentException- 如果元素类型不存在这样的物种,或者给定类型不是有效的ETYPE- 参见:
-
elementSize
返回给定向量元素类型 (ETYPE) 的位大小。元素类型必须是有效的ETYPE,而不是包装器类型或其他对象类型。元素类型参数必须是有效向量ETYPE的镜像,例如byte.class、int.class或double.class。这种类型的位大小是相应包装类的SIZE常量,例如Byte.SIZE或Integer.SIZE或Double.SIZE。- 参数:
elementType- 向量元素类型(ETYPE)- 返回:
elementType的位大小,例如int.class的位大小为 32- 抛出:
IllegalArgumentException- 如果给定的elementType参数不是有效向量ETYPE
-
zero
返回该物种的向量,其中所有车道元素都设置为默认原始值(ETYPE)0。等效于IntVector.zero(this)或等效的zero方法,在与该物种对应的向量类型上。- 返回:
- 给定物种的零向量
- 参见:
-
fromArray
返回该物种的向量,其中车道元素从给定偏移量处的给定数组初始化。该数组必须是正确的ETYPE。等效于IntVector.fromArray(this,a,offset)或等效的fromArray方法,在与该物种对应的向量类型上。- 参数:
a- 该物种的ETYPE数组offset- 要加载的第一个车道值的索引- 返回:
- 从数组中填充的给定物种的向量
- 抛出:
IndexOutOfBoundsException- 如果offset+N < 0或offset+N >= a.length用于向量中的任何通道N- 参见:
-
fromMemorySegment
从 内存段 加载该物种的向量PREVIEW 从内存段的偏移量开始。字节根据指定的字节顺序组成原始通道元素。矢量根据 内存排序 排列成通道。相当于
IntVector.fromMemorySegment(this,ms,offset,bo),在对应于该物种的向量类型上。- 参数:
ms- 内存段offset- 内存段的偏移量bo- 预期的字节顺序- 返回:
- 从内存段填充的给定物种的向量
- 抛出:
IndexOutOfBoundsException- 如果offset+N*ESIZE < 0或offset+(N+1)*ESIZE > a.length用于向量中的任何通道N- 自从:
- 19
- 参见:
-
loadMask
返回该物种的掩码,其中车道元素从给定偏移量处的给定数组初始化。相当于VectorMask.fromArray(this,a,offset)。- 参数:
bits-boolean阵列offset- 数组中的偏移量- 返回:
-
从
boolean数组加载的掩码 - 抛出:
IndexOutOfBoundsException- 如果offset+N < 0或offset+N >= a.length用于向量掩码中的任何通道N- 参见:
-
maskAll
返回该物种的掩码,其中根据给定的单个boolean设置或取消设置每条车道,该boolean广播到所有车道。- 参数:
bit- 要复制的给定掩码位- 返回:
- 根据给定位设置或取消设置每个通道的掩码
- 参见:
-
broadcast
返回给定物种的向量,其中所有车道元素都设置为原始值e。此方法返回此表达式的值:
EVector.broadcast(this, (ETYPE)e),其中EVector是特定于该物种的ETYPE的向量类。long值必须由ETYPE准确表示,以便e==(long)(ETYPE)e。- 参数:
e- 要广播的值- 返回:
-
一个向量,其中所有车道元素都设置为原始值
e - 抛出:
IllegalArgumentException- 如果给定的long值不能由向量 speciesETYPE表示- 参见:
-
checkValue
long checkValue(long e) 检查此物种是否可以表示给定的元素值,并返回未更改的值。long值必须由矢量种类的ETYPE准确表示,以便e==(long)(ETYPE)e。效果类似于此伪代码:e == (long)(ETYPE)e ? e : throw new IllegalArgumentException()。- 参数:
e- 要检查的值- 返回:
e- 抛出:
IllegalArgumentException- 如果给定的long值不能由向量 speciesETYPE表示- 参见:
-
shuffleFromValues
从一系列源索引中为该物种创建混洗。对于每个随机通道,其中
N是随机通道索引,第N个索引值针对物种VLENGTH进行验证,并且(如果无效)部分包装到范围[-VLENGTH..-1]中的异常索引。- 参数:
sourceIndexes- 洗牌将从中提取的源索引- 返回:
-
洗牌,其中每个通道的源索引设置为给定的
int值,如果异常则部分包装 - 抛出:
IndexOutOfBoundsException- 如果sourceIndexes.length != VLENGTH- 参见:
-
shuffleFromArray
从偏移量开始的int数组为该物种创建随机播放。对于每个洗牌通道,其中
N是洗牌通道索引,索引i + N处的数组元素针对物种VLENGTH进行验证,并且(如果无效)部分包装到范围[-VLENGTH..-1]中的异常索引。- 参数:
sourceIndexes- 洗牌将从中提取的源索引offset- 数组中的偏移量- 返回:
-
洗牌,其中每个通道的源索引设置为给定的
int值,如果异常则部分包装 - 抛出:
IndexOutOfBoundsException- 如果offset < 0或offset > sourceIndexes.length - VLENGTH- 参见:
-
shuffleFromOp
从应用于范围[0..VLENGTH-1]的运算符的连续值中为该物种创建随机播放。对于每个随机通道,其中
N是随机通道索引,第N个索引值针对物种VLENGTH进行验证,并且(如果无效)部分包装到范围[-VLENGTH..-1]中的异常索引。应注意确保将此方法生成的
VectorShuffle值作为常量使用,以确保代码的最佳生成。例如,洗牌值可以保存在static final字段或循环不变的局部变量中。此方法的行为就像从映射索引数组创建随机播放一样,如下所示:
int[] a = new int[VLENGTH]; for (int i = 0; i < a.length; i++) { a[i] = fn.applyAsInt(i); } return VectorShuffle.fromArray(this, a, 0);- 参数:
fn- 车道索引映射函数- 返回:
- 映射索引的洗牌
- 参见:
-
iotaShuffle
使用设置为从start开始并按给定的step步进的顺序值的源索引创建随机播放。此方法返回表达式
VectorSpecies.shuffleFromOp(i -> R(start + i * step))的值,其中如果wrap为真,则R为wrapIndex,否则为恒等函数。如果
wrap为假,则每个索引都针对物种VLENGTH进行验证,并且(如果无效)部分包装到[-VLENGTH..-1]范围内的异常索引。否则,如果wrap为真,也将每个索引减少到有效范围[0..VLENGTH-1],就像减少wrapIndex一样。- API 注意:
-
如果应包装无效的源索引,
wrap参数应设置为true。否则,将其设置为false允许无效的源索引由以后的操作(例如unary rearrange)进行范围检查。 - 参数:
start- 源索引序列的起始值,通常为0step- 相邻源索引之间的差异,通常为1wrap- 是否以VLENGTH为模包装结果索引- 返回:
- 顺序车道索引的洗牌
- 参见:
-
toString
String toString() -
equals
指示此物种是否与其他某个对象相同。只有当两个物种具有相同的形状和相同的元素类型时,它们才是相同的。 -
hashCode
int hashCode()根据矢量形状和元素类型返回物种的哈希码值。
-
VectorSpecies。