Class ShortVector
public abstract class ShortVector extends Vector<E>
Vector
representing an ordered immutable sequence of short
values.Field Summary
Modifier and Type | Field | Description |
---|---|---|
static final VectorSpecies<Short> |
SPECIES_128 |
Species representing ShortVector s of VectorShape.S_128_BIT . |
static final VectorSpecies<Short> |
SPECIES_256 |
Species representing ShortVector s of VectorShape.S_256_BIT . |
static final VectorSpecies<Short> |
SPECIES_512 |
Species representing ShortVector s of VectorShape.S_512_BIT . |
static final VectorSpecies<Short> |
SPECIES_64 |
Species representing ShortVector s of VectorShape.S_64_BIT . |
static final VectorSpecies<Short> |
SPECIES_MAX |
Species representing ShortVector s of VectorShape.S_Max_BIT . |
static final VectorSpecies<Short> |
SPECIES_PREFERRED |
Preferred species for ShortVector s. |
Method Summary
Modifier and Type | Method | Description |
---|---|---|
final ShortVector |
abs() |
Returns the absolute value of this vector. |
final ShortVector |
add |
Adds this vector to the broadcast of an input scalar. |
final ShortVector |
add |
Adds this vector to the broadcast of an input scalar, selecting lane elements controlled by a mask. |
final ShortVector |
add |
Adds this vector to a second input vector. |
final ShortVector |
add |
Adds this vector to a second input vector, selecting lanes under the control of a mask. |
abstract ShortVector |
addIndex |
Adds the lanes of this vector to their corresponding lane numbers, scaled by a given constant. |
final ShortVector |
and |
Computes the bitwise logical conjunction ( & ) of this vector and a scalar. |
final ShortVector |
and |
Computes the bitwise logical conjunction ( & ) of this vector and a second input vector. |
final ShortVector |
bitwiseBlend |
Blends together the bits of a vector and a scalar under the control of another scalar, which supplies mask bits. |
final ShortVector |
bitwiseBlend |
Blends together the bits of a vector and a scalar under the control of another vector, which supplies mask bits. |
final ShortVector |
bitwiseBlend |
Blends together the bits of two vectors under the control of a scalar, which supplies mask bits. |
final ShortVector |
bitwiseBlend |
Blends together the bits of two vectors under the control of a third, which supplies mask bits. |
final ShortVector |
blend |
Replaces selected lanes of this vector with a scalar value under the control of a mask. |
final ShortVector |
blend |
Replaces selected lanes of this vector with a scalar value under the control of a mask. |
abstract ShortVector |
blend |
Replaces selected lanes of this vector with corresponding lanes from a second input vector under the control of a mask. |
abstract ShortVector |
broadcast |
Returns a vector of the same species as this one where all lane elements are set to the primitive value e . |
abstract ShortVector |
broadcast |
Returns a vector of the same species as this one where all lane elements are set to the primitive value e . |
static ShortVector |
broadcast |
Returns a vector of the given species where all lane elements are set to the primitive value e . |
static ShortVector |
broadcast |
Returns a vector of the given species where all lane elements are set to the primitive value e . |
final <F> Vector<F> |
castShape |
Convenience method for converting a vector from one lane type to another, reshaping as needed when lane sizes change. |
final <F> Vector<F> |
check |
Checks that this vector has the given element type, and returns this vector unchanged. |
final <F> Vector<F> |
check |
Checks that this vector has the given species, and returns this vector unchanged. |
abstract VectorMask<Short> |
compare |
Tests this vector by comparing it with an input scalar, according to the given comparison operation. |
final VectorMask<Short> |
compare |
Tests this vector by comparing it with an input scalar, according to the given comparison operation, in lanes selected by a mask. |
abstract VectorMask<Short> |
compare |
Tests this vector by comparing it with an input scalar, according to the given comparison operation. |
final VectorMask<Short> |
compare |
Tests this vector by comparing it with an input scalar, according to the given comparison operation, in lanes selected by a mask. |
abstract VectorMask<Short> |
compare |
Tests this vector by comparing it with another input vector, according to the given comparison operation. |
final VectorMask<Short> |
compare |
Tests this vector by comparing it with another input vector, according to the given comparison operation, in lanes selected by a mask. |
final <F> Vector<F> |
convert |
Convert this vector to a vector of the same shape and a new element type, converting lane values from the current ETYPE to a new lane type (called FTYPE here) according to the indicated conversion. |
abstract <F> Vector<F> |
convertShape |
Converts this vector to a vector of the given species, shape and element type, converting lane values from the current ETYPE to a new lane type (called FTYPE here) according to the indicated conversion. |
final ShortVector |
div |
Divides this vector by the broadcast of an input scalar. |
final ShortVector |
div |
Divides this vector by the broadcast of an input scalar, selecting lane elements controlled by a mask. |
final ShortVector |
div |
Divides this vector by a second input vector. |
final ShortVector |
div |
Divides this vector by a second input vector under the control of a mask. |
final VectorMask<Short> |
eq |
Tests if this vector is equal to an input scalar. |
final VectorMask<Short> |
eq |
Tests if this vector is equal to another input vector. |
final boolean |
equals |
Indicates whether this vector is identical to some other object. |
static ShortVector |
fromArray |
Loads a vector from an array of type short[] starting at an offset. |
static ShortVector |
fromArray |
Gathers a new vector composed of elements from an array of type short[] , using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
static ShortVector |
fromArray |
Gathers a new vector composed of elements from an array of type short[] , under the control of a mask, and using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
static ShortVector |
fromArray |
Loads a vector from an array of type short[] starting at an offset and using a mask. |
static ShortVector |
fromByteArray |
Loads a vector from a byte array starting at an offset. |
static ShortVector |
fromByteArray |
Loads a vector from a byte array starting at an offset and using a mask. |
static ShortVector |
fromByteBuffer |
Loads a vector from a byte buffer starting at an offset into the byte buffer. |
static ShortVector |
fromByteBuffer |
Loads a vector from a byte buffer starting at an offset into the byte buffer and using a mask. |
static ShortVector |
fromCharArray |
Loads a vector from an array of type char[] starting at an offset. |
static ShortVector |
fromCharArray |
Gathers a new vector composed of elements from an array of type char[] , using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
static ShortVector |
fromCharArray |
Gathers a new vector composed of elements from an array of type char[] , under the control of a mask, and using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
static ShortVector |
fromCharArray |
Loads a vector from an array of type char[] starting at an offset and using a mask. |
final int |
hashCode() |
Returns a hash code value for the vector. |
final void |
intoArray |
Stores this vector into an array of type short[] starting at an offset. |
final void |
intoArray |
Scatters this vector into an array of type short[] using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
final void |
intoArray |
Scatters this vector into an array of type short[] , under the control of a mask, and using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
final void |
intoArray |
Stores this vector into an array of type short[] starting at offset and using a mask. |
final void |
intoByteArray |
Stores this vector into a byte array starting at an offset using explicit byte order. |
final void |
intoByteArray |
Stores this vector into a byte array starting at an offset using explicit byte order and a mask. |
final void |
intoByteBuffer |
Stores this vector into a byte buffer starting at an offset using explicit byte order. |
final void |
intoByteBuffer |
Stores this vector into a byte buffer starting at an offset using explicit byte order and a mask. |
final void |
intoCharArray |
Stores this vector into an array of type char[] starting at an offset. |
final void |
intoCharArray |
Scatters this vector into an array of type char[] using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
final void |
intoCharArray |
Scatters this vector into an array of type char[] , under the control of a mask, and using indexes obtained by adding a fixed offset to a series of secondary offsets from an index map. |
final void |
intoCharArray |
Stores this vector into an array of type char[] starting at offset and using a mask. |
abstract short |
lane |
Gets the lane element at lane index i
|
final ShortVector |
lanewise |
Combines the lane values of this vector with the value of a broadcast scalar. |
final ShortVector |
lanewise |
Combines the corresponding lane values of this vector with those of a second input vector, with selection of lane elements controlled by a mask. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the value of a broadcast scalar. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the value of a broadcast scalar, with selection of lane elements controlled by a mask. |
abstract ShortVector |
lanewise |
Combines the corresponding lane values of this vector with those of a second input vector. |
final ShortVector |
lanewise |
Combines the corresponding lane values of this vector with those of a second input vector, with selection of lane elements controlled by a mask. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the values of two broadcast scalars. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the values of two broadcast scalars, with selection of lane elements controlled by a mask. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the values of another vector and a broadcast scalar. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the values of another vector and a broadcast scalar, with selection of lane elements controlled by a mask. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the values of another vector and a broadcast scalar. |
final ShortVector |
lanewise |
Combines the lane values of this vector with the values of another vector and a broadcast scalar, with selection of lane elements controlled by a mask. |
abstract ShortVector |
lanewise |
Combines the corresponding lane values of this vector with the lanes of a second and a third input vector. |
final ShortVector |
lanewise |
Combines the corresponding lane values of this vector with the lanes of a second and a third input vector, with selection of lane elements controlled by a mask. |
abstract ShortVector |
lanewise |
Operates on the lane values of this vector. |
final ShortVector |
lanewise |
Operates on the lane values of this vector, with selection of lane elements controlled by a mask. |
final VectorMask<Short> |
lt |
Tests if this vector is less than an input scalar. |
final VectorMask<Short> |
lt |
Tests if this vector is less than another input vector. |
final VectorMask<Short> |
maskAll |
Returns a mask of same species as this vector, where each lane is set or unset according to given single boolean, which is broadcast to all lanes. |
final ShortVector |
max |
Computes the larger of this vector and the broadcast of an input scalar. |
final ShortVector |
max |
Computes the larger of this vector and a second input vector. |
final ShortVector |
min |
Computes the smaller of this vector and the broadcast of an input scalar. |
final ShortVector |
min |
Computes the smaller of this vector and a second input vector. |
final ShortVector |
mul |
Multiplies this vector by the broadcast of an input scalar. |
final ShortVector |
mul |
Multiplies this vector by the broadcast of an input scalar, selecting lane elements controlled by a mask. |
final ShortVector |
mul |
Multiplies this vector by a second input vector. |
final ShortVector |
mul |
Multiplies this vector by a second input vector under the control of a mask. |
final ShortVector |
neg() |
Negates this vector. |
final ShortVector |
not() |
Computes the bitwise logical complement ( ~ ) of this vector. |
final ShortVector |
or |
Computes the bitwise logical disjunction ( | ) of this vector and a scalar. |
final ShortVector |
or |
Computes the bitwise logical disjunction ( | ) of this vector and a second input vector. |
abstract ShortVector |
rearrange |
Rearranges the lane elements of this vector, selecting lanes under the control of a specific shuffle. |
abstract ShortVector |
rearrange |
Rearranges the lane elements of two vectors, selecting lanes under the control of a specific shuffle, using both normal and exceptional indexes in the shuffle to steer data. |
abstract ShortVector |
rearrange |
Rearranges the lane elements of this vector, selecting lanes under the control of a specific shuffle and a mask. |
abstract short |
reduceLanes |
Returns a value accumulated from all the lanes of this vector. |
abstract short |
reduceLanes |
Returns a value accumulated from selected lanes of this vector, controlled by a mask. |
final ByteVector |
reinterpretAsBytes() |
Views this vector as a vector of the same shape and contents but a lane type of byte , where the bytes are extracted from the lanes according to little-endian order. |
DoubleVector |
reinterpretAsDoubles() |
Reinterprets this vector as a vector of the same shape and contents but a lane type of double , where the lanes are assembled from successive bytes according to little-endian order. |
FloatVector |
reinterpretAsFloats() |
Reinterprets this vector as a vector of the same shape and contents but a lane type of float , where the lanes are assembled from successive bytes according to little-endian order. |
IntVector |
reinterpretAsInts() |
Reinterprets this vector as a vector of the same shape and contents but a lane type of int , where the lanes are assembled from successive bytes according to little-endian order. |
LongVector |
reinterpretAsLongs() |
Reinterprets this vector as a vector of the same shape and contents but a lane type of long , where the lanes are assembled from successive bytes according to little-endian order. |
ShortVector |
reinterpretAsShorts() |
Reinterprets this vector as a vector of the same shape and contents but a lane type of short , where the lanes are assembled from successive bytes according to little-endian order. |
abstract ShortVector |
selectFrom |
Using index values stored in the lanes of this vector, assemble values stored in second vector v . |
abstract ShortVector |
selectFrom |
Using index values stored in the lanes of this vector, assemble values stored in second vector, under the control of a mask. |
abstract ShortVector |
slice |
Slices a segment of adjacent lanes, starting at a given origin lane in the current vector. |
abstract ShortVector |
slice |
Slices a segment of adjacent lanes, starting at a given origin lane in the current vector, and continuing (as needed) into an immediately following vector. |
final ShortVector |
slice |
Slices a segment of adjacent lanes under the control of a mask, starting at a given origin lane in the current vector, and continuing (as needed) into an immediately following vector. |
final VectorSpecies<Short> |
species() |
Returns the species of this vector. |
final ShortVector |
sub |
Subtracts an input scalar from this vector. |
final ShortVector |
sub |
Subtracts an input scalar from this vector under the control of a mask. |
final ShortVector |
sub |
Subtracts a second input vector from this vector. |
final ShortVector |
sub |
Subtracts a second input vector from this vector under the control of a mask. |
abstract VectorMask<Short> |
test |
Tests the lanes of this vector according to the given operation. |
final VectorMask<Short> |
test |
Test selected lanes of this vector, according to the given operation. |
final short[] |
toArray() |
Returns an array of type short[] containing all the lane values. |
final double[] |
toDoubleArray() |
Returns a double[] array containing all the lane values, converted to the type double . |
final int[] |
toIntArray() |
Returns an int[] array containing all the lane values, converted to the type int . |
final long[] |
toLongArray() |
Returns a long[] array containing all the lane values, converted to the type long . |
final String |
toString() |
Returns a string representation of this vector, of the form "[0,1,2...]" , reporting the lane values of this vector, in lane order. |
abstract ShortVector |
unslice |
Reverses a slice(), inserting the current vector as a slice within a "background" input of zero lane values. |
abstract ShortVector |
unslice |
Reverses a slice(), inserting the current vector as a slice within another "background" input vector, which is regarded as one or the other input to a hypothetical subsequent slice() operation. |
abstract ShortVector |
unslice |
Reverses a slice(), inserting (under the control of a mask) the current vector as a slice within another "background" input vector, which is regarded as one or the other input to a hypothetical subsequent slice() operation. |
final Vector<?> |
viewAsFloatingLanes() |
Views this vector as a vector of the same shape, length, and contents, but a lane type that is a floating-point type. |
final ShortVector |
viewAsIntegralLanes() |
Views this vector as a vector of the same shape, length, and contents, but a lane type that is not a floating-point type. |
abstract ShortVector |
withLane |
Replaces the lane element of this vector at lane index i with value e . |
static ShortVector |
zero |
Returns a vector of the given species where all lane elements are set to zero, the default primitive value. |
Methods declared in class jdk.incubator.vector.Vector
bitSize, byteSize, elementSize, elementType, length, reduceLanesToLong, reduceLanesToLong, reinterpretShape, shape, toShuffle
Methods declared in class jdk.internal.vm.vector.VectorSupport.VectorPayload
getPayload
Field Details
SPECIES_64
public static final VectorSpecies<Short> SPECIES_64
ShortVector
s of VectorShape.S_64_BIT
.SPECIES_128
public static final VectorSpecies<Short> SPECIES_128
ShortVector
s of VectorShape.S_128_BIT
.SPECIES_256
public static final VectorSpecies<Short> SPECIES_256
ShortVector
s of VectorShape.S_256_BIT
.SPECIES_512
public static final VectorSpecies<Short> SPECIES_512
ShortVector
s of VectorShape.S_512_BIT
.SPECIES_MAX
public static final VectorSpecies<Short> SPECIES_MAX
ShortVector
s of VectorShape.S_Max_BIT
.SPECIES_PREFERRED
public static final VectorSpecies<Short> SPECIES_PREFERRED
ShortVector
s. A preferred species is a species of maximal bit-size for the platform.Method Details
zero
public static ShortVector zero(VectorSpecies<Short> species)
- Parameters:
-
species
- species of the desired zero vector - Returns:
- a zero vector
broadcast
public abstract ShortVector broadcast(short e)
e
. The contents of the current vector are discarded; only the species is relevant to this operation. This method returns the value of this expression: ShortVector.broadcast(this.species(), e)
.
- API Note:
- Unlike the similar method named
broadcast()
in the supertypeVector
, this method does not need to validate its argument, and cannot throwIllegalArgumentException
. This method is therefore preferable to the supertype method. - Parameters:
-
e
- the value to broadcast - Returns:
- a vector where all lane elements are set to the primitive value
e
- See Also:
broadcast
public static ShortVector broadcast(VectorSpecies<Short> species, short e)
e
.- Parameters:
-
species
- species of the desired vector -
e
- the value to broadcast - Returns:
- a vector where all lane elements are set to the primitive value
e
- See Also:
broadcast
public abstract ShortVector broadcast(long e)
e
. The contents of the current vector are discarded; only the species is relevant to this operation. This method returns the value of this expression: EVector.broadcast(this.species(), (ETYPE)e)
, where EVector
is the vector class specific to this vector's element type ETYPE
.
The long
value e
must be accurately representable by the ETYPE
of this vector's species, so that e==(long)(ETYPE)e
. If this rule is violated the problem is not detected statically, but an IllegalArgumentException
is thrown at run-time. Thus, this method somewhat weakens the static type checking of immediate constants and other scalars, but it makes up for this by improving the expressiveness of the generic API. Note that an e
value in the range [-128..127]
is always acceptable, since every ETYPE
will accept every byte
value.
- Specified by:
-
broadcast
in classVector<Short>
- API Note:
- When working with vector subtypes like
ShortVector
, the more strongly typed method is typically selected. It can be explicitly selected using a cast:v.broadcast((short)e)
. The two expressions will produce numerically identical results. - Parameters:
-
e
- the value to broadcast - Returns:
- a vector where all lane elements are set to the primitive value
e
- See Also:
broadcast
public static ShortVector broadcast(VectorSpecies<Short> species, long e)
e
. The long
value must be accurately representable by the ETYPE
of the vector species, so that e==(long)(ETYPE)e
.- Parameters:
-
species
- species of the desired vector -
e
- the value to broadcast - Returns:
- a vector where all lane elements are set to the primitive value
e
- Throws:
-
IllegalArgumentException
- if the givenlong
value cannot be represented by the vector'sETYPE
- See Also:
lanewise
public abstract ShortVector lanewise(VectorOperators.Unary op)
lanewise
public final ShortVector lanewise(VectorOperators.Unary op, VectorMask<Short> m)
lanewise
public abstract ShortVector lanewise(VectorOperators.Binary op, Vector<Short> v)
lanewise
public final ShortVector lanewise(VectorOperators.Binary op, Vector<Short> v, VectorMask<Short> m)
lanewise
public final ShortVector lanewise(VectorOperators.Binary op, short e)
this.lanewise(op, this.broadcast(e))
.- Parameters:
-
op
- the operation used to process lane values -
e
- the input scalar - Returns:
- the result of applying the operation lane-wise to the two input vectors
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Binary op, short e, VectorMask<Short> m)
this.lanewise(op, this.broadcast(e), m)
.- Parameters:
-
op
- the operation used to process lane values -
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of applying the operation lane-wise to the input vector and the scalar
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Binary op, long e)
this.lanewise(op, this.broadcast(e))
. - Specified by:
-
lanewise
in classVector<Short>
- API Note:
- When working with vector subtypes like
ShortVector
, the more strongly typed method is typically selected. It can be explicitly selected using a cast:v.lanewise(op,(short)e)
. The two expressions will produce numerically identical results. - Parameters:
-
op
- the operation used to combine lane values -
e
- the input scalar - Returns:
- the result of applying the operation lane-wise to the input vector and the scalar
- See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Binary op, long e, VectorMask<Short> m)
this.lanewise(op, this.broadcast(e), m)
. - Specified by:
-
lanewise
in classVector<Short>
- API Note:
- When working with vector subtypes like
ShortVector
, the more strongly typed method is typically selected. It can be explicitly selected using a cast:v.lanewise(op,(short)e,m)
. The two expressions will produce numerically identical results. - Parameters:
-
op
- the operation used to combine lane values -
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of applying the operation lane-wise to the input vector and the scalar
- See Also:
lanewise
public abstract ShortVector lanewise(VectorOperators.Ternary op, Vector<Short> v1, Vector<Short> v2)
- Specified by:
-
lanewise
in classVector<Short>
- Parameters:
-
op
- the operation used to combine lane values -
v1
- the second input vector -
v2
- the third input vector - Returns:
- the result of applying the operation lane-wise to the three input vectors
- See Also:
-
lanewise(VectorOperators.Ternary,short,short,VectorMask)
lanewise(VectorOperators.Ternary,Vector,short,VectorMask)
lanewise(VectorOperators.Ternary,short,Vector,VectorMask)
lanewise(VectorOperators.Ternary,short,short)
lanewise(VectorOperators.Ternary,Vector,short)
lanewise(VectorOperators.Ternary,short,Vector)
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, Vector<Short> v1, Vector<Short> v2, VectorMask<Short> m)
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, short e1, short e2)
this.lanewise(op, this.broadcast(e1), this.broadcast(e2))
.- Parameters:
-
op
- the operation used to combine lane values -
e1
- the first input scalar -
e2
- the second input scalar - Returns:
- the result of applying the operation lane-wise to the input vector and the scalars
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, short e1, short e2, VectorMask<Short> m)
this.lanewise(op, this.broadcast(e1), this.broadcast(e2), m)
.- Parameters:
-
op
- the operation used to combine lane values -
e1
- the first input scalar -
e2
- the second input scalar -
m
- the mask controlling lane selection - Returns:
- the result of applying the operation lane-wise to the input vector and the scalars
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, Vector<Short> v1, short e2)
this.lanewise(op, v1, this.broadcast(e2))
.- Parameters:
-
op
- the operation used to combine lane values -
v1
- the other input vector -
e2
- the input scalar - Returns:
- the result of applying the operation lane-wise to the input vectors and the scalar
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, Vector<Short> v1, short e2, VectorMask<Short> m)
this.lanewise(op, v1, this.broadcast(e2), m)
.- Parameters:
-
op
- the operation used to combine lane values -
v1
- the other input vector -
e2
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of applying the operation lane-wise to the input vectors and the scalar
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, short e1, Vector<Short> v2)
this.lanewise(op, this.broadcast(e1), v2)
.- Parameters:
-
op
- the operation used to combine lane values -
e1
- the input scalar -
v2
- the other input vector - Returns:
- the result of applying the operation lane-wise to the input vectors and the scalar
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lanewise
public final ShortVector lanewise(VectorOperators.Ternary op, short e1, Vector<Short> v2, VectorMask<Short> m)
this.lanewise(op, this.broadcast(e1), v2, m)
.- Parameters:
-
op
- the operation used to combine lane values -
e1
- the input scalar -
v2
- the other input vector -
m
- the mask controlling lane selection - Returns:
- the result of applying the operation lane-wise to the input vectors and the scalar
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
add
public final ShortVector add(Vector<Short> v)
+
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
ADD
, v)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
add
public final ShortVector add(short e)
+
) to each lane. This method is also equivalent to the expression lanewise
(
ADD
, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the result of adding each lane of this vector to the scalar
- See Also:
add
public final ShortVector add(Vector<Short> v, VectorMask<Short> m)
+
) to each pair of corresponding lane values. For any lane unset in the mask, the primitive operation is suppressed and this vector retains the original value stored in that lane. This method is also equivalent to the expression lanewise
(
ADD
, v, m)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
add
public final ShortVector add(short e, VectorMask<Short> m)
+
) to each lane. This method is also equivalent to the expression lanewise
(
ADD
, s, m)
.- Parameters:
-
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of adding each lane of this vector to the scalar
- See Also:
sub
public final ShortVector sub(Vector<Short> v)
-
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
SUB
, v)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
sub
public final ShortVector sub(short e)
-
) to each lane. This method is also equivalent to the expression lanewise
(
SUB
, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the result of subtracting the scalar from each lane of this vector
- See Also:
sub
public final ShortVector sub(Vector<Short> v, VectorMask<Short> m)
-
) to each pair of corresponding lane values. For any lane unset in the mask, the primitive operation is suppressed and this vector retains the original value stored in that lane. This method is also equivalent to the expression lanewise
(
SUB
, v, m)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
sub
public final ShortVector sub(short e, VectorMask<Short> m)
-
) to each lane. This method is also equivalent to the expression lanewise
(
SUB
, s, m)
.- Parameters:
-
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of subtracting the scalar from each lane of this vector
- See Also:
mul
public final ShortVector mul(Vector<Short> v)
*
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
MUL
, v)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
mul
public final ShortVector mul(short e)
*
) to each lane. This method is also equivalent to the expression lanewise
(
MUL
, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the result of multiplying this vector by the given scalar
- See Also:
mul
public final ShortVector mul(Vector<Short> v, VectorMask<Short> m)
*
) to each pair of corresponding lane values. For any lane unset in the mask, the primitive operation is suppressed and this vector retains the original value stored in that lane. This method is also equivalent to the expression lanewise
(
MUL
, v, m)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
mul
public final ShortVector mul(short e, VectorMask<Short> m)
*
) to each lane. This method is also equivalent to the expression lanewise
(
MUL
, s, m)
.- Parameters:
-
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of muling each lane of this vector to the scalar
- See Also:
div
public final ShortVector div(Vector<Short> v)
/
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
DIV
, v)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
div
public final ShortVector div(short e)
/
) to each lane. This method is also equivalent to the expression lanewise
(
DIV
, e)
.- API Note:
- If there is a zero divisor,
ArithmeticException
will be thrown. - Parameters:
-
e
- the input scalar - Returns:
- the result of dividing each lane of this vector by the scalar
- See Also:
div
public final ShortVector div(Vector<Short> v, VectorMask<Short> m)
/
) to each pair of corresponding lane values. For any lane unset in the mask, the primitive operation is suppressed and this vector retains the original value stored in that lane. This method is also equivalent to the expression lanewise
(
DIV
, v, m)
. As a full-service named operation, this method comes in masked and unmasked overloadings, and (in subclasses) also comes in scalar-broadcast overloadings (both masked and unmasked).
div
public final ShortVector div(short e, VectorMask<Short> m)
/
) to each lane. This method is also equivalent to the expression lanewise
(
DIV
, s, m)
.- API Note:
- If there is a zero divisor,
ArithmeticException
will be thrown. - Parameters:
-
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the result of dividing each lane of this vector by the scalar
- See Also:
min
public final ShortVector min(Vector<Short> v)
Math.min()
to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
MIN
, v)
. min
public final ShortVector min(short e)
Math.min()
to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
MIN
, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the result of multiplying this vector by the given scalar
- See Also:
max
public final ShortVector max(Vector<Short> v)
Math.max()
to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
MAX
, v)
. This is not a full-service named operation like add()
. A masked version of this operation is not directly available but may be obtained via the masked version of lanewise
. Subclasses define an additional scalar-broadcast overloading of this method.
max
public final ShortVector max(short e)
Math.max()
to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
MAX
, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the result of multiplying this vector by the given scalar
- See Also:
and
public final ShortVector and(Vector<Short> v)
&
) of this vector and a second input vector. This is a lane-wise binary operation which applies the the primitive bitwise "and" operation (&
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
AND
, v)
. This is not a full-service named operation like add
. A masked version of this operation is not directly available but may be obtained via the masked version of lanewise
.
- Parameters:
-
v
- a second input vector - Returns:
- the bitwise
&
of this vector and the second input vector - See Also:
and
public final ShortVector and(short e)
&
) of this vector and a scalar. This is a lane-wise binary operation which applies the the primitive bitwise "and" operation (&
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
AND
, e)
.- Parameters:
-
e
- an input scalar - Returns:
- the bitwise
&
of this vector and scalar - See Also:
or
public final ShortVector or(Vector<Short> v)
|
) of this vector and a second input vector. This is a lane-wise binary operation which applies the the primitive bitwise "or" operation (|
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
AND
, v)
. This is not a full-service named operation like add
. A masked version of this operation is not directly available but may be obtained via the masked version of lanewise
.
- Parameters:
-
v
- a second input vector - Returns:
- the bitwise
|
of this vector and the second input vector - See Also:
or
public final ShortVector or(short e)
|
) of this vector and a scalar. This is a lane-wise binary operation which applies the the primitive bitwise "or" operation (|
) to each pair of corresponding lane values. This method is also equivalent to the expression lanewise
(
OR
, e)
.- Parameters:
-
e
- an input scalar - Returns:
- the bitwise
|
of this vector and scalar - See Also:
neg
public final ShortVector neg()
-x
) to each input lane. This method is also equivalent to the expression lanewise
(
NEG
)
. abs
public final ShortVector abs()
Math.abs
to each input lane. This method is also equivalent to the expression lanewise
(
ABS
)
. not
public final ShortVector not()
~
) of this vector. This is a lane-wise binary operation which applies the the primitive bitwise "not" operation (~
) to each lane value. This method is also equivalent to the expression lanewise
(
NOT
)
. This is not a full-service named operation like add
. A masked version of this operation is not directly available but may be obtained via the masked version of lanewise
.
- Returns:
- the bitwise complement
~
of this vector - See Also:
eq
public final VectorMask<Short> eq(Vector<Short> v)
==
) to each pair of corresponding lane values. The result is the same as compare(VectorOperators.EQ, v)
. eq
public final VectorMask<Short> eq(short e)
==
) to each lane. The result is the same as compare(VectorOperators.Comparison.EQ, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the result mask of testing if this vector is equal to
e
- See Also:
lt
public final VectorMask<Short> lt(Vector<Short> v)
<
) to each lane. The result is the same as compare(VectorOperators.LT, v)
. lt
public final VectorMask<Short> lt(short e)
<
) to each lane. The result is the same as compare(VectorOperators.LT, e)
.- Parameters:
-
e
- the input scalar - Returns:
- the mask result of testing if this vector is less than the input scalar
- See Also:
test
public abstract VectorMask<Short> test(VectorOperators.Test op)
test
public final VectorMask<Short> test(VectorOperators.Test op, VectorMask<Short> m)
test(op).and(m)
. compare
public abstract VectorMask<Short> compare(VectorOperators.Comparison op, Vector<Short> v)
compare
public final VectorMask<Short> compare(VectorOperators.Comparison op, Vector<Short> v, VectorMask<Short> m)
compare(op,v).and(m)
. - Specified by:
-
compare
in classVector<Short>
- Parameters:
-
op
- the operation used to compare lane values -
v
- a second input vector -
m
- the mask controlling lane selection - Returns:
- the mask result of testing lane-wise if this vector compares to the input, according to the selected comparison operator, and only in the lanes selected by the mask
- See Also:
compare
public abstract VectorMask<Short> compare(VectorOperators.Comparison op, short e)
The result is the same as compare(op, broadcast(species(), e))
. That is, the scalar may be regarded as broadcast to a vector of the same species, and then compared against the original vector, using the selected comparison operation.
- Parameters:
-
op
- the operation used to compare lane values -
e
- the input scalar - Returns:
- the mask result of testing lane-wise if this vector compares to the input, according to the selected comparison operator
- See Also:
compare
public final VectorMask<Short> compare(VectorOperators.Comparison op, short e, VectorMask<Short> m)
compare(op,s).and(m)
.- Parameters:
-
op
- the operation used to compare lane values -
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the mask result of testing lane-wise if this vector compares to the input, according to the selected comparison operator, and only in the lanes selected by the mask
- See Also:
compare
public abstract VectorMask<Short> compare(VectorOperators.Comparison op, long e)
The result is the same as this.compare(op, this.broadcast(e))
. That is, the scalar may be regarded as broadcast to a vector of the same species, and then compared against the original vector, using the selected comparison operation.
compare
public final VectorMask<Short> compare(VectorOperators.Comparison op, long e, VectorMask<Short> m)
compare(op,e).and(m)
. - Specified by:
-
compare
in classVector<Short>
- Parameters:
-
op
- the operation used to compare lane values -
e
- the input scalar -
m
- the mask controlling lane selection - Returns:
- the mask result of testing lane-wise if this vector compares to the input, according to the selected comparison operator, and only in the lanes selected by the mask
- See Also:
blend
public abstract ShortVector blend(Vector<Short> v, VectorMask<Short> m)
- For any lane set in the mask, the new lane value is taken from the second input vector, and replaces whatever value was in the that lane of this vector.
- For any lane unset in the mask, the replacement is suppressed and this vector retains the original value stored in that lane.
Vector<E> a = ...;
VectorSpecies<E> species = a.species();
Vector<E> b = ...;
b.check(species);
VectorMask<E> m = ...;
ETYPE[] ar = a.toArray();
for (int i = 0; i < ar.length; i++) {
if (m.laneIsSet(i)) {
ar[i] = b.lane(i);
}
}
return EVector.fromArray(s, ar, 0);
addIndex
public abstract ShortVector addIndex(int scale)
N
, computes the scaled index value N*scale
and adds it to the value already in lane N
of the current vector. The scale must not be so large, and the element size must not be so small, that that there would be an overflow when computing any of the N*scale
or VLENGTH*scale
, when the the result is represented using the vector lane type ETYPE
.
The following pseudocode illustrates this behavior:
Vector<E> a = ...;
VectorSpecies<E> species = a.species();
ETYPE[] ar = a.toArray();
for (int i = 0; i < ar.length; i++) {
long d = (long)i * scale;
if (d != (ETYPE) d) throw ...;
ar[i] += (ETYPE) d;
}
long d = (long)ar.length * scale;
if (d != (ETYPE) d) throw ...;
return EVector.fromArray(s, ar, 0);
blend
public final ShortVector blend(short e, VectorMask<Short> m)
blend(broadcast(e),m)
.- Parameters:
-
e
- the input scalar, containing the replacement lane value -
m
- the mask controlling lane selection of the scalar - Returns:
- the result of blending the lane elements of this vector with the scalar value
blend
public final ShortVector blend(long e, VectorMask<Short> m)
blend(broadcast(e),m)
.slice
public abstract ShortVector slice(int origin, Vector<Short> v1)
origin
lane in the current vector, and continuing (as needed) into an immediately following vector. The block of VLENGTH
lanes is extracted into its own vector and returned. This is a cross-lane operation that shifts lane elements to the front, from the current vector and the second vector. Both vectors can be viewed as a combined "background" of length 2*VLENGTH
, from which a slice is extracted. The lane numbered N
in the output vector is copied from lane origin+N
of the input vector, if that lane exists, else from lane origin+N-VLENGTH
of the second vector (which is guaranteed to exist).
The origin
value must be in the inclusive range 0..VLENGTH
. As limiting cases, v.slice(0,w)
and v.slice(VLENGTH,w)
return v
and w
, respectively.
- Parameters:
-
origin
- the first input lane to transfer into the slice -
v1
- a second vector logically concatenated with the first, before the slice is taken (if omitted it defaults to zero) - Returns:
- a contiguous slice of
VLENGTH
lanes, taken from this vector starting at the indicated origin, and continuing (as needed) into the second vector - See Also:
slice
public final ShortVector slice(int origin, Vector<Short> w, VectorMask<Short> m)
origin
lane in the current vector, and continuing (as needed) into an immediately following vector. The block of VLENGTH
lanes is extracted into its own vector and returned. The resulting vector will be zero in all lanes unset in the given mask. Lanes set in the mask will contain data copied from selected lanes of this
or v1
. This is a cross-lane operation that shifts lane elements to the front, from the current vector and the second vector. Both vectors can be viewed as a combined "background" of length 2*VLENGTH
, from which a slice is extracted. The returned result is equal to the expression broadcast(0).blend(slice(origin,v1),m)
.
- Specified by:
-
slice
in classVector<Short>
- Parameters:
-
origin
- the first input lane to transfer into the slice -
w
- a second vector logically concatenated with the first, before the slice is taken (if omitted it defaults to zero) -
m
- the mask controlling lane selection into the resulting vector - Returns:
- a contiguous slice of
VLENGTH
lanes, taken from this vector starting at the indicated origin, and continuing (as needed) into the second vector - See Also:
slice
public abstract ShortVector slice(int origin)
origin
lane in the current vector. A block of VLENGTH
lanes, possibly padded with zero lanes, is extracted into its own vector and returned. This is a convenience method which slices from a single vector against an extended background of zero lanes. It is equivalent to slice
(origin,
broadcast
(0))
. It may also be viewed simply as a cross-lane shift from later to earlier lanes, with zeroes filling in the vacated lanes at the end of the vector. In this view, the shift count is origin
. - Parameters:
-
origin
- the first input lane to transfer into the slice - Returns:
- the last
VLENGTH-origin
input lanes, placed starting in the first lane of the ouput, padded at the end with zeroes - See Also:
unslice
public abstract ShortVector unslice(int origin, Vector<Short> w, int part)
slice()
operation. This is a cross-lane operation that permutes the lane elements of the current vector toward the back and inserts them into a logical pair of background vectors. Only one of the pair will be returned, however. The background is formed by duplicating the second input vector. (However, the output will never contain two duplicates from the same input lane.) The lane numbered N
in the input vector is copied into lane origin+N
of the first background vector, if that lane exists, else into lane origin+N-VLENGTH
of the second background vector (which is guaranteed to exist). The first or second background vector, updated with the inserted slice, is returned. The part
number of zero or one selects the first or second updated background vector.
The origin
value must be in the inclusive range 0..VLENGTH
. As limiting cases, v.unslice(0,w,0)
and v.unslice(VLENGTH,w,1)
both return v
, while v.unslice(0,w,1)
and v.unslice(VLENGTH,w,0)
both return w
.
- Specified by:
-
unslice
in classVector<Short>
- Parameters:
-
origin
- the first output lane to receive the slice -
w
- the background vector that (as two copies) will receive the inserted slice -
part
- the part number of the result (either zero or one) - Returns:
- either the first or second part of a pair of background vectors
w
, updated by inserting this vector at the indicated origin - See Also:
unslice
public abstract ShortVector unslice(int origin, Vector<Short> w, int part, VectorMask<Short> m)
slice()
operation. This is a cross-lane operation that permutes the lane elements of the current vector forward and inserts its lanes (when selected by the mask) into a logical pair of background vectors. As with the unmasked version of this method, only one of the pair will be returned, as selected by the part
number. For each lane N
selected by the mask, the lane value is copied into lane origin+N
of the first background vector, if that lane exists, else into lane origin+N-VLENGTH
of the second background vector (which is guaranteed to exist). Background lanes retain their original values if the corresponding input lanes N
are unset in the mask. The first or second background vector, updated with set lanes of the inserted slice, is returned. The part
number of zero or one selects the first or second updated background vector.
- Specified by:
-
unslice
in classVector<Short>
- Parameters:
-
origin
- the first output lane to receive the slice -
w
- the background vector that (as two copies) will receive the inserted slice, if they are set inm
-
part
- the part number of the result (either zero or one) -
m
- the mask controlling lane selection from the current vector - Returns:
- either the first or second part of a pair of background vectors
w
, updated by inserting selected lanes of this vector at the indicated origin - See Also:
unslice
public abstract ShortVector unslice(int origin)
unslice()
methods, this method only returns the first of the pair of background vectors. This is a convenience method which returns the result of unslice
(origin,
broadcast
(0), 0)
. It may also be viewed simply as a cross-lane shift from earlier to later lanes, with zeroes filling in the vacated lanes at the beginning of the vector. In this view, the shift count is origin
. rearrange
public abstract ShortVector rearrange(VectorShuffle<Short> m)
N
of the shuffle, and for each lane source index I=s.laneSource(N)
in the shuffle, the output lane N
obtains the value from the input vector at lane I
. rearrange
public abstract ShortVector rearrange(VectorShuffle<Short> s, VectorMask<Short> m)
N
of the shuffle, and for each lane source index I=s.laneSource(N)
in the shuffle, the output lane N
obtains the value from the input vector at lane I
if the mask is set. Otherwise the output lane N
is set to zero. This method returns the value of this pseudocode:
Vector<E> r = this.rearrange(s.wrapIndexes());
VectorMask<E> valid = s.laneIsValid();
if (m.andNot(valid).anyTrue()) throw ...;
return broadcast(0).blend(r, m);
rearrange
public abstract ShortVector rearrange(VectorShuffle<Short> s, Vector<Short> v)
v
). For each lane N
of the shuffle, and for each lane source index I=s.laneSource(N)
in the shuffle, the output lane N
obtains the value from the first vector at lane I
if I>=0
. Otherwise, the exceptional index I
is wrapped by adding VLENGTH
to it and used to index the second vector, at index I+VLENGTH
. This method returns the value of this pseudocode:
Vector<E> r1 = this.rearrange(s.wrapIndexes());
// or else: r1 = this.rearrange(s, s.laneIsValid());
Vector<E> r2 = v.rearrange(s.wrapIndexes());
return r2.blend(r1,s.laneIsValid());
selectFrom
public abstract ShortVector selectFrom(Vector<Short> v)
v
. The second vector thus serves as a table, whose elements are selected by indexes in the current vector. This is a cross-lane operation that rearranges the lane elements of the argument vector, under the control of this vector. For each lane N
of this vector, and for each lane value I=this.lane(N)
in this vector, the output lane N
obtains the value from the argument vector at lane I
. In this way, the result contains only values stored in the argument vector v
, but presented in an order which depends on the index values in this
. The result is the same as the expression v.rearrange(this.toShuffle())
. - Specified by:
-
selectFrom
in classVector<Short>
- Parameters:
-
v
- the vector supplying the result values - Returns:
- the rearrangement of the lane elements of
v
- See Also:
selectFrom
public abstract ShortVector selectFrom(Vector<Short> s, VectorMask<Short> m)
v
. The second vector thus serves as a table, whose elements are selected by indexes in the current vector. Lanes that are unset in the mask receive a zero rather than a value from the table. This is a cross-lane operation that rearranges the lane elements of the argument vector, under the control of this vector and the mask. The result is the same as the expression v.rearrange(this.toShuffle(), m)
. - Specified by:
-
selectFrom
in classVector<Short>
- Parameters:
-
s
- the vector supplying the result values -
m
- the mask controlling selection fromv
- Returns:
- the rearrangement of the lane elements of
v
- See Also:
bitwiseBlend
public final ShortVector bitwiseBlend(Vector<Short> bits, Vector<Short> mask)
(a&~c)|(b&c)
to each lane. This method is also equivalent to the expression lanewise
(
BITWISE_BLEND
, bits, mask)
.- Parameters:
-
bits
- input bits to blend into the current vector -
mask
- a bitwise mask to enable blending of the input bits - Returns:
- the bitwise blend of the given bits into the current vector, under control of the bitwise mask
- See Also:
bitwiseBlend
public final ShortVector bitwiseBlend(short bits, short mask)
(a&~c)|(b&c)
to each lane. This method is also equivalent to the expression lanewise
(
BITWISE_BLEND
, bits, mask)
.- Parameters:
-
bits
- input bits to blend into the current vector -
mask
- a bitwise mask to enable blending of the input bits - Returns:
- the bitwise blend of the given bits into the current vector, under control of the bitwise mask
- See Also:
bitwiseBlend
public final ShortVector bitwiseBlend(short bits, Vector<Short> mask)
(a&~c)|(b&c)
to each lane. This method is also equivalent to the expression lanewise
(
BITWISE_BLEND
, bits, mask)
.- Parameters:
-
bits
- input bits to blend into the current vector -
mask
- a bitwise mask to enable blending of the input bits - Returns:
- the bitwise blend of the given bits into the current vector, under control of the bitwise mask
- See Also:
bitwiseBlend
public final ShortVector bitwiseBlend(Vector<Short> bits, short mask)
(a&~c)|(b&c)
to each lane. This method is also equivalent to the expression lanewise
(
BITWISE_BLEND
, bits, mask)
.- Parameters:
-
bits
- input bits to blend into the current vector -
mask
- a bitwise mask to enable blending of the input bits - Returns:
- the bitwise blend of the given bits into the current vector, under control of the bitwise mask
- See Also:
reduceLanes
public abstract short reduceLanes(VectorOperators.Associative op)
A few reduction operations do not support arbitrary reordering of their operands, yet are included here because of their usefulness.
- In the case of
FIRST_NONZERO
, the reduction returns the value from the lowest-numbered non-zero lane. - All other reduction operations are fully commutative and associative. The implementation can choose any order of processing, yet it will always produce the same result.
- Parameters:
-
op
- the operation used to combine lane values - Returns:
- the accumulated result
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
reduceLanes
public abstract short reduceLanes(VectorOperators.Associative op, VectorMask<Short> m)
If no elements are selected, an operation-specific identity value is returned.
- If the operation is
ADD
,XOR
,OR
, orFIRST_NONZERO
, then the identity value is zero, the defaultshort
value. - If the operation is
MUL
, then the identity value is one. - If the operation is
AND
, then the identity value is minus one (all bits set). - If the operation is
MAX
, then the identity value isShort.MIN_VALUE
. - If the operation is
MIN
, then the identity value isShort.MAX_VALUE
.
A few reduction operations do not support arbitrary reordering of their operands, yet are included here because of their usefulness.
- In the case of
FIRST_NONZERO
, the reduction returns the value from the lowest-numbered non-zero lane. - All other reduction operations are fully commutative and associative. The implementation can choose any order of processing, yet it will always produce the same result.
- Parameters:
-
op
- the operation used to combine lane values -
m
- the mask controlling lane selection - Returns:
- the reduced result accumulated from the selected lane values
- Throws:
-
UnsupportedOperationException
- if this vector does not support the requested operation - See Also:
lane
public abstract short lane(int i)
i
- Parameters:
-
i
- the lane index - Returns:
- the lane element at lane index
i
- Throws:
-
IllegalArgumentException
- if the index is is out of range (< 0 || >= length()
)
withLane
public abstract ShortVector withLane(int i, short e)
i
with value e
. This is a cross-lane operation and behaves as if it returns the result of blending this vector with an input vector that is the result of broadcasting e
and a mask that has only one lane set at lane index i
.- Parameters:
-
i
- the lane index of the lane element to be replaced -
e
- the value to be placed - Returns:
- the result of replacing the lane element of this vector at lane index
i
with valuee
. - Throws:
-
IllegalArgumentException
- if the index is is out of range (< 0 || >= length()
)
toArray
public final short[] toArray()
short[]
containing all the lane values. The array length is the same as the vector length. The array elements are stored in lane order. This method behaves as if it stores this vector into an allocated array (using intoArray
) and returns the array as follows:
short[] a = new short[this.length()];
this.intoArray(a, 0);
return a;
toIntArray
public final int[] toIntArray()
int[]
array containing all the lane values, converted to the type int
. The array length is the same as the vector length. The array elements are converted as if by casting and stored in lane order. This operation may fail if the vector element type is
float
or double
, when lanes contain fractional or out-of-range values. If any vector lane value is not representable as an int
, an exception is thrown. - Specified by:
-
toIntArray
in classVector<Short>
- Implementation Note:
- When this method is used on used on vectors of type
ShortVector
, there will be no loss of precision or range, and so noUnsupportedOperationException
will be thrown. - Returns:
- an
int[]
array containing the lane values of this vector - See Also:
toLongArray
public final long[] toLongArray()
long[]
array containing all the lane values, converted to the type long
. The array length is the same as the vector length. The array elements are converted as if by casting and stored in lane order. This operation may fail if the vector element type is
float
or double
, when lanes contain fractional or out-of-range values. If any vector lane value is not representable as a long
, an exception is thrown. - Specified by:
-
toLongArray
in classVector<Short>
- Implementation Note:
- When this method is used on used on vectors of type
ShortVector
, there will be no loss of precision or range, and so noUnsupportedOperationException
will be thrown. - Returns:
- a
long[]
array containing the lane values of this vector - See Also:
toDoubleArray
public final double[] toDoubleArray()
double[]
array containing all the lane values, converted to the type double
. The array length is the same as the vector length. The array elements are converted as if by casting and stored in lane order. This operation can lose precision if the vector element type is long
. - Specified by:
-
toDoubleArray
in classVector<Short>
- Implementation Note:
- When this method is used on used on vectors of type
ShortVector
, there will be no loss of precision. - Returns:
- a
double[]
array containing the lane values of this vector, possibly rounded to representabledouble
values - See Also:
fromByteArray
public static ShortVector fromByteArray(VectorSpecies<Short> species, byte[] a, int offset, ByteOrder bo)
This method behaves as if it returns the result of calling fromByteBuffer()
as follows:
var bb = ByteBuffer.wrap(a);
var m = species.maskAll(true);
return fromByteBuffer(species, bb, offset, bo, m);
- Parameters:
-
species
- species of desired vector -
a
- the byte array -
offset
- the offset into the array -
bo
- the intended byte order - Returns:
- a vector loaded from a byte array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N*ESIZE < 0
oroffset+(N+1)*ESIZE > a.length
for any laneN
in the vector
fromByteArray
public static ShortVector fromByteArray(VectorSpecies<Short> species, byte[] a, int offset, ByteOrder bo, VectorMask<Short> m)
short
(zero). Bytes are composed into primitive lane elements according to the specified byte order. The vector is arranged into lanes according to memory ordering. This method behaves as if it returns the result of calling fromByteBuffer()
as follows:
var bb = ByteBuffer.wrap(a);
return fromByteBuffer(species, bb, offset, bo, m);
- Parameters:
-
species
- species of desired vector -
a
- the byte array -
offset
- the offset into the array -
bo
- the intended byte order -
m
- the mask controlling lane selection - Returns:
- a vector loaded from a byte array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N*ESIZE < 0
oroffset+(N+1)*ESIZE > a.length
for any laneN
in the vector where the mask is set
fromArray
public static ShortVector fromArray(VectorSpecies<Short> species, short[] a, int offset)
short[]
starting at an offset. For each vector lane, where N
is the vector lane index, the array element at index offset + N
is placed into the resulting vector at lane index N
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array - Returns:
- the vector loaded from an array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector
fromArray
public static ShortVector fromArray(VectorSpecies<Short> species, short[] a, int offset, VectorMask<Short> m)
short[]
starting at an offset and using a mask. Lanes where the mask is unset are filled with the default value of short
(zero). For each vector lane, where N
is the vector lane index, if the mask lane at index N
is set then the array element at index offset + N
is placed into the resulting vector at lane index N
, otherwise the default element value is placed into the resulting vector at lane index N
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array -
m
- the mask controlling lane selection - Returns:
- the vector loaded from an array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector where the mask is set
fromArray
public static ShortVector fromArray(VectorSpecies<Short> species, short[] a, int offset, int[] indexMap, int mapOffset)
short[]
, using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, the lane is loaded from the array element a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
.
- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array, may be negative if relative indexes in the index map compensate to produce a value within the array bounds -
indexMap
- the index map -
mapOffset
- the offset into the index map - Returns:
- the vector loaded from the indexed elements of the array
- Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector - See Also:
fromArray
public static ShortVector fromArray(VectorSpecies<Short> species, short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m)
short[]
, under the control of a mask, and using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, if the lane is set in the mask, the lane is loaded from the array element a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
. Unset lanes in the resulting vector are set to zero.
- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array, may be negative if relative indexes in the index map compensate to produce a value within the array bounds -
indexMap
- the index map -
mapOffset
- the offset into the index map -
m
- the mask controlling lane selection - Returns:
- the vector loaded from the indexed elements of the array
- Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector where the mask is set - See Also:
fromCharArray
public static ShortVector fromCharArray(VectorSpecies<Short> species, char[] a, int offset)
char[]
starting at an offset. For each vector lane, where N
is the vector lane index, the array element at index offset + N
is first cast to a short
value and then placed into the resulting vector at lane index N
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array - Returns:
- the vector loaded from an array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector
fromCharArray
public static ShortVector fromCharArray(VectorSpecies<Short> species, char[] a, int offset, VectorMask<Short> m)
char[]
starting at an offset and using a mask. Lanes where the mask is unset are filled with the default value of short
(zero). For each vector lane, where N
is the vector lane index, if the mask lane at index N
is set then the array element at index offset + N
is first cast to a short
value and then placed into the resulting vector at lane index N
, otherwise the default element value is placed into the resulting vector at lane index N
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array -
m
- the mask controlling lane selection - Returns:
- the vector loaded from an array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector where the mask is set
fromCharArray
public static ShortVector fromCharArray(VectorSpecies<Short> species, char[] a, int offset, int[] indexMap, int mapOffset)
char[]
, using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, the lane is loaded from the expression (short) a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
.
- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array, may be negative if relative indexes in the index map compensate to produce a value within the array bounds -
indexMap
- the index map -
mapOffset
- the offset into the index map - Returns:
- the vector loaded from the indexed elements of the array
- Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector - See Also:
fromCharArray
public static ShortVector fromCharArray(VectorSpecies<Short> species, char[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m)
char[]
, under the control of a mask, and using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, if the lane is set in the mask, the lane is loaded from the expression (short) a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
. Unset lanes in the resulting vector are set to zero.
- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array, may be negative if relative indexes in the index map compensate to produce a value within the array bounds -
indexMap
- the index map -
mapOffset
- the offset into the index map -
m
- the mask controlling lane selection - Returns:
- the vector loaded from the indexed elements of the array
- Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector where the mask is set - See Also:
fromByteBuffer
public static ShortVector fromByteBuffer(VectorSpecies<Short> species, ByteBuffer bb, int offset, ByteOrder bo)
This method behaves as if it returns the result of calling fromByteBuffer()
as follows:
var m = species.maskAll(true);
return fromByteBuffer(species, bb, offset, bo, m);
- Parameters:
-
species
- species of desired vector -
bb
- the byte buffer -
offset
- the offset into the byte buffer -
bo
- the intended byte order - Returns:
- a vector loaded from a byte buffer
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N*2 < 0
oroffset+N*2 >= bb.limit()
for any laneN
in the vector
fromByteBuffer
public static ShortVector fromByteBuffer(VectorSpecies<Short> species, ByteBuffer bb, int offset, ByteOrder bo, VectorMask<Short> m)
short
(zero). Bytes are composed into primitive lane elements according to the specified byte order. The vector is arranged into lanes according to memory ordering. The following pseudocode illustrates the behavior:
ShortBuffer eb = bb.duplicate()
.position(offset)
.order(bo).asShortBuffer();
short[] ar = new short[species.length()];
for (int n = 0; n < ar.length; n++) {
if (m.laneIsSet(n)) {
ar[n] = eb.get(n);
}
}
ShortVector r = ShortVector.fromArray(species, ar, 0);
- Implementation Note:
- This operation is likely to be more efficient if the specified byte order is the same as the platform native order, since this method will not need to reorder the bytes of lane values.
- Parameters:
-
species
- species of desired vector -
bb
- the byte buffer -
offset
- the offset into the byte buffer -
bo
- the intended byte order -
m
- the mask controlling lane selection - Returns:
- a vector loaded from a byte buffer
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N*2 < 0
oroffset+N*2 >= bb.limit()
for any laneN
in the vector where the mask is set
intoArray
public final void intoArray(short[] a, int offset)
short[]
starting at an offset. For each vector lane, where N
is the vector lane index, the lane element at index N
is stored into the array element a[offset+N]
.
- Parameters:
-
a
- the array, of typeshort[]
-
offset
- the offset into the array - Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector
intoArray
public final void intoArray(short[] a, int offset, VectorMask<Short> m)
short[]
starting at offset and using a mask. For each vector lane, where N
is the vector lane index, the lane element at index N
is stored into the array element a[offset+N]
. If the mask lane at N
is unset then the corresponding array element a[offset+N]
is left unchanged.
Array range checking is done for lanes where the mask is set. Lanes where the mask is unset are not stored and do not need to correspond to legitimate elements of a
. That is, unset lanes may correspond to array indexes less than zero or beyond the end of the array.
- Parameters:
-
a
- the array, of typeshort[]
-
offset
- the offset into the array -
m
- the mask controlling lane storage - Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector where the mask is set
intoArray
public final void intoArray(short[] a, int offset, int[] indexMap, int mapOffset)
short[]
using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, the lane element at index N
is stored into the array element a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
.
- Parameters:
-
a
- the array -
offset
- an offset to combine with the index map offsets -
indexMap
- the index map -
mapOffset
- the offset into the index map - Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector - See Also:
intoArray
public final void intoArray(short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m)
short[]
, under the control of a mask, and using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, if the mask lane at index N
is set then the lane element at index N
is stored into the array element a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
.
- Parameters:
-
a
- the array -
offset
- an offset to combine with the index map offsets -
indexMap
- the index map -
mapOffset
- the offset into the index map -
m
- the mask - Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector where the mask is set - See Also:
intoCharArray
public final void intoCharArray(char[] a, int offset)
char[]
starting at an offset. For each vector lane, where N
is the vector lane index, the lane element at index N
is first cast to a char
value and then stored into the array element a[offset+N]
.
- Parameters:
-
a
- the array, of typechar[]
-
offset
- the offset into the array - Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector
intoCharArray
public final void intoCharArray(char[] a, int offset, VectorMask<Short> m)
char[]
starting at offset and using a mask. For each vector lane, where N
is the vector lane index, the lane element at index N
is first cast to a char
value and then stored into the array element a[offset+N]
. If the mask lane at N
is unset then the corresponding array element a[offset+N]
is left unchanged.
Array range checking is done for lanes where the mask is set. Lanes where the mask is unset are not stored and do not need to correspond to legitimate elements of a
. That is, unset lanes may correspond to array indexes less than zero or beyond the end of the array.
- Parameters:
-
a
- the array, of typechar[]
-
offset
- the offset into the array -
m
- the mask controlling lane storage - Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector where the mask is set
intoCharArray
public final void intoCharArray(char[] a, int offset, int[] indexMap, int mapOffset)
char[]
using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, the lane element at index N
is first cast to a char
value and then stored into the array element a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
.
- Parameters:
-
a
- the array -
offset
- an offset to combine with the index map offsets -
indexMap
- the index map -
mapOffset
- the offset into the index map - Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector - See Also:
intoCharArray
public final void intoCharArray(char[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m)
char[]
, under the control of a mask, and using indexes obtained by adding a fixed offset
to a series of secondary offsets from an index map. The index map is a contiguous sequence of VLENGTH
elements in a second array of int
s, starting at a given mapOffset
. For each vector lane, where N
is the vector lane index, if the mask lane at index N
is set then the lane element at index N
is first cast to a char
value and then stored into the array element a[f(N)]
, where f(N)
is the index mapping expression offset + indexMap[mapOffset + N]]
.
- Parameters:
-
a
- the array -
offset
- an offset to combine with the index map offsets -
indexMap
- the index map -
mapOffset
- the offset into the index map -
m
- the mask - Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector where the mask is set - See Also:
intoByteArray
public final void intoByteArray(byte[] a, int offset, ByteOrder bo)
Bytes are extracted from primitive lane elements according to the specified byte ordering. The lanes are stored according to their memory ordering.
This method behaves as if it calls intoByteBuffer()
as follows:
var bb = ByteBuffer.wrap(a);
var m = maskAll(true);
intoByteBuffer(bb, offset, bo, m);
- Specified by:
-
intoByteArray
in classVector<Short>
- Parameters:
-
a
- the byte array -
offset
- the offset into the array -
bo
- the intended byte order
intoByteArray
public final void intoByteArray(byte[] a, int offset, ByteOrder bo, VectorMask<Short> m)
Bytes are extracted from primitive lane elements according to the specified byte ordering. The lanes are stored according to their memory ordering.
This method behaves as if it calls intoByteBuffer()
as follows:
var bb = ByteBuffer.wrap(a);
intoByteBuffer(bb, offset, bo, m);
- Specified by:
-
intoByteArray
in classVector<Short>
- Parameters:
-
a
- the byte array -
offset
- the offset into the array -
bo
- the intended byte order -
m
- the mask controlling lane selection
intoByteBuffer
public final void intoByteBuffer(ByteBuffer bb, int offset, ByteOrder bo)
Bytes are extracted from primitive lane elements according to the specified byte ordering. The lanes are stored according to their memory ordering.
This method behaves as if it calls intoByteBuffer()
as follows:
var m = maskAll(true);
intoByteBuffer(bb, offset, bo, m);
- Specified by:
-
intoByteBuffer
in classVector<Short>
- Parameters:
-
bb
- the byte buffer -
offset
- the offset into the array -
bo
- the intended byte order
intoByteBuffer
public final void intoByteBuffer(ByteBuffer bb, int offset, ByteOrder bo, VectorMask<Short> m)
Bytes are extracted from primitive lane elements according to the specified byte ordering. The lanes are stored according to their memory ordering.
The following pseudocode illustrates the behavior, where the primitive element type is not of byte
, EBuffer
is the primitive buffer type, ETYPE
is the primitive element type, and EVector
is the primitive vector type for this vector:
EBuffer eb = bb.duplicate()
.position(offset)
.order(bo).asEBuffer();
ETYPE[] a = this.toArray();
for (int n = 0; n < a.length; n++) {
if (m.laneIsSet(n)) {
eb.put(n, a[n]);
}
}
When the primitive element type is of byte
the primitive byte buffer is obtained as follows, where operation on the buffer remains the same as in the prior pseudocode:
ByteBuffer eb = bb.duplicate()
.position(offset);
- Specified by:
-
intoByteBuffer
in classVector<Short>
- Parameters:
-
bb
- the byte buffer -
offset
- the offset into the array -
bo
- the intended byte order -
m
- the mask controlling lane selection
reinterpretAsBytes
public final ByteVector reinterpretAsBytes()
byte
, where the bytes are extracted from the lanes according to little-endian order. It is a convenience method for the expression reinterpretShape(species().withLanes(byte.class))
. It may be considered an inverse to the various methods which consolidate bytes into larger lanes within the same vector, such as Vector.reinterpretAsInts()
. - Specified by:
-
reinterpretAsBytes
in classVector<Short>
- Returns:
- a
ByteVector
with the same shape and information content - See Also:
viewAsIntegralLanes
public final ShortVector viewAsIntegralLanes()
VSHAPE
or VLENGTH
, and there is no change to the bitwise contents of the vector. If the vector's ETYPE
is already an integral type, the same vector is returned unchanged. This method returns the value of this expression: convert(conv,0)
, where conv
is VectorOperators.Conversion.ofReinterpret(E.class,F.class)
, and F
is the non-floating-point type of the same size as E
. - Specified by:
-
viewAsIntegralLanes
in classVector<Short>
- Returns:
- the original vector, reinterpreted as non-floating point
- See Also:
viewAsFloatingLanes
public final Vector<?> viewAsFloatingLanes()
VSHAPE
or VLENGTH
, and there is no change to the bitwise contents of the vector. If the vector's ETYPE
is already a float-point type, the same vector is returned unchanged. If the vector's element size does not match any floating point type size, an IllegalArgumentException
is thrown. This method returns the value of this expression: convert(conv,0)
, where conv
is VectorOperators.Conversion.ofReinterpret(E.class,F.class)
, and F
is the floating-point type of the same size as E
, if any. - Specified by:
-
viewAsFloatingLanes
in classVector<Short>
- Implementation Note:
- This method always throws
UnsupportedOperationException
, because there is no floating point type of the same size asshort
. The return type of this method is arbitrarily designated asVector<?>
. Future versions of this API may change the return type if additional floating point types become available. - Returns:
- the original vector, reinterpreted as floating point
- See Also:
toString
public final String toString()
"[0,1,2...]"
, reporting the lane values of this vector, in lane order. The string is produced as if by a call to Arrays.toString()
, as appropriate to the short
array returned by this.toArray()
.equals
public final boolean equals(Object obj)
The comparison of lane values is produced as if by a call to Arrays.equals()
, as appropriate to the arrays returned by toArray()
on both vectors.
hashCode
public final int hashCode()
species
public final VectorSpecies<Short> species()
Vector
check
public final <F> Vector<F> check(VectorSpecies<F> species)
Vector
species == species()
? this
: throw new ClassCastException()
.check
public final <F> Vector<F> check(Class<F> elementType)
elementType == species().elementType()
? this
: throw new ClassCastException()
. maskAll
public final VectorMask<Short> maskAll(boolean bit)
This method returns the value of this expression: species().maskAll(bit)
.
reinterpretAsShorts
public ShortVector reinterpretAsShorts()
short
, where the lanes are assembled from successive bytes according to little-endian order. It is a convenience method for the expression reinterpretShape(species().withLanes(short.class))
. It may be considered an inverse to Vector.reinterpretAsBytes()
. - Specified by:
-
reinterpretAsShorts
in classVector<E>
- Returns:
- a
ShortVector
with the same shape and information content
reinterpretAsInts
public IntVector reinterpretAsInts()
int
, where the lanes are assembled from successive bytes according to little-endian order. It is a convenience method for the expression reinterpretShape(species().withLanes(int.class))
. It may be considered an inverse to Vector.reinterpretAsBytes()
. - Specified by:
-
reinterpretAsInts
in classVector<E>
- Returns:
- a
IntVector
with the same shape and information content
reinterpretAsLongs
public LongVector reinterpretAsLongs()
long
, where the lanes are assembled from successive bytes according to little-endian order. It is a convenience method for the expression reinterpretShape(species().withLanes(long.class))
. It may be considered an inverse to Vector.reinterpretAsBytes()
. - Specified by:
-
reinterpretAsLongs
in classVector<E>
- Returns:
- a
LongVector
with the same shape and information content
reinterpretAsFloats
public FloatVector reinterpretAsFloats()
float
, where the lanes are assembled from successive bytes according to little-endian order. It is a convenience method for the expression reinterpretShape(species().withLanes(float.class))
. It may be considered an inverse to Vector.reinterpretAsBytes()
. - Specified by:
-
reinterpretAsFloats
in classVector<E>
- Returns:
- a
FloatVector
with the same shape and information content
reinterpretAsDoubles
public DoubleVector reinterpretAsDoubles()
double
, where the lanes are assembled from successive bytes according to little-endian order. It is a convenience method for the expression reinterpretShape(species().withLanes(double.class))
. It may be considered an inverse to Vector.reinterpretAsBytes()
. - Specified by:
-
reinterpretAsDoubles
in classVector<E>
- Returns:
- a
DoubleVector
with the same shape and information content
convert
public final <F> Vector<F> convert(VectorOperators.Conversion<Short,F> conv, int part)
ETYPE
to a new lane type (called FTYPE
here) according to the indicated conversion. This is a lane-wise shape-invariant operation which copies ETYPE
values from the input vector to corresponding FTYPE
values in the result. Depending on the selected conversion, this operation may either expand or contract its logical result, in which case a non-zero part
number can further control the selection and steering of the logical result into the physical output vector. Each specific conversion is described by a conversion constant in the class VectorOperators
. Each conversion operator has a specified domain type and range type. The domain type must exactly match the lane type of the input vector, while the range type determines the lane type of the output vectors.
A conversion operator may be classified as (respectively) in-place, expanding, or contracting, depending on whether the bit-size of its domain type is (respectively) equal, less than, or greater than the bit-size of its range type.
Independently, conversion operations can also be classified as reinterpreting or value-transforming, depending on whether the conversion copies representation bits unchanged, or changes the representation bits in order to retain (part or all of) the logical value of the input value.
If a reinterpreting conversion contracts, it will truncate the upper bits of the input. If it expands, it will pad upper bits of the output with zero bits, when there are no corresponding input bits.
An expanding conversion such as S2I
(short
value to int
) takes a scalar value and represents it in a larger format (always with some information redundancy). A contracting conversion such as D2F
(double
value to float
) takes a scalar value and represents it in a smaller format (always with some information loss). Some in-place conversions may also include information loss, such as L2D
(long
value to double
) or F2I
(float
value to int
). Reinterpreting in-place conversions are not lossy, unless the bitwise value is somehow not legal in the output type. Converting the bit-pattern of a NaN
may discard bits from the NaN
's significand.
This classification is important, because, unless otherwise documented, conversion operations never change vector shape, regardless of how they may change lane sizes. Therefore an expanding conversion cannot store all of its results in its output vector, because the output vector has fewer lanes of larger size, in order to have the same overall bit-size as its input. Likewise, a contracting conversion must store its relatively small results into a subset of the lanes of the output vector, defaulting the unused lanes to zero.
As an example, a conversion from byte
to long
(M=8
) will discard 87.5% of the input values in order to convert the remaining 12.5% into the roomy long
lanes of the output vector. The inverse conversion will convert back all of the large results, but will waste 87.5% of the lanes in the output vector. In-place conversions (M=1
) deliver all of their results in one output vector, without wasting lanes.
To manage the details of these expansions and contractions, a non-zero part
parameter selects partial results from expansions, or steers the results of contractions into corresponding locations, as follows:
- expanding by
M
:part
must be in the range[0..M-1]
, and selects the block ofVLENGTH/M
input lanes starting at the origin lane atpart*VLENGTH/M
.The
VLENGTH/M
output lanes represent a partial slice of the whole logical result of the conversion, filling the entire physical output vector. - contracting by
M
:part
must be in the range[-M+1..0]
, and steers allVLENGTH
input lanes into the output located at the origin lane-part*VLENGTH
. There is a total ofVLENGTH*M
output lanes, and those not holding converted input values are filled with zeroes.A group of such output vectors, with logical result parts steered to disjoint blocks, can be reassembled using the bitwise or or (for floating point) the
FIRST_NONZERO
operator. - in-place (
M=1
):part
must be zero. Both vectors have the sameVLENGTH
. The result is always positioned at the origin lane of zero.
This method is a restricted version of the more general but less frequently used shape-changing method convertShape()
. The result of this method is the same as the expression this.convertShape(conv, rsp, this.broadcast(part))
, where the output species is rsp=this.species().withLanes(FTYPE.class)
.
- Specified by:
-
convert
in classVector<E>
- Type Parameters:
-
F
- the boxed element type of the species - Parameters:
-
conv
- the desired scalar conversion to apply lane-wise -
part
- the part number of the result, or zero if neither expanding nor contracting - Returns:
- a vector converted by shape and element type from this vector
- See Also:
castShape
public final <F> Vector<F> castShape(VectorSpecies<F> toSpecies, int part)
convertShape(conv,rsp,part)
, where conv
is VectorOperators.Conversion.ofCast(E.class,F.class)
. If the old and new species have different shape, this is a shape-changing operation, and may have special implementation costs.
- Specified by:
-
castShape
in classVector<E>
- Type Parameters:
-
F
- the boxed element type of the output species - Parameters:
-
toSpecies
- the desired output species -
part
- the part number of the result, or zero if neither expanding nor contracting - Returns:
- a vector converted by element type from this vector
- See Also:
convertShape
public abstract <F> Vector<F> convertShape(VectorOperators.Conversion<Short,F> conv, VectorSpecies<F> rsp, int part)
ETYPE
to a new lane type (called FTYPE
here) according to the indicated conversion. This is a lane-wise operation which copies ETYPE
values from the input vector to corresponding FTYPE
values in the result. If the old and new species have the same shape, the behavior is exactly the same as the simpler, shape-invariant method convert()
. In such cases, the simpler method convert()
should be used, to make code easier to reason about. Otherwise, this is a shape-changing operation, and may have special implementation costs.
As a combined effect of shape changes and lane size changes, the input and output species may have different lane counts, causing expansion or contraction. In this case a non-zero part
parameter selects partial results from an expanded logical result, or steers the results of a contracted logical result into a physical output vector of the required output species.
The following pseudocode illustrates the behavior of this method for in-place, expanding, and contracting conversions. (This pseudocode also applies to the shape-invariant method, but with shape restrictions on the output species.) Note that only one of the three code paths is relevant to any particular combination of conversion operator and shapes.
FTYPE scalar_conversion_op(ETYPE s);
EVector a = ...;
VectorSpecies<F> rsp = ...;
int part = ...;
VectorSpecies<E> dsp = a.species();
int domlen = dsp.length();
int ranlen = rsp.length();
FTYPE[] logical = new FTYPE[domlen];
for (int i = 0; i < domlen; i++) {
logical[i] = scalar_conversion_op(a.lane(i));
}
FTYPE[] physical;
if (domlen == ranlen) { // in-place
assert part == 0; //else AIOOBE
physical = logical;
} else if (domlen > ranlen) { // expanding
int M = domlen / ranlen;
assert 0 <= part && part < M; //else AIOOBE
int origin = part * ranlen;
physical = Arrays.copyOfRange(logical, origin, origin + ranlen);
} else { // (domlen < ranlen) // contracting
int M = ranlen / domlen;
assert 0 >= part && part > -M; //else AIOOBE
int origin = -part * domlen;
System.arraycopy(logical, 0, physical, origin, domlen);
}
return FVector.fromArray(ran, physical, 0);
- Specified by:
-
convertShape
in classVector<E>
- Type Parameters:
-
F
- the boxed element type of the output species - Parameters:
-
conv
- the desired scalar conversion to apply lane-wise -
rsp
- the desired output species -
part
- the part number of the result, or zero if neither expanding nor contracting - Returns:
- a vector converted by element type from this vector
- See Also:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/jdk.incubator.vector/jdk/incubator/vector/ShortVector.html