Класс IntVector
public abstract class IntVector extends Vector<Integer>
Vector, представляющий упорядоченную неизменяемую последовательность значений int.Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final VectorSpecies |
SPECIES_128 |
Вид, представляющий векторы IntVector-векторы размером VectorShape.S_128_BIT. |
static final VectorSpecies |
SPECIES_256 |
Вид, представляющий векторы IntVector-векторы размером VectorShape.S_256_BIT. |
static final VectorSpecies |
SPECIES_512 |
Вид, представляющий векторы IntVector-векторы размером VectorShape.S_512_BIT. |
static final VectorSpecies |
SPECIES_64 |
Вид, представляющий векторы IntVector-векторы размером VectorShape.S_64_BIT. |
static final VectorSpecies |
SPECIES_MAX |
Вид, представляющий векторы IntVector-векторы размером VectorShape.S_Max_BIT. |
static final VectorSpecies |
SPECIES_PREFERRED |
Предпочтительный вид для векторов IntVector. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final IntVector |
abs() |
Возвращает абсолютное значение этого вектора. |
final IntVector |
add |
Складывает этот вектор с вектором, полученным широковещательным распространением входного скалярного значения. |
final IntVector |
add |
Складывает этот вектор с вектором, полученным широковещательным распространением входного скалярного значения, выбирая элементы полос под управлением маски. |
final IntVector |
add |
Складывает этот вектор со вторым входным вектором. |
final IntVector |
add |
Складывает этот вектор со вторым входным вектором, выбирая полосы под управлением маски. |
abstract IntVector |
addIndex |
Прибавляет к значениям полос этого вектора соответствующие номера полос, умноженные на заданную константу. |
final IntVector |
and |
Вычисляет побитовое логическое И ( &) этого вектора и скалярного значения. |
final IntVector |
and |
Вычисляет побитовое логическое И ( &) этого вектора и второго входного вектора. |
final IntVector |
bitwiseBlend |
Объединяет биты вектора и скалярного значения под управлением другого скалярного значения, задающего биты маски. |
final IntVector |
bitwiseBlend |
Объединяет биты вектора и скалярного значения под управлением другого вектора, задающего биты маски. |
final IntVector |
bitwiseBlend |
Объединяет биты двух векторов под управлением скалярного значения, задающего биты маски. |
final IntVector |
bitwiseBlend |
Объединяет биты двух векторов под управлением третьего вектора, задающего биты маски. |
final IntVector |
blend |
Заменяет выбранные полосы этого вектора скалярным значением под управлением маски. |
final IntVector |
blend |
Заменяет выбранные полосы этого вектора скалярным значением под управлением маски. |
abstract IntVector |
blend |
Заменяет выбранные полосы этого вектора соответствующими полосами второго входного вектора под управлением маски. |
abstract IntVector |
broadcast |
Возвращает вектор того же вида, что и этот, со всеми элементами полос, установленными в примитивное значение e. |
abstract IntVector |
broadcast |
Возвращает вектор того же вида, что и этот, со всеми элементами полос, установленными в примитивное значение e. |
static IntVector |
broadcast |
Возвращает вектор указанного вида со всеми элементами полос, установленными в примитивное значение e. |
static IntVector |
broadcast |
Возвращает вектор указанного вида со всеми элементами полос, установленными в примитивное значение e. |
final <F> Vector |
castShape |
Вспомогательный метод для преобразования вектора из одного типа полос в другой с изменением формы при необходимости, если размер полос изменяется. |
final <F> Vector |
check |
Проверяет, что этот вектор имеет заданный тип элементов, и возвращает его без изменений. |
final <F> Vector |
check |
Проверяет, что этот вектор имеет заданный вид, и возвращает его без изменений. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его с входным скалярным значением согласно заданной операции сравнения. |
final VectorMask |
compare |
Проверяет этот вектор, сравнивая его с входным скалярным значением согласно заданной операции сравнения в полосах, выбранных маской. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его с входным скалярным значением согласно заданной операции сравнения. |
final VectorMask |
compare |
Проверяет этот вектор, сравнивая его с входным скалярным значением согласно заданной операции сравнения в полосах, выбранных маской. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его с другим входным вектором согласно заданной операции сравнения. |
abstract IntVector |
compress |
Сжимает элементы полос этого вектора, выбирая полосы под управлением заданной маски. |
final <F> Vector |
convert |
Преобразует этот вектор в вектор той же формы с новым типом элементов, преобразуя значения полос из текущего типа ETYPE в новый тип полос (здесь называемый FTYPE) согласно указанному преобразованию. |
abstract <F> Vector |
convertShape |
Преобразует этот вектор в вектор указанного вида, формы и типа элементов, преобразуя значения полос из текущего типа ETYPE в новый тип полос (здесь называемый FTYPE) согласно указанному преобразованию. |
final IntVector |
div |
Делит этот вектор на вектор, полученный широковещательным распространением входного скалярного значения. |
final IntVector |
div |
Делит этот вектор на вектор, полученный широковещательным распространением входного скалярного значения, выбирая элементы полос под управлением маски. |
final IntVector |
div |
Делит этот вектор на второй входной вектор. |
final IntVector |
div |
Делит этот вектор на второй входной вектор под управлением маски. |
final VectorMask |
eq |
Проверяет, равен ли этот вектор входному скалярному значению. |
final VectorMask |
eq |
Проверяет, равен ли этот вектор другому входному вектору. |
final boolean |
equals |
Указывает, идентичен ли этот вектор некоторому другому объекту. |
abstract IntVector |
expand |
Расширяет элементы полос этого вектора под управлением заданной маски. |
static IntVector |
fromArray |
Загружает вектор из массива типа int[], начиная с заданного смещения. |
static IntVector |
fromArray |
Собирает новый вектор из элементов массива типа int[], используя индексы, полученные сложением фиксированного offset с рядом дополнительных смещений из карты индексов. |
static IntVector |
fromArray |
Собирает новый вектор из элементов массива типа int[] под управлением маски, используя индексы, полученные сложением фиксированного offset с рядом дополнительных смещений из карты индексов. |
static IntVector |
fromArray |
Загружает вектор из массива типа int[], начиная с заданного смещения и используя маску. |
static IntVector |
fromMemorySegment |
Загружает вектор из сегмента памяти, начиная со смещения в сегменте памяти. |
static IntVector |
fromMemorySegment |
Загружает вектор из сегмента памяти, начиная со смещения в сегменте памяти и используя маску. |
protected final Object |
getPayload() |
|
final int |
hashCode() |
Возвращает хеш-код вектора на основе значений полос и вида вектора. |
final void |
intoArray |
Сохраняет этот вектор в массив типа int[], начиная с заданного смещения. |
final void |
intoArray |
Распределяет элементы этого вектора по массиву типа int[], используя индексы, полученные сложением фиксированного offset с рядом дополнительных смещений из карты индексов. |
final void |
intoArray |
Распределяет элементы этого вектора по массиву типа int[] под управлением маски, используя индексы, полученные сложением фиксированного offset с рядом дополнительных смещений из карты индексов. |
final void |
intoArray |
Сохраняет этот вектор в массив типа int[], начиная со смещения и используя маску. |
final void |
intoMemorySegment |
Сохраняет этот вектор в сегмент памяти, начиная с заданного смещения и используя явно заданный порядок байтов. |
final void |
intoMemorySegment |
Сохраняет этот вектор в сегмент памяти, начиная с заданного смещения, используя явно заданный порядок байтов и маску. |
abstract int |
lane |
Получает элемент полосы с индексом i
|
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значением широковещательно распространенного скалярного значения. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значением широковещательно распространенного скалярного значения; выбор элементов полос управляется маской. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значением широковещательно распространенного скалярного значения. |
final IntVector |
lanewise |
Объединяет соответствующие значения полос этого вектора со значениями полос второго входного вектора; выбор элементов полос управляется маской. |
abstract IntVector |
lanewise |
Объединяет соответствующие значения полос этого вектора со значениями полос второго входного вектора. |
abstract IntVector |
lanewise |
Объединяет соответствующие значения полос этого вектора со значениями полос второго входного вектора; выбор элементов полос управляется маской. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значениями двух широковещательно распространенных скалярных значений. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значениями двух широковещательно распространенных скалярных значений; выбор элементов полос управляется маской. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значениями другого вектора и широковещательно распространенного скалярного значения. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значениями другого вектора и широковещательно распространенного скалярного значения; выбор элементов полос управляется маской. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значениями другого вектора и широковещательно распространенного скалярного значения. |
final IntVector |
lanewise |
Объединяет значения полос этого вектора со значениями другого вектора и широковещательно распространенного скалярного значения; выбор элементов полос управляется маской. |
abstract IntVector |
lanewise |
Объединяет соответствующие значения полос этого вектора со значениями полос второго и третьего входных векторов. |
abstract IntVector |
lanewise |
Объединяет соответствующие значения полос этого вектора со значениями полос второго и третьего входных векторов; выбор элементов полос управляется маской. |
abstract IntVector |
lanewise |
Выполняет операцию над значениями полос этого вектора. |
abstract IntVector |
lanewise |
Выполняет операцию над значениями полос этого вектора; выбор элементов полос управляется маской. |
final VectorMask |
lt |
Проверяет, меньше ли этот вектор входного скалярного значения. |
final VectorMask |
lt |
Проверяет, меньше ли этот вектор другого входного вектора. |
final VectorMask |
maskAll |
Возвращает маску того же вида, что и этот вектор; каждая полоса устанавливается или сбрасывается согласно заданному логическому значению, которое распространяется на все полосы. |
final IntVector |
max |
Вычисляет максимум этого вектора и вектора, полученного широковещательным распространением входного скалярного значения. |
final IntVector |
max |
Вычисляет максимум этого вектора и второго входного вектора. |
final IntVector |
min |
Вычисляет минимум этого вектора и вектора, полученного широковещательным распространением входного скалярного значения. |
final IntVector |
min |
Вычисляет минимум этого вектора и второго входного вектора. |
final IntVector |
mul |
Умножает этот вектор на вектор, полученный широковещательным распространением входного скалярного значения. |
final IntVector |
mul |
Умножает этот вектор на вектор, полученный широковещательным распространением входного скалярного значения, выбирая элементы полос под управлением маски. |
final IntVector |
mul |
Умножает этот вектор на второй входной вектор. |
final IntVector |
mul |
Умножает этот вектор на второй входной вектор под управлением маски. |
final IntVector |
neg() |
Меняет знак этого вектора. |
final IntVector |
not() |
Вычисляет побитовое логическое дополнение ( ~) этого вектора. |
final IntVector |
or |
Вычисляет побитовое логическое ИЛИ ( |) этого вектора и скалярного значения. |
final IntVector |
or |
Вычисляет побитовое логическое ИЛИ ( |) этого вектора и второго входного вектора. |
abstract IntVector |
rearrange |
Изменяет порядок элементов полос этого вектора, выбирая полосы под управлением заданного перемешивания. |
abstract IntVector |
rearrange |
Изменяет порядок элементов полос двух векторов, выбирая полосы под управлением заданного перемешивания; для направления данных используются как обычные, так и особые индексы в перемешивании. |
abstract IntVector |
rearrange |
Изменяет порядок элементов полос этого вектора, выбирая полосы под управлением заданного перемешивания и маски. |
abstract int |
reduceLanes |
Возвращает значение, накопленное по всем полосам этого вектора. |
abstract int |
reduceLanes |
Возвращает значение, накопленное по выбранным полосам этого вектора под управлением маски. |
final ByteVector |
reinterpretAsBytes() |
Интерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом полос byte; байты извлекаются из полос в порядке от младшего к старшему. |
DoubleVector |
reinterpretAsDoubles() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом полос double; полосы формируются из последовательных байтов в порядке от младшего к старшему. |
FloatVector |
reinterpretAsFloats() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом полос float; полосы формируются из последовательных байтов в порядке от младшего к старшему. |
IntVector |
reinterpretAsInts() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом полос int; полосы формируются из последовательных байтов в порядке от младшего к старшему. |
LongVector |
reinterpretAsLongs() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом полос long; полосы формируются из последовательных байтов в порядке от младшего к старшему. |
ShortVector |
reinterpretAsShorts() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом полос short; полосы формируются из последовательных байтов в порядке от младшего к старшему. |
abstract IntVector |
selectFrom |
Используя значения индексов, хранящиеся в полосах этого вектора, собирает значения, хранящиеся во втором векторе v. |
abstract IntVector |
selectFrom |
Используя значения, хранящиеся в полосах этого вектора, собирает значения, хранящиеся во втором векторе v1 и третьем векторе v2. |
abstract IntVector |
selectFrom |
Используя значения индексов, хранящиеся в полосах этого вектора, собирает значения из второго вектора под управлением маски. |
abstract IntVector |
slice |
Извлекает сегмент смежных полос, начиная с заданной полосы origin в текущем векторе. |
abstract IntVector |
slice |
Извлекает сегмент смежных полос, начиная с заданной полосы origin в текущем векторе и при необходимости продолжая его в непосредственно следующем векторе. |
final IntVector |
slice |
Извлекает сегмент смежных полос под управлением маски, начиная с заданной полосы origin в текущем векторе и при необходимости продолжая его в непосредственно следующем векторе. |
final VectorSpecies |
species() |
Возвращает вид этого вектора. |
final IntVector |
sub |
Вычитает входное скалярное значение из этого вектора. |
final IntVector |
sub |
Вычитает входное скалярное значение из этого вектора под управлением маски. |
final IntVector |
sub |
Вычитает второй входной вектор из этого вектора. |
final IntVector |
sub |
Вычитает второй входной вектор из этого вектора под управлением маски. |
abstract VectorMask |
test |
Проверяет полосы этого вектора согласно заданной операции. |
abstract VectorMask |
test |
Проверяет выбранные полосы этого вектора согласно заданной операции. |
final int[] |
toArray() |
Возвращает массив типа int[], содержащий значения всех полос. |
final double[] |
toDoubleArray() |
Возвращает массив double[], содержащий значения всех полос, преобразованные к типу double. |
final int[] |
toIntArray() |
Возвращает массив int[], содержащий значения всех полос, преобразованные к типу int. |
final long[] |
toLongArray() |
Возвращает массив long[], содержащий значения всех полос, преобразованные к типу long. |
final String |
toString() |
Возвращает строковое представление этого вектора в формате "[0,1,2...]" со значениями полос этого вектора в порядке следования полос. |
abstract IntVector |
unslice |
Выполняет обратное преобразование среза, вставляя текущий вектор как срез в «фоновый» вход, содержащий нулевые значения полос. |
abstract IntVector |
unslice |
Выполняет обратное преобразование среза, вставляя текущий вектор как срез в другой «фоновый» входной вектор, который рассматривается как один из входов для гипотетической последующей операции slice(). |
abstract IntVector |
unslice |
Выполняет обратное преобразование среза, вставляя (под управлением маски) текущий вектор как срез в другой «фоновый» входной вектор, который рассматривается как один из входов для гипотетической последующей операции slice(). |
final FloatVector |
viewAsFloatingLanes() |
Интерпретирует этот вектор как вектор той же формы, длины и содержимого, но с типом полос с плавающей точкой. |
final IntVector |
viewAsIntegralLanes() |
Интерпретирует этот вектор как вектор той же формы, длины и содержимого, но с типом полос, не являющимся типом с плавающей точкой. |
abstract IntVector |
withLane |
Заменяет элемент полосы этого вектора с индексом i значением e. |
static IntVector |
zero |
Возвращает вектор указанного вида со всеми элементами полос, установленными в ноль — значение примитива по умолчанию. |
Методы, объявленные в классе Vector
bitSize, byteSize, compare, elementSize, elementType, length, reduceLanesToLong, reduceLanesToLong, reinterpretShape, shape, toShuffle
Подробное описание полей
SPECIES_64
public static final VectorSpecies<Integer> SPECIES_64
IntVectorы с VectorShape.S_64_BIT.SPECIES_128
public static final VectorSpecies<Integer> SPECIES_128
IntVectorы с VectorShape.S_128_BIT.SPECIES_256
public static final VectorSpecies<Integer> SPECIES_256
IntVectorы с VectorShape.S_256_BIT.SPECIES_512
public static final VectorSpecies<Integer> SPECIES_512
IntVectorы с VectorShape.S_512_BIT.SPECIES_MAX
public static final VectorSpecies<Integer> SPECIES_MAX
IntVectorы с VectorShape.S_Max_BIT.SPECIES_PREFERRED
public static final VectorSpecies<Integer> SPECIES_PREFERRED
IntVectorов. Предпочтительный вид — это вид с максимальной разрядностью для данной платформы.Подробное описание методов
zero
public static IntVector zero(VectorSpecies<Integer> species)
- Параметры:
-
species— вид требуемого нулевого вектора - Возвращает:
- нулевой вектор
broadcast
public abstract IntVector broadcast(int e)
e. Содержимое текущего вектора отбрасывается; для этой операции важен только его вид. Этот метод возвращает значение следующего выражения: IntVector.broadcast(this.species(), e).
- Примечание к API:
- В отличие от аналогичного метода с именем
broadcast()в супертипеVector, этому методу не требуется проверять аргумент, и он не может выброситьIllegalArgumentException. Поэтому этот метод предпочтительнее метода супертипа. - Параметры:
-
e— значение для широковещательной передачи - Возвращает:
- вектор, все элементы которого установлены в примитивное значение
e - См. также:
broadcast
public static IntVector broadcast(VectorSpecies<Integer> species, int e)
e.- Параметры:
-
species— вид требуемого вектора -
e— значение для широковещательной передачи - Возвращает:
- вектор, все элементы которого установлены в примитивное значение
e - См. также:
broadcast
public abstract IntVector broadcast(long e)
e. Содержимое текущего вектора отбрасывается; для этой операции важен только его вид. Этот метод возвращает значение следующего выражения: EVector.broadcast(this.species(), (ETYPE)e), где EVector — класс вектора, соответствующий типу элементов этого вектора ETYPE.
Значение long e должно точно представляться типом ETYPE этого вида вектора, чтобы выполнялось e==(long)(ETYPE)e. Если это правило нарушено, проблема не обнаруживается статически, но во время выполнения выбрасывается IllegalArgumentException. Таким образом, этот метод в некоторой степени ослабляет статическую проверку типов для непосредственных констант и других скалярных значений, но компенсирует это повышенной выразительностью универсального API. Обратите внимание, что значение e в диапазоне [-128..127] всегда допустимо, поскольку любой ETYPE принимает любое значение byte.
- Определено в:
-
broadcastв классеVector<Integer> - Примечание к API:
- При работе с подтипами векторов, такими как
IntVector, обычно выбирается метод со строгой типизацией. Его можно выбрать явно с помощью приведения типа:v.broadcast((int)e). Оба выражения дают численно идентичные результаты. - Параметры:
-
e— значение для широковещательной передачи - Возвращает:
- вектор, все элементы которого установлены в примитивное значение
e - См. также:
broadcast
public static IntVector broadcast(VectorSpecies<Integer> species, long e)
e. Значение long должно точно представляться типом ETYPE данного вида вектора, чтобы выполнялось e==(long)(ETYPE)e.- Параметры:
-
species— вид требуемого вектора -
e— значение для широковещательной передачи - Возвращает:
- вектор, все элементы которого установлены в примитивное значение
e - Выбрасывает:
-
IllegalArgumentException— если указанное значениеlongне может быть представлено типомETYPEвектора - См. также:
lanewise
public abstract IntVector lanewise(VectorOperators.Unary op)
lanewise
public abstract IntVector lanewise(VectorOperators.Unary op, VectorMask<Integer> m)
lanewise
public abstract IntVector lanewise(VectorOperators.Binary op, Vector<Integer> v)
lanewise
public abstract IntVector lanewise(VectorOperators.Binary op, Vector<Integer> v, VectorMask<Integer> m)
lanewise
public final IntVector lanewise(VectorOperators.Binary op, int e)
this.lanewise(op, this.broadcast(e)).- Параметры:
-
op— операция для обработки значений элементов -
e— входной скаляр - Возвращает:
- результат поэлементного применения операции к двум входным векторам
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Binary op, int e, VectorMask<Integer> m)
this.lanewise(op, this.broadcast(e), m).- Параметры:
-
op— операция для обработки значений элементов -
e— входной скаляр -
m— маска, управляющая выбором элементов - Возвращает:
- результат поэлементного применения операции к входному вектору и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Binary op, long e)
this.lanewise(op, this.broadcast(e)). - Определено в:
-
lanewiseв классеVector<Integer> - Примечание к API:
- При работе с подтипами векторов, такими как
IntVector, обычно выбирается метод со строгой типизацией. Его можно выбрать явно с помощью приведения типа:v.lanewise(op,(int)e). Оба выражения дают численно идентичные результаты. - Параметры:
-
op— операция для объединения значений элементов -
e— входной скаляр - Возвращает:
- результат поэлементного применения операции к входному вектору и скаляру
- См. также:
lanewise
public final IntVector lanewise(VectorOperators.Binary op, long e, VectorMask<Integer> m)
this.lanewise(op, this.broadcast(e), m). - Определено в:
-
lanewiseв классеVector<Integer> - Примечание к API:
- При работе с подтипами векторов, такими как
IntVector, обычно выбирается метод со строгой типизацией. Его можно выбрать явно с помощью приведения типа:v.lanewise(op,(int)e,m). Оба выражения дают численно идентичные результаты. - Параметры:
-
op— операция для объединения значений элементов -
e— входной скаляр -
m— маска, управляющая выбором элементов - Возвращает:
- результат поэлементного применения операции к входному вектору и скаляру
- См. также:
lanewise
public abstract IntVector lanewise(VectorOperators.Ternary op, Vector<Integer> v1, Vector<Integer> v2)
lanewise
public abstract IntVector lanewise(VectorOperators.Ternary op, Vector<Integer> v1, Vector<Integer> v2, VectorMask<Integer> m)
lanewise
public final IntVector lanewise(VectorOperators.Ternary op, int e1, int e2)
this.lanewise(op, this.broadcast(e1), this.broadcast(e2)).- Параметры:
-
op— операция для объединения значений элементов -
e1— первый входной скаляр -
e2— второй входной скаляр - Возвращает:
- результат поэлементного применения операции к входному вектору и скалярам
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Ternary op, int e1, int e2, VectorMask<Integer> m)
this.lanewise(op, this.broadcast(e1), this.broadcast(e2), m).- Параметры:
-
op— операция для объединения значений элементов -
e1— первый входной скаляр -
e2— второй входной скаляр -
m— маска, управляющая выбором элементов - Возвращает:
- результат поэлементного применения операции к входному вектору и скалярам
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Ternary op, Vector<Integer> v1, int e2)
this.lanewise(op, v1, this.broadcast(e2)).- Параметры:
-
op— операция для объединения значений элементов -
v1— другой входной вектор -
e2— входной скаляр - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Ternary op, Vector<Integer> v1, int e2, VectorMask<Integer> m)
this.lanewise(op, v1, this.broadcast(e2), m).- Параметры:
-
op— операция для объединения значений элементов -
v1— другой входной вектор -
e2— входной скаляр -
m— маска, управляющая выбором элементов - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Ternary op, int e1, Vector<Integer> v2)
this.lanewise(op, this.broadcast(e1), v2).- Параметры:
-
op— операция для объединения значений элементов -
e1— входной скаляр -
v2— другой входной вектор - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final IntVector lanewise(VectorOperators.Ternary op, int e1, Vector<Integer> v2, VectorMask<Integer> m)
this.lanewise(op, this.broadcast(e1), v2, m).- Параметры:
-
op— операция для объединения значений элементов -
e1— входной скаляр -
v2— другой входной вектор -
m— маска, управляющая выбором элементов - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
add
public final IntVector add(Vector<Integer> v)
+) к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(ADD, v). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
add
public final IntVector add(int e)
+) к каждому элементу. Этот метод также эквивалентен выражению lanewise(ADD, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат сложения каждого элемента этого вектора со скалярным значением
- См. также:
add
public final IntVector add(Vector<Integer> v, VectorMask<Integer> m)
+) к каждой паре соответствующих элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(ADD, v, m). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
add
public final IntVector add(int e, VectorMask<Integer> m)
+) к каждому элементу. Этот метод также эквивалентен выражению lanewise(ADD, s, m).- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат сложения каждого элемента этого вектора со скалярным значением
- См. также:
sub
public final IntVector sub(Vector<Integer> v)
-) к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(SUB, v). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
sub
public final IntVector sub(int e)
-) к каждому элементу. Этот метод также эквивалентен выражению lanewise(SUB, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат вычитания скалярного значения из каждого элемента этого вектора
- См. также:
sub
public final IntVector sub(Vector<Integer> v, VectorMask<Integer> m)
-) к каждой паре соответствующих элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(SUB, v, m). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
sub
public final IntVector sub(int e, VectorMask<Integer> m)
-) к каждому элементу. Этот метод также эквивалентен выражению lanewise(SUB, s, m).- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат вычитания скалярного значения из каждого элемента этого вектора
- См. также:
mul
public final IntVector mul(Vector<Integer> v)
*) к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(MUL, v). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
mul
public final IntVector mul(int e)
*) к каждому элементу. Этот метод также эквивалентен выражению lanewise(MUL, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат умножения этого вектора на заданное скалярное значение
- См. также:
mul
public final IntVector mul(Vector<Integer> v, VectorMask<Integer> m)
*) к каждой паре соответствующих элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(MUL, v, m). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
mul
public final IntVector mul(int e, VectorMask<Integer> m)
*) к каждому элементу. Этот метод также эквивалентен выражению lanewise(MUL, s, m).- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат умножения каждого элемента этого вектора на скалярное значение
- См. также:
div
public final IntVector div(Vector<Integer> v)
/) к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(DIV, v). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
div
public final IntVector div(int e)
/) к каждому элементу. Этот метод также эквивалентен выражению lanewise(DIV, e).- Примечание API:
- Если делитель равен нулю, будет выброшено исключение
ArithmeticException. - Параметры:
-
e— входное скалярное значение - Возвращает:
- результат деления каждого элемента этого вектора на скалярное значение
- См. также:
div
public final IntVector div(Vector<Integer> v, VectorMask<Integer> m)
/) к каждой паре соответствующих элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(DIV, v, m). Как полноценная именованная операция, этот метод имеет варианты с маской и без неё, а в подклассах также варианты с широковещательной передачей скалярного значения (как с маской, так и без неё).
div
public final IntVector div(int e, VectorMask<Integer> m)
/) к каждому элементу. Этот метод также эквивалентен выражению lanewise(DIV, s, m).- Примечание API:
- Если делитель равен нулю, будет выброшено исключение
ArithmeticException. - Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат деления каждого элемента этого вектора на скалярное значение
- См. также:
min
min
public final IntVector min(int e)
Math.min() к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(MIN, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат умножения этого вектора на заданное скалярное значение
- См. также:
max
public final IntVector max(Vector<Integer> v)
Math.max() к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(MAX, v). Это не полноценная именованная операция, подобная add(). Вариант этой операции с маской напрямую недоступен, но его можно получить с помощью варианта lanewise с маской. Подклассы определяют для этого метода дополнительный вариант с широковещательной передачей скалярного значения.
max
public final IntVector max(int e)
Math.max() к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(MAX, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат умножения этого вектора на заданное скалярное значение
- См. также:
and
public final IntVector and(Vector<Integer> v)
&) этого вектора и второго входного вектора. Это поэлементная бинарная операция, которая применяет примитивную побитовую операцию «И» (&) к каждой паре соответствующих элементов. Этот метод также эквивалентен выражению lanewise(AND, v). Это не полноценная именованная операция, подобная add. Вариант этой операции с маской напрямую недоступен, но его можно получить с помощью варианта lanewise с маской.
- Параметры:
-
v— второй входной вектор - Возвращает:
- побитовое
&этого вектора и второго входного вектора - См. также:
and
public final IntVector and(int e)
&) этого вектора и скалярного значения. Это бинарная операция поэлементно, которая применяет примитивную операцию побитового «И» (&) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(AND, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- побитовое
&этого вектора и скалярного значения - См. также:
or
public final IntVector or(Vector<Integer> v)
|) этого вектора и второго входного вектора. Это бинарная операция поэлементно, которая применяет примитивную операцию побитового «ИЛИ» (|) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(AND, v). Это не полноценная именованная операция, такая как add. Маскированная версия этой операции недоступна напрямую, но ее можно получить с помощью маскированной версии lanewise.
- Параметры:
-
v— второй входной вектор - Возвращает:
- побитовое
|этого вектора и второго входного вектора - См. также:
or
public final IntVector or(int e)
|) этого вектора и скалярного значения. Это бинарная операция поэлементно, которая применяет примитивную операцию побитового «ИЛИ» (|) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(OR, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- побитовое
|этого вектора и скалярного значения - См. также:
neg
abs
not
public final IntVector not()
~) этого вектора. Это унарная операция поэлементно, которая применяет примитивную операцию побитового «НЕ» (~) к значению каждого элемента. Этот метод также эквивалентен выражению lanewise(NOT). Это не полноценная именованная операция, такая как add. Маскированная версия этой операции недоступна напрямую, но ее можно получить с помощью маскированной версии lanewise.
- Возвращает:
- побитовое дополнение
~этого вектора - См. также:
eq
public final VectorMask<Integer> eq(Vector<Integer> v)
==) к каждой паре соответствующих значений элементов. Результат совпадает с compare(VectorOperators.EQ, v). eq
public final VectorMask<Integer> eq(int e)
==) к каждому элементу. Результат совпадает с compare(VectorOperators.Comparison.EQ, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- маску-результат проверки равенства этого вектора
e - См. также:
lt
public final VectorMask<Integer> lt(Vector<Integer> v)
<) к каждому элементу. Результат совпадает с compare(VectorOperators.LT, v). lt
public final VectorMask<Integer> lt(int e)
<) к каждому элементу. Результат совпадает с compare(VectorOperators.LT, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат-маску проверки того, что этот вектор меньше входного скалярного значения
- См. также:
test
public abstract VectorMask<Integer> test(VectorOperators.Test op)
test
public abstract VectorMask<Integer> test(VectorOperators.Test op, VectorMask<Integer> m)
test(op).and(m). - Указано в:
-
testв классеVector<Integer> - Параметры:
-
op— операция, используемая для проверки значений элементов -
m— маска, управляющая выбором элементов - Возвращает:
- результат-маску проверки элементов этого вектора в соответствии с выбранным оператором проверки и только для элементов, выбранных маской
- См. также:
compare
public abstract VectorMask<Integer> compare(VectorOperators.Comparison op, Vector<Integer> v)
- Указано в:
-
compareв классеVector<Integer> - Параметры:
-
op— операция, используемая для сравнения значений элементов -
v— второй входной вектор - Возвращает:
- результат-маску проверки того, как этот вектор сравнивается со входным вектором поэлементно в соответствии с выбранным оператором сравнения
- См. также:
compare
public abstract VectorMask<Integer> compare(VectorOperators.Comparison op, int e)
Результат совпадает с compare(op, broadcast(species(), e)). То есть скалярное значение можно считать широковещательно переданным в вектор того же вида, а затем сравнить с исходным вектором с помощью выбранной операции сравнения.
- Параметры:
-
op— операция, используемая для сравнения значений элементов -
e— входное скалярное значение - Возвращает:
- результат-маску проверки того, как этот вектор сравнивается со входным значением поэлементно в соответствии с выбранным оператором сравнения
- См. также:
compare
public final VectorMask<Integer> compare(VectorOperators.Comparison op, int e, VectorMask<Integer> m)
compare(op,s).and(m).- Параметры:
-
op— операция, используемая для сравнения значений элементов -
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат-маску проверки того, как этот вектор сравнивается со входным значением поэлементно в соответствии с выбранным оператором сравнения и только для элементов, выбранных маской
- См. также:
compare
public abstract VectorMask<Integer> compare(VectorOperators.Comparison op, long e)
Результат совпадает с this.compare(op, this.broadcast(e)). То есть скалярное значение можно считать широковещательно переданным в вектор того же вида, а затем сравнить с исходным вектором с помощью выбранной операции сравнения.
- Указано в:
-
compareв классеVector<Integer> - Параметры:
-
op— операция, используемая для сравнения значений элементов -
e— входное скалярное значение - Возвращает:
- результат-маску проверки того, как этот вектор сравнивается со входным значением поэлементно в соответствии с выбранным оператором сравнения
- См. также:
compare
public final VectorMask<Integer> compare(VectorOperators.Comparison op, long e, VectorMask<Integer> m)
compare(op,e).and(m). - Указано в:
-
compareв классеVector<Integer> - Параметры:
-
op— операция, используемая для сравнения значений элементов -
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат-маску проверки того, как этот вектор сравнивается со входным значением поэлементно в соответствии с выбранным оператором сравнения и только для элементов, выбранных маской
- См. также:
blend
public abstract IntVector blend(Vector<Integer> v, VectorMask<Integer> m)
- Для любого элемента, установленного в маске, новое значение берется из второго входного вектора и заменяет значение, которое находилось в этом элементе текущего вектора.
- Для любого элемента, не установленного в маске, замена не выполняется, и в этом векторе сохраняется исходное значение этого элемента.
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 IntVector addIndex(int scale)
N вычисляет масштабированное значение индекса N*scale и прибавляет его к значению, уже находящемуся в элементе N текущего вектора. Масштаб не должен быть настолько большим, а размер элемента — настолько малым, чтобы при вычислении любого из значений N*scale или VLENGTH*scale возникало переполнение при представлении результата с использованием типа элементов вектора ETYPE.
Следующий псевдокод иллюстрирует это поведение:
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 IntVector blend(int e, VectorMask<Integer> m)
blend(broadcast(e),m).- Параметры:
-
e— входное скалярное значение, содержащее значение для замены элемента -
m— маска, управляющая выбором скалярного значения для элементов - Возвращает:
- результат объединения элементов этого вектора со скалярным значением
blend
public final IntVector blend(long e, VectorMask<Integer> m)
blend(broadcast(e),m).slice
public abstract IntVector slice(int origin, Vector<Integer> v1)
origin текущего вектора и, если необходимо, продолжая его во непосредственно следующем векторе. Блок из VLENGTH элементов извлекается в отдельный вектор и возвращается. Это межэлементная операция, которая сдвигает элементы к началу, используя текущий вектор и второй вектор. Оба вектора можно рассматривать как объединенный «фон» длины 2*VLENGTH, из которого извлекается срез. Элемент с номером N в выходном векторе копируется из элемента origin+N входного вектора, если такой элемент существует; в противном случае — из элемента origin+N-VLENGTH второго вектора (который гарантированно существует).
Значение origin должно находиться в закрытом диапазоне 0..VLENGTH. В предельных случаях значения v.slice(0,w) и v.slice(VLENGTH,w) возвращают соответственно v и w.
- Параметры:
-
origin— первый входной элемент, переносимый в срез -
v1— второй вектор, логически присоединяемый к первому перед извлечением среза (если не указан, по умолчанию равен нулю) - Возвращает:
- непрерывный срез из
VLENGTHэлементов, взятый из этого вектора начиная с указанного начального элемента и, если необходимо, продолжающийся во втором векторе - См. также:
slice
public final IntVector slice(int origin, Vector<Integer> w, VectorMask<Integer> m)
origin текущего вектора и, если необходимо, продолжая его во непосредственно следующем векторе. Блок из VLENGTH элементов извлекается в отдельный вектор и возвращается. Во всех элементах, не выбранных заданной маской, результирующий вектор будет содержать нули. Элементы, выбранные маской, будут содержать данные, скопированные из выбранных элементов this или v1. Это межэлементная операция, которая сдвигает элементы к началу, используя текущий вектор и второй вектор. Оба вектора можно рассматривать как объединенный «фон» длины 2*VLENGTH, из которого извлекается срез. Возвращаемый результат равен выражению broadcast(0).blend(slice(origin,v1),m).
- Указано в:
-
sliceв классеVector<Integer> - Параметры:
-
origin— первый входной элемент, переносимый в срез -
w— второй вектор, логически присоединяемый к первому перед извлечением среза (если не указан, по умолчанию равен нулю) -
m— маска, управляющая выбором элементов результирующего вектора - Возвращает:
- непрерывный срез из
VLENGTHэлементов, взятый из этого вектора начиная с указанного начального элемента и, если необходимо, продолжающийся во втором векторе - См. также:
slice
public abstract IntVector slice(int origin)
origin текущего вектора. Блок из VLENGTH элементов, при необходимости дополненный нулевыми элементами, извлекается в отдельный вектор и возвращается. Это вспомогательный метод, извлекающий срез из одного вектора на фоне, расширенном нулевыми элементами. Он эквивалентен slice
(origin, broadcast(0)). Его также можно рассматривать просто как межэлементный сдвиг от более поздних элементов к более ранним, при котором освободившиеся в конце вектора позиции заполняются нулями. В этом случае величина сдвига равна origin. - Параметры:
-
origin— первый входной элемент, переносимый в срез - Возвращает:
- последние
VLENGTH-originвходных элементов, помещенные начиная с первого элемента выходного вектора и дополненные в конце нулями - См. также:
unslice
public abstract IntVector unslice(int origin, Vector<Integer> w, int part)
slice(). Это межполосная операция, которая переставляет элементы полос текущего вектора в направлении конца и вставляет их в логическую пару фоновых векторов. Однако возвращается только один из этой пары. Фоновый вектор формируется дублированием второго входного вектора. (При этом результат никогда не будет содержать два дубликата из одной и той же входной полосы.) Полоса с номером N во входном векторе копируется в полосу origin+N первого фонового вектора, если такая полоса существует, иначе — в полосу origin+N-VLENGTH второго фонового вектора (существование которой гарантировано). Возвращается первый или второй фоновый вектор с вставленным срезом. Число part, равное нулю или единице, выбирает первый или второй обновлённый фоновый вектор.
Значение origin должно находиться в диапазоне включительно от 0..VLENGTH. В крайних случаях v.unslice(0,w,0) и v.unslice(VLENGTH,w,1) возвращают v, а v.unslice(0,w,1) и v.unslice(VLENGTH,w,0) возвращают w.
- Определено в:
-
unsliceв классеVector<Integer> - Параметры:
-
origin- первая выходная полоса, в которую будет помещён срез -
w- фоновый вектор, в который (в виде двух копий) будет вставлен срез -
part- номер части результата (ноль или единица) - Возвращает:
- первую или вторую часть пары фоновых векторов
w, обновлённую вставкой этого вектора с указанной начальной позиции - См. также:
unslice
public abstract IntVector unslice(int origin, Vector<Integer> w, int part, VectorMask<Integer> m)
slice(). Это межполосная операция, которая переставляет элементы полос текущего вектора в направлении начала и вставляет его полосы (выбранные маской) в логическую пару фоновых векторов. Как и в версии этого метода без маски, возвращается только один из векторов пары, выбранный числом part. Для каждой полосы N, выбранной маской, значение полосы копируется в полосу origin+N первого фонового вектора, если такая полоса существует, иначе — в полосу origin+N-VLENGTH второго фонового вектора (существование которой гарантировано). Фоновые полосы сохраняют исходные значения, если соответствующие входные полосы N не выбраны маской. Возвращается первый или второй фоновый вектор, обновлённый выбранными полосами вставленного среза. Число part, равное нулю или единице, выбирает первый или второй обновлённый фоновый вектор.
- Определено в:
-
unsliceв классеVector<Integer> - Параметры:
-
origin- первая выходная полоса, в которую будет помещён срез -
w- фоновый вектор, в который (в виде двух копий) будет вставлен срез, если полосы выбраны вm -
part- номер части результата (ноль или единица) -
m- маска, управляющая выбором полос из текущего вектора - Возвращает:
- первую или вторую часть пары фоновых векторов
w, обновлённую вставкой выбранных полос этого вектора с указанной начальной позиции - См. также:
unslice
public abstract IntVector unslice(int origin)
unslice(), этот метод возвращает только первый вектор из пары фоновых векторов. Это вспомогательный метод, который возвращает результат unslice
(origin, broadcast(0), 0). Его также можно рассматривать просто как межполосный сдвиг от более ранних полос к более поздним, при котором освободившиеся в начале вектора полосы заполняются нулями. В этом представлении величина сдвига равна origin. rearrange
public abstract IntVector rearrange(VectorShuffle<Integer> shuffle)
N перестановки и каждого исходного индекса полосы I=s.wrapIndex(s.laneSource(N)) в перестановке выходная полоса N получает значение из входного вектора в полосе I. rearrange
public abstract IntVector rearrange(VectorShuffle<Integer> s, VectorMask<Integer> m)
N перестановки и каждого исходного индекса полосы I=s.wrapIndex(s.laneSource(N)) в перестановке выходная полоса N получает значение из входного вектора в полосе I, если полоса выбрана маской. В противном случае выходная полоса N получает нулевое значение. Этот метод возвращает результат следующего псевдокода:
Vector<E> r = this.rearrange(s);
return broadcast(0).blend(r, m);
rearrange
public abstract IntVector rearrange(VectorShuffle<Integer> s, Vector<Integer> v)
v). Для каждой полосы N перестановки и каждого исходного индекса полосы I=s.laneSource(N) в перестановке выходная полоса N получает значение из первого вектора в полосе I, если I>=0. В противном случае особый индекс I преобразуется циклически прибавлением к нему VLENGTH и используется для индексирования второго вектора по индексу I+VLENGTH. Этот метод возвращает результат следующего псевдокода:
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());
compress
public abstract IntVector compress(VectorMask<Integer> m)
N маски, если маска для полосы N установлена, элемент полосы N входного вектора выбирается и последовательно записывается в выходной вектор, начиная с полосы 0. Все оставшиеся верхние полосы выходного вектора, если таковые имеются, устанавливаются в ноль. expand
public abstract IntVector expand(VectorMask<Integer> m)
N маски, если маска для полосы N установлена, следующий последовательный элемент входного вектора, начиная с полосы 0, выбирается и записывается в выходной вектор в полосу N. Все остальные полосы выходного вектора, если таковые имеются, устанавливаются в ноль. selectFrom
public abstract IntVector selectFrom(Vector<Integer> v)
v. Таким образом, второй вектор служит таблицей, элементы которой выбираются по индексам из текущего вектора. Это межполосная операция, которая переставляет элементы полос вектора-аргумента под управлением этого вектора. Для каждой полосы N этого вектора и каждого значения полосы I=wrapIndex(this.lane(N)) в этом векторе выходная полоса N получает значение из вектора-аргумента в полосе I. Таким образом, результат содержит только значения, хранящиеся в векторе-аргументе v, но представленные в порядке, зависящем от значений индексов в this. Результат совпадает с выражением v.rearrange(this.toShuffle()). - Определено в:
-
selectFromв классеVector<Integer> - Параметры:
-
v- вектор, предоставляющий значения результата - Возвращает:
- перестановку элементов полос
v - См. также:
selectFrom
public abstract IntVector selectFrom(Vector<Integer> s, VectorMask<Integer> m)
v. Таким образом, второй вектор служит таблицей, элементы которой выбираются по индексам из текущего вектора. Полосы, не выбранные маской, получают ноль вместо значения из таблицы. Это межполосная операция, которая переставляет элементы полос вектора-аргумента под управлением этого вектора и маски. Результат совпадает с выражением v.rearrange(this.toShuffle(), m). - Определено в:
-
selectFromв классеVector<Integer> - Параметры:
-
s- вектор, предоставляющий значения результата -
m- маска, управляющая выбором изv - Возвращает:
- перестановку элементов полос
v - См. также:
selectFrom
public abstract IntVector selectFrom(Vector<Integer> v1, Vector<Integer> v2)
v1 и третьего вектора v2. Таким образом, второй и третий векторы служат таблицей, элементы которой выбираются по индексам из этого вектора. Это межполосная операция, которая переставляет элементы полос векторов-аргументов под управлением этого вектора. Для каждой полосы N этого вектора и каждого значения полосы I=wrapIndex(this.lane(N) в этом векторе выходная полоса N получает значение из второго вектора в полосе I, если I < VLENGTH. В противном случае выходная полоса N получает значение из третьего вектора в полосе I - VLENGTH. Здесь VLENGTH является результатом this.length(), а для целочисленных значений wrapIndex вычисляет результат Math.floorMod(E, 2 * VLENGTH), где E — индекс, который нужно циклически преобразовать. Если VLENGTH является степенью двойки, результат также равен E & (2 * VLENGTH - 1). Для значений с плавающей точкой wrapIndex вычисляет Math.floorMod(convert(E), 2 * VLENGTH), где convert преобразует значение с плавающей точкой в целочисленное значение с тем же количеством битов представления — например, при преобразовании значения double в значение long ((long)doubleVal) или значения float в значение int ((int)floatVal). Таким образом, результат содержит только значения, хранящиеся в векторах-аргументах v1 и v2, но представленные в порядке, зависящем от значений индексов в this. Для целочисленных значений результат совпадает с выражением v1.rearrange(
this.lanewise(VectorOperators.AND, 2 * VLENGTH - 1).toShuffle(),
v2)
VLENGTH является степенью двойки. Поэлементная операция AND возвращает вектор, элементы которого находятся в диапазоне [0, 2 * VLENGTH - 1]). Преобразование в перестановку даёт частично циклически преобразованную перестановку с индексами в диапазоне [-VLENGTH, VLENGTH - 1]), где особые индексы используются для выбора элементов третьего вектора. - Определено в:
-
selectFromв классеVector<Integer> - Параметры:
-
v1- первый входной вектор -
v2- второй входной вектор - Возвращает:
- перестановку элементов полос
v1иv2 - См. также:
bitwiseBlend
public final IntVector bitwiseBlend(Vector<Integer> bits, Vector<Integer> mask)
(a&~c)|(b&c) для каждой полосы. Этот метод также эквивалентен выражению lanewise(BITWISE_BLEND, bits, mask).- Параметры:
-
bits- входные биты для объединения с текущим вектором -
mask- побитовая маска, разрешающая объединение входных битов - Возвращает:
- побитовое объединение заданных битов с текущим вектором под управлением побитовой маски
- См. также:
bitwiseBlend
public final IntVector bitwiseBlend(int bits, int mask)
(a&~c)|(b&c) для каждой полосы. Этот метод также эквивалентен выражению lanewise(BITWISE_BLEND, bits, mask).- Параметры:
-
bits- входные биты для объединения с текущим вектором -
mask- побитовая маска, разрешающая объединение входных битов - Возвращает:
- побитовое объединение заданных битов с текущим вектором под управлением побитовой маски
- См. также:
bitwiseBlend
public final IntVector bitwiseBlend(int bits, Vector<Integer> mask)
(a&~c)|(b&c) для каждой полосы. Этот метод также эквивалентен выражению lanewise(BITWISE_BLEND, bits, mask).- Параметры:
-
bits- входные биты для объединения с текущим вектором -
mask- побитовая маска, разрешающая объединение входных битов - Возвращает:
- побитовое объединение заданных битов с текущим вектором под управлением побитовой маски
- См. также:
bitwiseBlend
public final IntVector bitwiseBlend(Vector<Integer> bits, int mask)
(a&~c)|(b&c) для каждой полосы. Этот метод также эквивалентен выражению lanewise(BITWISE_BLEND, bits, mask).- Параметры:
-
bits- входные биты для объединения с текущим вектором -
mask- побитовая маска, разрешающая объединение входных битов - Возвращает:
- побитовое объединение заданных битов с текущим вектором под управлением побитовой маски
- См. также:
reduceLanes
public abstract int reduceLanes(VectorOperators.Associative op)
Некоторые операции свёртки не допускают произвольного изменения порядка операндов, но включены сюда благодаря своей полезности.
- В случае
FIRST_NONZEROсвёртка возвращает значение из ненулевой полосы с наименьшим номером. - Все остальные операции свёртки являются полностью коммутативными и ассоциативными. Реализация может выбрать любой порядок обработки, но результат всегда будет одинаковым.
- Параметры:
-
op- операция, используемая для объединения значений полос - Возвращает:
- накопленный результат
- Исключения:
-
UnsupportedOperationException- если этот вектор не поддерживает запрошенную операцию - См. также:
reduceLanes
public abstract int reduceLanes(VectorOperators.Associative op, VectorMask<Integer> m)
Если не выбрано ни одного элемента, возвращается тождественное значение, определяемое операцией.
- Если операция —
ADD,XOR,ORилиFIRST_NONZERO, тождественным значением является ноль — значениеintпо умолчанию. - Если операция —
MUL, тождественным значением является единица. - Если операция —
AND, тождественным значением является минус единица (все биты установлены). - Если операция —
MAX, тождественным значением являетсяInteger.MIN_VALUE. - Если операция —
MIN, тождественным значением являетсяInteger.MAX_VALUE.
Некоторые операции свёртки не допускают произвольного изменения порядка операндов, но включены сюда благодаря своей полезности.
- В случае
FIRST_NONZEROсвёртка возвращает значение из ненулевой полосы с наименьшим номером. - Все остальные операции свёртки являются полностью коммутативными и ассоциативными. Реализация может выбрать любой порядок обработки, но результат всегда будет одинаковым.
- Параметры:
-
op- операция, используемая для объединения значений полос -
m- маска, управляющая выбором полос - Возвращает:
- результат свёртки, накопленный из выбранных значений полос
- Исключения:
-
UnsupportedOperationException- если этот вектор не поддерживает запрошенную операцию - См. также:
lane
public abstract int lane(int i)
i
- Параметры:
-
i- индекс полосы - Возвращает:
- элемент полосы с индексом
i - Исключения:
-
IllegalArgumentException- если индекс выходит за пределы допустимого диапазона (< 0 || >= length())
withLane
public abstract IntVector withLane(int i, int e)
i значением e. Это операция между элементами вектора, которая ведет себя так, как если бы возвращала результат смешивания этого вектора с входным вектором, полученным путем трансляции значения e, и маской, у которой установлен только один элемент с индексом i.- Параметры:
-
i- индекс заменяемого элемента вектора -
e- помещаемое значение - Возвращает:
- результат замены элемента этого вектора с индексом
iзначениемe. - Выбрасывает:
-
IllegalArgumentException- если индекс находится вне допустимого диапазона (< 0 || >= length())
toArray
public final int[] toArray()
int[], содержащий значения всех элементов вектора. Длина массива совпадает с длиной вектора. Элементы массива располагаются в порядке элементов вектора. Этот метод ведет себя так, как если бы сохранял этот вектор в выделенный массив (с помощью intoArray) и возвращал этот массив следующим образом:
int[] a = new int[this.length()];
this.intoArray(a, 0);
return a;
toIntArray
public final int[] toIntArray()
int[], содержащий все значения элементов вектора, преобразованные к типу int. Длина массива совпадает с длиной вектора. Элементы массива преобразуются так, как если бы выполнялось приведение типов, и сохраняются в порядке элементов вектора. Эта операция может завершиться ошибкой, если тип элементов вектора —
float или double, а элементы вектора содержат дробные значения или значения вне допустимого диапазона. Если значение любого элемента вектора нельзя представить как int, выбрасывается исключение. Это псевдоним для toArray(). При использовании этого метода для векторов типа IntVector потери диапазона значений или точности не будет.- Определено в:
-
toIntArrayв классеVector<Integer> - Возвращает:
- массив
int[], содержащий значения элементов этого вектора - См. также:
toLongArray
public final long[] toLongArray()
long[], содержащий все значения элементов вектора, преобразованные к типу long. Длина массива совпадает с длиной вектора. Элементы массива преобразуются так, как если бы выполнялось приведение типов, и сохраняются в порядке элементов вектора. Эта операция может завершиться ошибкой, если тип элементов вектора —
float или double, а элементы вектора содержат дробные значения или значения вне допустимого диапазона. Если значение любого элемента вектора нельзя представить как long, выбрасывается исключение. - Определено в:
-
toLongArrayв классеVector<Integer> - Примечание по реализации:
- При использовании этого метода для векторов типа
IntVectorпотери точности или диапазона значений не будет, поэтому исключениеUnsupportedOperationExceptionне выбрасывается. - Возвращает:
- массив
long[], содержащий значения элементов этого вектора - См. также:
toDoubleArray
public final double[] toDoubleArray()
double[], содержащий все значения элементов вектора, преобразованные к типу double. Длина массива совпадает с длиной вектора. Элементы массива преобразуются так, как если бы выполнялось приведение типов, и сохраняются в порядке элементов вектора. Эта операция может привести к потере точности, если тип элементов вектора — long. - Определено в:
-
toDoubleArrayв классеVector<Integer> - Примечание по реализации:
- При использовании этого метода для векторов типа
IntVectorпотери точности не будет. - Возвращает:
- массив
double[], содержащий значения элементов этого вектора, которые могут быть округлены до представимых значенийdouble - См. также:
fromArray
public static IntVector fromArray(VectorSpecies<Integer> species, int[] a, int offset)
int[], начиная с указанного смещения. Для каждого элемента вектора, где N — индекс элемента вектора, элемент массива с индексом offset + N помещается в результирующий вектор с индексом N.- Параметры:
-
species- вид требуемого вектора -
a- массив -
offset- смещение в массиве - Возвращает:
- вектор, загруженный из массива
- Выбрасывает:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора
fromArray
public static IntVector fromArray(VectorSpecies<Integer> species, int[] a, int offset, VectorMask<Integer> m)
int[], начиная с указанного смещения и используя маску. Элементы, для которых маска не установлена, заполняются значением по умолчанию для int (нулем). Для каждого элемента вектора, где N — индекс элемента вектора, если элемент маски с индексом N установлен, то элемент массива с индексом offset + N помещается в результирующий вектор с индексом N; в противном случае в результирующий вектор с индексом N помещается значение элемента по умолчанию.- Параметры:
-
species- вид требуемого вектора -
a- массив -
offset- смещение в массиве -
m- маска, управляющая выбором элементов - Возвращает:
- вектор, загруженный из массива
- Выбрасывает:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора, для которого установлена маска
fromArray
public static IntVector fromArray(VectorSpecies<Integer> species, int[] a, int offset, int[] indexMap, int mapOffset)
int[], используя индексы, полученные путем прибавления фиксированного значения offset к последовательности дополнительных смещений из карты индексов. Карта индексов — это непрерывная последовательность из VLENGTH элементов во втором массиве типа int, начинающаяся с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, элемент загружается из элемента массива a[f(N)], где f(N) — выражение для вычисления индекса offset + indexMap[mapOffset + N]].
- Параметры:
-
species- вид требуемого вектора -
a- массив -
offset- смещение в массиве; может быть отрицательным, если относительные индексы в карте индексов компенсируют его и обеспечивают попадание значения в границы массива -
indexMap- карта индексов -
mapOffset- смещение в карте индексов - Возвращает:
- вектор, загруженный из элементов массива с заданными индексами
- Выбрасывает:
-
IndexOutOfBoundsException- еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора - См. также:
fromArray
public static IntVector fromArray(VectorSpecies<Integer> species, int[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Integer> m)
int[] под управлением маски, используя индексы, полученные путем прибавления фиксированного значения offset к последовательности дополнительных смещений из карты индексов. Карта индексов — это непрерывная последовательность из VLENGTH элементов во втором массиве типа int, начинающаяся с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, если элемент маски установлен, то элемент загружается из элемента массива a[f(N)], где f(N) — выражение для вычисления индекса offset + indexMap[mapOffset + N]]. Неустановленные элементы результирующего вектора получают значение нуля.
- Параметры:
-
species- вид требуемого вектора -
a- массив -
offset- смещение в массиве; может быть отрицательным, если относительные индексы в карте индексов компенсируют его и обеспечивают попадание значения в границы массива -
indexMap- карта индексов -
mapOffset- смещение в карте индексов -
m- маска, управляющая выбором элементов - Возвращает:
- вектор, загруженный из элементов массива с заданными индексами
- Выбрасывает:
-
IndexOutOfBoundsException- еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора, для которого установлена маска - См. также:
fromMemorySegment
public static IntVector fromMemorySegment(VectorSpecies<Integer> species, MemorySegment ms, long offset, ByteOrder bo)
Этот метод ведет себя так, как если бы возвращал результат вызова fromMemorySegment() следующим образом:
var m = species.maskAll(true);
return fromMemorySegment(species, ms, offset, bo, m);
- Параметры:
-
species- вид требуемого вектора -
ms- сегмент памяти -
offset- смещение в сегменте памяти -
bo- требуемый порядок байтов - Возвращает:
- вектор, загруженный из сегмента памяти
- Выбрасывает:
-
IndexOutOfBoundsException- еслиoffset+N*4 < 0илиoffset+N*4 >= ms.byteSize()для любого элементаNвектора -
IllegalStateException- если сеанс сегмента памяти не активен или доступ выполняется из потока, отличного от потока-владельца сеанса. - Начиная с:
- 19
fromMemorySegment
public static IntVector fromMemorySegment(VectorSpecies<Integer> species, MemorySegment ms, long offset, ByteOrder bo, VectorMask<Integer> m)
int (нулем). Байты объединяются в примитивные элементы вектора в соответствии с указанным порядком байтов. Элементы вектора упорядочиваются в соответствии с порядком байтов в памяти. Следующий псевдокод иллюстрирует поведение:
var slice = ms.asSlice(offset);
int[] ar = new int[species.length()];
for (int n = 0; n < ar.length; n++) {
if (m.laneIsSet(n)) {
ar[n] = slice.getAtIndex(ValuaLayout.JAVA_INT.withByteAlignment(1), n);
}
}
IntVector r = IntVector.fromArray(species, ar, 0);
- Примечание по реализации:
- Эта операция, вероятно, будет более эффективной, если указанный порядок байтов совпадает с собственным порядком байтов платформы, поскольку в этом случае методу не потребуется менять порядок байтов значений элементов вектора.
- Параметры:
-
species- вид требуемого вектора -
ms- сегмент памяти -
offset- смещение в сегменте памяти -
bo- требуемый порядок байтов -
m- маска, управляющая выбором элементов - Возвращает:
- вектор, загруженный из сегмента памяти
- Выбрасывает:
-
IndexOutOfBoundsException- еслиoffset+N*4 < 0илиoffset+N*4 >= ms.byteSize()для любого элементаNвектора, для которого установлена маска -
IllegalStateException- если сеанс сегмента памяти не активен или доступ выполняется из потока, отличного от потока-владельца сеанса. - Начиная с:
- 19
intoArray
public final void intoArray(int[] a, int offset)
int[], начиная с указанного смещения. Для каждого элемента вектора, где N — индекс элемента вектора, элемент вектора с индексом N сохраняется в элемент массива a[offset+N].
- Параметры:
-
a- массив типаint[] -
offset- смещение в массиве - Выбрасывает:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора
intoArray
public final void intoArray(int[] a, int offset, VectorMask<Integer> m)
int[], начиная с указанного смещения и используя маску. Для каждого элемента вектора, где N — индекс элемента вектора, элемент вектора с индексом N сохраняется в элемент массива a[offset+N]. Если элемент маски с индексом N не установлен, соответствующий элемент массива a[offset+N] остается без изменений.
Проверка границ массива выполняется для элементов, для которых установлена маска. Неустановленные элементы не сохраняются и не обязаны соответствовать допустимым элементам a. То есть неустановленные элементы могут соответствовать индексам массива меньше нуля или выходящим за пределы массива.
- Параметры:
-
a- массив типаint[] -
offset- смещение в массиве -
m- маска, управляющая сохранением элементов - Выбрасывает:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора, для которого установлена маска
intoArray
public final void intoArray(int[] a, int offset, int[] indexMap, int mapOffset)
int[], используя индексы, полученные путем прибавления фиксированного значения offset к последовательности дополнительных смещений из карты индексов. Карта индексов — это непрерывная последовательность из VLENGTH элементов во втором массиве типа int, начинающаяся с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, элемент вектора с индексом N сохраняется в элемент массива a[f(N)], где f(N) — выражение для вычисления индекса offset + indexMap[mapOffset + N]].
- Параметры:
-
a- массив -
offset- смещение, которое нужно объединить со смещениями из карты индексов -
indexMap- карта индексов -
mapOffset- смещение в карте индексов - Выбрасывает:
-
IndexOutOfBoundsException- еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора - См. также:
intoArray
public final void intoArray(int[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Integer> m)
int[] под управлением маски, используя индексы, полученные путем прибавления фиксированного значения offset к последовательности дополнительных смещений из карты индексов. Карта индексов — это непрерывная последовательность из VLENGTH элементов во втором массиве типа int, начинающаяся с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, если элемент маски с индексом N установлен, то элемент вектора с индексом N сохраняется в элемент массива a[f(N)], где f(N) — выражение для вычисления индекса offset + indexMap[mapOffset + N]].
- Параметры:
-
a- массив -
offset- смещение, которое нужно объединить со смещениями из карты индексов -
indexMap- карта индексов -
mapOffset- смещение в карте индексов -
m- маска - Выбрасывает:
-
IndexOutOfBoundsException- еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора, для которого установлена маска - См. также:
intoMemorySegment
public final void intoMemorySegment(MemorySegment ms, long offset, ByteOrder bo)
Байты извлекаются из примитивных элементов вектора в соответствии с указанным порядком байтов. Элементы сохраняются в соответствии с их порядком байтов в памяти.
Этот метод ведет себя так, как если бы вызывал intoMemorySegment() следующим образом:
var m = maskAll(true);
intoMemorySegment(ms, offset, bo, m);
- Определено в:
-
intoMemorySegmentв классеVector<Integer> - Параметры:
-
ms- сегмент памяти -
offset- смещение в сегменте памяти -
bo- требуемый порядок байтов - Начиная с:
- 19
intoMemorySegment
public final void intoMemorySegment(MemorySegment ms, long offset, ByteOrder bo, VectorMask<Integer> m)
Байты извлекаются из примитивных элементов вектора в соответствии с указанным порядком байтов. Элементы сохраняются в соответствии с их порядком байтов в памяти.
Следующий псевдокод иллюстрирует поведение, где JAVA_E — это разметка примитивного типа элемента, ETYPE — примитивный тип элемента, а EVector — примитивный тип вектора для этого вектора:
ETYPE[] a = this.toArray();
var slice = ms.asSlice(offset)
for (int n = 0; n < a.length; n++) {
if (m.laneIsSet(n)) {
slice.setAtIndex(ValueLayout.JAVA_E.withBitAlignment(8), n);
}
}
- Определено в:
-
intoMemorySegmentв классеVector<Integer> - Параметры:
-
ms- сегмент памяти -
offset- смещение в сегменте памяти -
bo- требуемый порядок байтов -
m- маска, управляющая выбором элементов - Начиная с:
- 19
reinterpretAsBytes
public final ByteVector reinterpretAsBytes()
byte; байты извлекаются из элементов в порядке от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(byte.class)). Его можно считать обратным по отношению к различным методам, объединяющим байты в более крупные элементы вектора, например Vector.reinterpretAsInts(). - Определено в:
-
reinterpretAsBytesв классеVector<Integer> - Возвращает:
ByteVectorтой же формы и с тем же информационным содержимым- См. также:
viewAsIntegralLanes
public final IntVector viewAsIntegralLanes()
VSHAPE или VLENGTH, а побитовое содержимое вектора остается неизменным. Если ETYPE вектора уже является целочисленным типом, возвращается тот же вектор без изменений. Этот метод возвращает значение выражения convert(conv,0), где conv — это VectorOperators.Conversion.ofReinterpret(E.class,F.class), а F — тип без плавающей точки того же размера, что и E. - Определено в:
-
viewAsIntegralLanesв классеVector<Integer> - Возвращает:
- исходный вектор, переинтерпретированный как вектор без плавающей точки
- См. также:
viewAsFloatingLanes
public final FloatVector viewAsFloatingLanes()
VSHAPE или VLENGTH, а побитовое содержимое вектора остается неизменным. Если ETYPE вектора уже является типом с плавающей точкой, возвращается тот же вектор без изменений. Если размер элемента вектора не соответствует размеру ни одного типа с плавающей точкой, выбрасывается IllegalArgumentException. Этот метод возвращает значение выражения convert(conv,0), где conv — это VectorOperators.Conversion.ofReinterpret(E.class,F.class), а F — тип с плавающей точкой того же размера, что и E, если такой тип существует. - Определено в:
-
viewAsFloatingLanesв классеVector<Integer> - Возвращает:
- исходный вектор, переинтерпретированный как вектор с плавающей точкой
- См. также:
toString
public final String toString()
"[0,1,2...]", содержащее значения его элементов в порядке элементов вектора. Строка формируется так, как если бы вызывался метод Arrays.toString(), соответствующий массиву типа int, возвращаемому методом this.toArray().equals
public final boolean equals(Object obj)
Сравнение значений элементов выполняется так, как если бы вызывался метод Arrays.equals(), соответствующий массивам, возвращаемым методом toArray() для обоих векторов.
hashCode
species
check
public final <F> Vector<F> check(VectorSpecies<F> species)
Vectorspecies == 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<Integer> maskAll(boolean bit)
Этот метод возвращает значение следующего выражения: species().maskAll(bit).
reinterpretAsShorts
public ShortVector reinterpretAsShorts()
short; элементы формируются из последовательных байтов в порядке little-endian. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(short.class)). Его можно считать обратной операцией к Vector.reinterpretAsBytes(). - Указано в:
-
reinterpretAsShortsв классеVector<E> - Возвращает:
ShortVectorтой же формы и с тем же информационным содержимым
reinterpretAsInts
public IntVector reinterpretAsInts()
int; элементы формируются из последовательных байтов в порядке little-endian. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(int.class)). Его можно считать обратной операцией к Vector.reinterpretAsBytes(). - Указано в:
-
reinterpretAsIntsв классеVector<E> - Возвращает:
IntVectorтой же формы и с тем же информационным содержимым
reinterpretAsLongs
public LongVector reinterpretAsLongs()
long; элементы формируются из последовательных байтов в порядке little-endian. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(long.class)). Его можно считать обратной операцией к Vector.reinterpretAsBytes(). - Указано в:
-
reinterpretAsLongsв классеVector<E> - Возвращает:
LongVectorтой же формы и с тем же информационным содержимым
reinterpretAsFloats
public FloatVector reinterpretAsFloats()
float; элементы формируются из последовательных байтов в порядке little-endian. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(float.class)). Его можно считать обратной операцией к Vector.reinterpretAsBytes(). - Указано в:
-
reinterpretAsFloatsв классеVector<E> - Возвращает:
FloatVectorтой же формы и с тем же информационным содержимым
reinterpretAsDoubles
public DoubleVector reinterpretAsDoubles()
double; элементы формируются из последовательных байтов в порядке little-endian. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(double.class)). Его можно считать обратной операцией к Vector.reinterpretAsBytes(). - Указано в:
-
reinterpretAsDoublesв классеVector<E> - Возвращает:
DoubleVectorтой же формы и с тем же информационным содержимым
convert
public final <F> Vector<F> convert(VectorOperators.Conversion<Integer,F> conv, int part)
ETYPE в новый тип элементов (далее — FTYPE) в соответствии с указанным преобразованием. Эта поэлементная операция, сохраняющая форму, копирует значения ETYPE из входного вектора в соответствующие значения FTYPE результата. В зависимости от выбранного преобразования эта операция может расширять или сужать логический результат; в таком случае ненулевое значение part может дополнительно управлять выбором и размещением логического результата в физическом выходном векторе. Каждое конкретное преобразование описывается константой преобразования в классе VectorOperators. Для каждого оператора преобразования заданы тип домена и тип диапазона. Тип домена должен точно совпадать с типом элементов входного вектора, а тип диапазона определяет тип элементов выходных векторов.
Оператор преобразования может быть классифицирован как преобразование без изменения размера, расширяющее или сужающее — в зависимости от того, равен ли размер в битах типа домена размеру типа диапазона, меньше или больше него соответственно.
Независимо от этого, операции преобразования можно классифицировать как переинтерпретирующие или преобразующие значение — в зависимости от того, копирует ли преобразование биты представления без изменений или меняет их, чтобы сохранить (частично или полностью) логическое значение входного значения.
Если переинтерпретирующее преобразование сужает значение, оно отбрасывает старшие биты входных данных. Если оно расширяет значение, то дополняет старшие биты выходных данных нулями, когда соответствующих входных битов нет.
Расширяющее преобразование, например S2I (значение short в int), принимает скалярное значение и представляет его в более широком формате (всегда с некоторой избыточностью информации). Сужающее преобразование, например D2F (значение double в float), принимает скалярное значение и представляет его в более узком формате (всегда с некоторой потерей информации). Некоторые преобразования без изменения размера также могут приводить к потере информации, например L2D (значение long в double) или F2I (значение float в int). Переинтерпретирующие преобразования без изменения размера не приводят к потере информации, если только побитовое значение каким-либо образом не является допустимым для выходного типа. Преобразование битового шаблона значения NaN может отбросить биты мантиссы NaN.
Эта классификация важна, поскольку, если не указано иное, операции преобразования никогда не меняют форму вектора, независимо от того, как они изменяют размеры элементов. Поэтому расширяющее преобразование не может сохранить все результаты в выходном векторе: в выходном векторе меньше элементов большего размера, чтобы общий размер в битах совпадал с размером входного вектора. Аналогично, сужающее преобразование должно сохранять сравнительно небольшие результаты в части элементов выходного вектора, а неиспользуемые элементы по умолчанию заполняются нулями.
Например, преобразование из byte в long (M=8) отбросит 87,5 % входных значений, чтобы преобразовать оставшиеся 12,5 % в достаточно вместительные элементы long выходного вектора. Обратное преобразование преобразует все большие результаты обратно, но при этом 87,5 % элементов выходного вектора будут потрачены впустую. Преобразования без изменения размера (M=1) выдают все результаты в одном выходном векторе, не расходуя элементы впустую.
Чтобы управлять особенностями этих расширений и сужений, ненулевой параметр part выбирает частичные результаты при расширении или направляет результаты сужения в соответствующие позиции следующим образом:
- расширение в
Mраз:partдолжно находиться в диапазоне[0..M-1]и выбирает блок изVLENGTH/Mвходных элементов, начиная с исходного элемента с индексомpart*VLENGTH/M.VLENGTH/Mвыходных элементов представляют собой частичный срез полного логического результата преобразования и заполняют весь физический выходной вектор. - сужение в
Mраз:partдолжно находиться в диапазоне[-M+1..0]и направляет всеVLENGTHвходных элементов в выходные данные, начиная с исходного элемента-part*VLENGTH. Всего имеетсяVLENGTH*Mвыходных элементов; элементы, не содержащие преобразованных входных значений, заполняются нулями.Группу таких выходных векторов, в которых части логического результата направлены в непересекающиеся блоки, можно собрать с помощью оператора побитового ИЛИ или (для чисел с плавающей запятой) оператора
FIRST_NONZERO. - без изменения размера (
M=1):partдолжно быть равно нулю. Оба вектора имеют одинаковое значениеVLENGTH. Результат всегда размещается с исходного элемента с индексом ноль.
Этот метод представляет собой ограниченную версию более общего, но реже используемого метода с изменением формы convertShape(). Результат этого метода совпадает с выражением this.convertShape(conv, rsp, this.broadcast(part)), где выходной вид — rsp=this.species().withLanes(FTYPE.class).
- Указано в:
-
convertв классеVector<E> - Параметры типа:
F— упакованный тип элементов вида- Параметры:
-
conv— требуемое скалярное преобразование, применяемое поэлементно -
part— номер части результата или ноль, если преобразование не расширяет и не сужает данные - Возвращает:
- вектор, полученный из этого вектора преобразованием формы и типа элементов
- См. также:
castShape
public final <F> Vector<F> castShape(VectorSpecies<F> toSpecies, int part)
convertShape(conv,rsp,part), где conv — это VectorOperators.Conversion.ofCast(E.class,F.class). Если старый и новый виды имеют разную форму, это операция с изменением формы, которая может иметь особые издержки реализации.
- Указано в:
-
castShapeв классеVector<E> - Параметры типа:
F— упакованный тип элементов выходного вида- Параметры:
-
toSpecies— требуемый выходной вид -
part— номер части результата или ноль, если преобразование не расширяет и не сужает данные - Возвращает:
- вектор, полученный из этого вектора преобразованием типа элементов
- См. также:
convertShape
public abstract <F> Vector<F> convertShape(VectorOperators.Conversion<Integer,F> conv, VectorSpecies<F> rsp, int part)
ETYPE в новый тип элементов (далее — FTYPE) в соответствии с указанным преобразованием. Эта поэлементная операция копирует значения ETYPE из входного вектора в соответствующие значения FTYPE результата. Если старый и новый виды имеют одинаковую форму, поведение полностью совпадает с поведением более простого метода, сохраняющего форму: convert(). В таких случаях следует использовать более простой метод convert(), чтобы код было легче анализировать. В противном случае это операция с изменением формы, которая может иметь особые издержки реализации.
Совместное влияние изменений формы и размера элементов может привести к тому, что входной и выходной виды будут иметь разное количество элементов, что вызовет расширение или сужение. В этом случае ненулевой параметр part выбирает частичные результаты из расширенного логического результата или направляет результаты суженного логического результата в физический выходной вектор требуемого выходного вида.
Следующий псевдокод иллюстрирует поведение этого метода для преобразований без изменения размера, расширяющих и сужающих. (Этот псевдокод также применим к методу, сохраняющему форму, но с ограничениями на форму выходного вида.) Обратите внимание: для любой конкретной комбинации оператора преобразования и форм применим только один из трех путей выполнения.
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);
- Указано в:
-
convertShapeв классеVector<E> - Параметры типа:
F— упакованный тип элементов выходного вида- Параметры:
-
conv— требуемое скалярное преобразование, применяемое поэлементно -
rsp— требуемый выходной вид -
part— номер части результата или ноль, если преобразование не расширяет и не сужает данные - Возвращает:
- вектор, полученный из этого вектора преобразованием типа элементов
- См. также:
getPayload
protected final Object getPayload()
© 1993, 2025, 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/25/docs/api/jdk.incubator.vector/jdk/incubator/vector/IntVector.html