Интерфейс SequenceLayout
- Все суперинтерфейсы:
MemoryLayout
public sealed interface SequenceLayout extends MemoryLayout
MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
MemoryLayout.structLayout(
ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
- Требования к реализации:
- Этот класс неизменяемый, потокобезопасный и основанный на значении.
- Начиная с:
- 22
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе MemoryLayout
MemoryLayout.PathElement | Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
MemoryLayout.PathElement |
Элемент в пути макета. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
long |
elementCount() |
Возвращает число элементов этого последовательного макета. |
MemoryLayout |
elementLayout() |
Возвращает макет элемента этого последовательного макета. |
SequenceLayout |
flatten() |
Возвращает уплощённый последовательный макет. |
SequenceLayout |
reshape |
Переупорядочивает элементы этого последовательного макета, преобразуя его в многомерный последовательный макет. |
SequenceLayout |
withByteAlignment |
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах). |
SequenceLayout |
withElementCount |
Возвращает последовательный макет с теми же характеристиками, что и у этого макета, но с заданным числом элементов. |
SequenceLayout |
withName |
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем. |
Методы, объявленные в интерфейсе MemoryLayout
arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle, withoutName | Модификатор и тип | Метод | Описание |
|---|---|---|
VarHandle |
arrayElementVarHandle |
Создаёт дескриптор переменной, который обращается к соседним элементам сегмента памяти по смещениям, выбранным заданным путем макета, причем доступные элементы имеют этот макет, а начальным макетом в пути является этот макет. |
long |
byteAlignment() |
Возвращает ограничение выравнивания, связанное с этим макетом и выраженное в байтах. |
long |
byteOffset |
Вычисляет смещение в байтах макета, выбранного заданным путем макета, где начальным макетом в пути является этот макет. |
MethodHandle |
byteOffsetHandle |
Создаёт дескриптор метода, вычисляющий смещение в байтах макета, выбранного заданным путем макета, где начальным макетом в пути является этот макет. |
long |
byteSize() |
Возвращает размер макета в байтах. |
boolean |
equals |
Сравнивает указанный объект с этим макетом на равенство. |
int |
hashCode() |
Возвращает хеш-код этого макета. |
Optional |
name() |
Возвращает имя (если оно есть), связанное с этим макетом. |
long |
scale |
Возвращает offset + (byteSize() * index). |
MethodHandle |
scaleHandle() |
Возвращает дескриптор метода, который можно использовать для вызова MemoryLayout.scale(long, long) для этого макета. |
MemoryLayout |
select |
Возвращает макет, выбранный по заданному пути, где начальным макетом в пути является этот макет. |
MethodHandle |
sliceHandle |
Создаёт дескриптор метода, который принимает сегмент памяти и возвращает срез, соответствующий макету, выбранному заданным путем макета, где начальным макетом в пути является этот макет. |
String |
toString() |
Возвращает строковое представление этого макета. |
VarHandle |
varHandle |
Создаёт дескриптор переменной, который обращается к сегменту памяти по смещению, выбранному заданным путем макета, где начальным макетом в пути является этот макет. |
MemoryLayout |
withoutName() |
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но без имени. |
Подробное описание методов
elementLayout
MemoryLayout elementLayout()
- Возвращает:
- макет элемента этого последовательного макета
elementCount
long elementCount()
- Возвращает:
- число элементов этого последовательного макета
withElementCount
SequenceLayout withElementCount(long elementCount)
- Параметры:
-
elementCount— новое число элементов - Возвращает:
- последовательный макет с теми же характеристиками, что и у этого макета, но с заданным числом элементов
- Вызывает исключение:
-
IllegalArgumentException— еслиelementCountотрицательно -
IllegalArgumentException— если происходит переполнениеelementLayout.bitSize() * elementCount
reshape
SequenceLayout reshape(long... elementCounts)
Например, для последовательного макета вида:
var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
seq.reshape(2, 6) даст следующий последовательный макет: var reshapeSeq = MemoryLayout.sequenceLayout(2, MemoryLayout.sequenceLayout(6, ValueLayout.JAVA_INT));
Если одно из заданных чисел элементов является специальным значением -1, число элементов в этой позиции будет вычислено по остальным числам элементов и числу элементов в уплощённом представлении этого макета. Например, макет, эквивалентный указанному выше reshapeSeq, можно также вычислить следующими способами:
var reshapeSeqImplicit1 = seq.reshape(-1, 6);
var reshapeSeqImplicit2 = seq.reshape(2, -1);
- Параметры:
-
elementCounts— массив чисел элементов, не более одного из которых может быть-1 - Возвращает:
- последовательный макет, в котором макеты элементов из уплощённого представления этого последовательного макета (см.
flatten()) переупорядочены в один или несколько вложенных последовательных макетов - Вызывает исключение:
-
IllegalArgumentException— если двум или более числам элементов присвоено значение-1, либо если одно или несколько чисел элементов равны<= 0(но не-1), либо если после необходимого вычисления произведение чисел элементов не равно числу элементов в уплощённом представлении этого последовательного макета
flatten
SequenceLayout flatten()
MemoryLayout flatElementLayout(SequenceLayout sequenceLayout) {
return switch (sequenceLayout.elementLayout()) {
case SequenceLayout nestedSequenceLayout -> flatElementLayout(nestedSequenceLayout);
case MemoryLayout layout -> layout;
};
}
Это преобразование сохраняет размер макета; вложенные последовательные макеты в этом последовательном макете удаляются, а их числа элементов учитываются в числе элементов возвращённого последовательного макета. Например, для последовательного макета вида:
var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
seq.flatten() даст следующий последовательный макет: var flattenedSeq = MemoryLayout.sequenceLayout(12, ValueLayout.JAVA_INT);
- Возвращает:
- последовательный макет того же размера, что и этот макет (но, возможно, с другим числом элементов), макет элемента которого не является последовательным макетом
withName
SequenceLayout withName(String name)
- Переопределено из:
-
withNameв интерфейсеMemoryLayout - Параметры:
-
name— имя макета - Возвращает:
- макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем
- См. также:
withByteAlignment
SequenceLayout withByteAlignment(long byteAlignment)
- Переопределено из:
-
withByteAlignmentв интерфейсеMemoryLayout - Параметры:
-
byteAlignment— ограничение выравнивания макета, выраженное в байтах - Возвращает:
- макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах)
- Вызывает исключение:
-
IllegalArgumentException— еслиbyteAlignmentне является степенью двойки -
IllegalArgumentException— еслиbyteAlignment < elementLayout().byteAlignment()
© 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.