Spec-Zone.ru › OpenJDK 24

Интерфейс 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

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе java.lang.foreign.MemoryLayout

MemoryLayout.PathElement

Краткое описание методов

Модификатор и тип Метод Описание
long elementCount()
Возвращает количество элементов этого макета последовательности.
MemoryLayout elementLayout()
Возвращает макет элемента этого макета последовательности.
SequenceLayout flatten()
Возвращает сплюснутый макет последовательности.
SequenceLayout reshape(long... elementCounts)
Переупорядочивает элементы в этом макете последовательности в многомерный макет последовательности.
SequenceLayout withByteAlignment(long byteAlignment)
Возвращает макет памяти с теми же характеристиками, что и этот макет, но с заданным ограничением выравнивания (в байтах).
SequenceLayout withElementCount(long elementCount)
Возвращает макет последовательности с теми же характеристиками, что и этот макет, но с заданным количеством элементов.
SequenceLayout withName(String name)
Возвращает макет памяти с теми же характеристиками, что и этот макет, но с заданным именем.

Методы, объявленные в интерфейсе java.lang.foreign.MemoryLayout

arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle, 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, или если одно или несколько количеств элементов отрицательны (кроме -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 - имя макета
Возвращает:
макет памяти с теми же характеристиками, что и этот макет, но с заданным именем
См. также:
  • 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/foreign/SequenceLayout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API