Spec-Zone.ru › OpenJDK 25

Интерфейс 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));
Требования к реализации:
Этот класс неизменяемый, потокобезопасный и основан на значении (value-based).
Начиная с версии:
22

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

Вложенные классы и интерфейсы, объявленные в интерфейсе 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)
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем.

Методы, объявленные в интерфейсе 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 или если одно или несколько чисел элементов равны <= 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 — имя макета
Возвращает:
макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем
См. также:
  • MemoryLayout.name()

withByteAlignment

SequenceLayout withByteAlignment(long byteAlignment)
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах).
Определено в:
withByteAlignment в интерфейсе MemoryLayout
Параметры:
byteAlignment — ограничение выравнивания макета, выраженное в байтах
Возвращает:
макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах)
Вызывает исключение:
IllegalArgumentException — если byteAlignment не является степенью двойки
IllegalArgumentException — если byteAlignment < elementLayout().byteAlignment()

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, где представлены более подробные описания для разработчиков, обзоры основных концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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/java.base/java/lang/foreign/SequenceLayout.html

Spec-Zone.ru

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