Интерфейс MemoryLayout
- Все суперинтерфейсы:
Constable
- Все известные реализующие классы:
-
GroupLayout,SequenceLayout,ValueLayout
public sealed interface MemoryLayout extends Constable permits SequenceLayout, GroupLayout, ValueLayout (not exhaustive)
ValueLayout) и макеты заполнения, которые, как следует из названия, используются для представления части сегмента памяти, содержимое которой должно быть проигнорировано, главным образом для выравнивания (см. paddingLayout(long)). Некоторые общие константы макета значений определены в классе MemoryLayouts. Более сложные макеты могут быть получены из более простых: последовательный макет обозначает повторение одного или нескольких макетов элементов (см. SequenceLayout); групповой макет обозначает агрегацию (как правило, разнородных) макетов членов (см. GroupLayout).
Например, рассмотрим следующее объявление структуры в C:
Вышеприведенное объявление можно смоделировать с помощью объекта макета следующим образом:typedef struct { char kind; int value; } TaggedValues[5];
SequenceLayout taggedValues = MemoryLayout.sequenceLayout(5, MemoryLayout.structLayout( MemoryLayout.valueLayout(8, ByteOrder.nativeOrder()).withName("kind"), MemoryLayout.paddingLayout(24), MemoryLayout.valueLayout(32, ByteOrder.nativeOrder()).withName("value") ) ).withName("TaggedValues");
Все реализации этого интерфейса должны быть базируемыми на значениях; программисты должны рассматривать экземпляры, которые равны, как взаимозаменяемые и не должны использовать их для синхронизации, иначе может произойти непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться неудачей. Метод equals должен использоваться для сравнения.
Классы, не относящиеся к платформе, не должны реализовывать MemoryLayout напрямую.
Если не указано иное, передача null аргумента или аргумента массива, содержащего один или несколько null элементов методу в этом классе, приводит к тому, что выбрасывается исключение NullPointerException.
Размер, выравнивание и порядок байтов
Все макеты имеют размер; размер макета для макетов значений и заполнения всегда явно указывается; это означает, что описание макета всегда имеет одинаковый размер в битах независимо от платформы, на которой он используется. Для производных макетов размер вычисляется следующим образом:- для конечного макета последовательности S, у которого макет элемента — E и размер — L, размер S равен размеру E, умноженному на L
- размер бесконечного макета последовательности — неизвестен
- для группового макета G с макетами членов M1, M2, ..., Mn, соответственно, размерами S1, S2, ..., Sn, размер G равен либо S1 + S2 + ... + Sn, либо max(S1, S2, ... Sn) в зависимости от того, является ли группа структурой или объединением, соответственно
Кроме того, все макеты имеют естественное выравнивание, которое можно определить следующим образом:
- для макета заполнения L естественное выравнивание равно 1 независимо от его размера; то есть в отсутствие явного ограничения на выравнивание макет заполнения не должен влиять на ограничение на выравнивание группового макета, в который он вложен
- для макета значения L, размер которого равен N, естественное выравнивание L равно N
- для макета последовательности S, у которого макет элемента — E, естественное выравнивание S равно естественному выравниванию E
- для группового макета G с макетами членов M1, M2, ..., Mn, соответственно, выравниваниями A1, A2, ..., An, естественное выравнивание G равно max(A1, A2 ... An)
withBitAlignment(long)), что может быть полезно для описания гипервыровненных макетов. Все макеты значений имеют явный порядок байтов (см. ByteOrder), который задается при создании макета.
Пути макета
Путь макета начинается с корневого макета (обычно группового или последовательного макета) и заканчивается вложенным в корневой макет макетом — это выбранный макет пути. Пути макетов обычно представляются как последовательность одного или нескольких экземпляровMemoryLayout.PathElement. Пути макетов, например, полезны для получения смещений произвольно вложенных макетов внутри другого макета (см. bitOffset(PathElement...)), для быстрого получения дескриптора доступа к памяти, соответствующего выбранному макету (см. varHandle(Class, PathElement...)), для выбора произвольно вложенного макета внутри другого макета (см. select(PathElement...)) или для преобразования вложенного элемента макета внутри другого макета (см. map(UnaryOperator, PathElement...)).
Такие пути макетов могут быть построены программно с помощью методов этого класса. Например, для данного экземпляра макета taggedValues, созданного как описано выше, мы можем получить смещение в битах макета члена, названного value, в первом элементе последовательности следующим образом:
Аналогично, мы можем выбрать макет члена, названныйlong valueOffset = taggedValues.bitOffset(PathElement.sequenceElement(0), PathElement.groupElement("value")); // yields 32
value, следующим образом: И мы также можем заменить макет, названныйMemoryLayout value = taggedValues.select(PathElement.sequenceElement(), PathElement.groupElement("value"));
value, другим макетом, следующим образом: То есть, вышеприведенное объявление идентично следующему, более подробному:MemoryLayout taggedValuesWithHole = taggedValues.map(l -> MemoryLayout.paddingLayout(32), PathElement.sequenceElement(), PathElement.groupElement("value"));
Пути макета могут содержать один или несколько свободных измерений. Например, путь макета, проходящий через неопределенный элемент последовательности (то есть, где один из компонентов пути был получен с помощью методаMemoryLayout taggedValuesWithHole = MemoryLayout.sequenceLayout(5, MemoryLayout.structLayout( MemoryLayout.valueLayout(8, ByteOrder.nativeOrder()).withName("kind"), MemoryLayout.paddingLayout(32), MemoryLayout.paddingLayout(32) ));
MemoryLayout.PathElement.sequenceElement()) имеет дополнительное свободное измерение, которое необходимо связать во время выполнения. Это важно при получении дескриптора доступа к памяти varHandle из макетов, как показано в следующем коде: Поскольку путь макета, построенный в приведенном выше примере, содержит ровно одно свободное измерение (поскольку он не указывает, какой макет члена, названныйVarHandle valueHandle = taggedValues.varHandle(int.class, PathElement.sequenceElement(), PathElement.groupElement("value"));
value, должен быть выбран из содержащего последовательности макета), следует, что дескриптор доступа к памяти varHandle valueHandle будет иметь дополнительную long координату доступа. Путь макета со свободными измерениями также может использоваться для создания дескриптора метода вычисления смещения с помощью метода bitOffset(PathElement...) или byteOffsetHandle(PathElement...). Опять же, свободные измерения переводятся в long параметры созданного дескриптора метода. Дескриптор метода может использоваться для вычисления смещений элементов последовательности в разных индексах, путем предоставления этих индексов при вызове дескриптора метода. Например:
MethodHandle offsetHandle = taggedValues.byteOffsetHandle(PathElement.sequenceElement(), PathElement.groupElement("kind")); long offset1 = (long) offsetHandle.invokeExact(1L); // 8 long offset2 = (long) offsetHandle.invokeExact(2L); // 16
Атрибуты макета
Макеты могут быть необязательно связаны с одним или несколькими атрибутами. Атрибут макета образует пару имя/значение, где имя — этоString, а значение — это Constable. Наиболее распространенным типом атрибута макета является имя макета (см. LAYOUT_NAME), пользовательское имя, которое может быть связано с макетами памяти и к которому можно обратиться при построении путей макетов.- Требования к реализации:
- Реализации этого интерфейса являются неизменяемыми, потокобезопасными и базируемыми на значениях.
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
MemoryLayout.PathElement |
Экземпляры этого класса используются для формирования путей макета. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
LAYOUT_NAME |
Имя атрибута, используемого для указания свойства имя макета памяти (см. name() и withName(String)). |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Optional<Constable> |
attribute |
Возвращает атрибут с заданным именем (если он существует). |
Stream<String> |
attributes() |
Возвращает поток имён атрибутов, связанных с этим макетом. |
long |
bitAlignment() |
Возвращает ограничение выравнивания, связанное с этим макетом, выраженное в битах. |
default long |
bitOffset |
Вычисляет смещение, в битах, макета, выбранного заданным путём макета, где путь рассматривается как укоренённый в этом макете. |
default MethodHandle |
bitOffsetHandle |
Создаёт обработчик метода, который может быть использован для вычисления смещения, в битах, макета, выбранного заданным путём макета, где путь рассматривается как укоренённый в этом макете. |
long |
bitSize() |
Вычисляет размер макета в битах. |
default long |
byteAlignment() |
Возвращает ограничение выравнивания, связанное с этим макетом, выраженное в байтах. |
default long |
byteOffset |
Вычисляет смещение, в байтах, макета, выбранного заданным путём макета, где путь рассматривается как укоренённый в этом макете. |
default MethodHandle |
byteOffsetHandle |
Создаёт обработчик метода, который может быть использован для вычисления смещения, в байтах, макета, выбранного заданным путём макета, где путь рассматривается как укоренённый в этом макете. |
default long |
byteSize() |
Вычисляет размер макета в байтах. |
Optional<? extends DynamicConstantDesc<? extends MemoryLayout>> |
describeConstable() |
|
boolean |
equals |
Сравнивает указанный объект с этим макетом на равенство. |
int |
hashCode() |
Возвращает значение хэш-кода для этого макета. |
boolean |
hasSize() |
Указан ли для этого макета размер? |
boolean |
isPadding() |
Является ли этот макет макетом заполнения (например, макет, созданный из paddingLayout(long)) ? |
default MemoryLayout |
map |
Создаёт преобразованную копию этого макета, где выбранный макет из пути, укоренённого в этом макете, заменяется результатом применения данного оператора. |
Optional<String> |
name() |
Возвращает имя (если оно есть), связанное с этим макетом. |
static MemoryLayout |
paddingLayout |
Создаёт новый макет заполнения заданного размера. |
default MemoryLayout |
select |
Выбирает макет из пути, укоренённого в этом макете. |
static SequenceLayout |
sequenceLayout |
Создаёт новый макет последовательности с заданным макетом элемента и количеством элементов. |
static SequenceLayout |
sequenceLayout |
Создаёт новый макет последовательности с неограниченным количеством элементов и заданным макетом элемента. |
default MethodHandle |
sliceHandle |
Создаёт обработчик метода, который, получив сегмент памяти, возвращает срез, соответствующий макету, выбранному заданным путём макета, где путь рассматривается как укоренённый в этом макете. |
static GroupLayout |
structLayout |
Создаёт новый макет группировки структура с заданными макетами членов. |
String |
toString() |
Возвращает строковое представление этого макета. |
static GroupLayout |
unionLayout |
Создаёт новый макет группировки объединение с заданными макетами членов. |
static ValueLayout |
valueLayout |
Создаёт макет значения заданного порядка байт и размера. |
default VarHandle |
varHandle |
Создаёт обработчик переменной доступа к памяти, который может быть использован для разыменования памяти в макете, выбранном заданным путём макета, где путь рассматривается как укоренённый в этом макете. |
MemoryLayout |
withAttribute |
Возвращает новый макет памяти, который имеет те же атрибуты, что и этот макет, плюс новый указанный атрибут. |
MemoryLayout |
withBitAlignment |
Создаёт новый макет с желаемым ограничением выравнивания. |
MemoryLayout |
withName |
Создаёт новый макет с желаемым именем макета. |
Подробное описание полей
LAYOUT_NAME
static final String LAYOUT_NAME
name() и withName(String)).- См. также:
Подробное описание методов
describeConstable
Optional<? extends DynamicConstantDesc<? extends MemoryLayout>> describeConstable()
Optional, содержащий номинальный дескриптор для данного макета, если он может быть построен, или пустой Optional, если он не может быть построен.- Задано в:
-
describeConstableв интерфейсеConstable - Возвращает:
Optional, содержащий результирующий номинальный дескриптор, или пустойOptional, если он не может быть построен.
hasSize
boolean hasSize()
SequenceLayout.elementCount()). Макеты значений (см. ValueLayout) и макеты заполнения (см. paddingLayout(long)) всегда имеют определённый размер, поэтому этот метод всегда возвращает true в этих случаях.- Возвращает:
-
true, если у этого макета есть заданный размер.
bitSize
long bitSize()
- Возвращает:
- размер макета в битах.
- Выбрасывает:
-
UnsupportedOperationException- если макет является или содержит макет последовательности с неопределённым размером (см.SequenceLayout).
byteSize
default long byteSize()
- Возвращает:
- размер макета в байтах.
- Выбрасывает:
-
UnsupportedOperationException- если макет является или содержит макет последовательности с неопределённым размером (см.SequenceLayout), или еслиbitSize()не кратно 8.
name
Optional<String> name()
Это эквивалентно следующему коду:
attribute(LAYOUT_NAME).map(String.class::cast);
- Возвращает:
- имя макета (если есть).
- См. также:
withName
MemoryLayout withName(String name)
Это эквивалентно следующему коду:
withAttribute(LAYOUT_NAME, name);
- Параметры:
-
name- имя макета. - Возвращает:
- новый макет, такой же, как этот, за исключением связанного с ним имени.
- См. также:
bitAlignment
long bitAlignment()
A, которая представляет собой битовое выравнивание макета. Если A <= 8, то A/8 - это количество байтов, которые должны быть выровнены для любого указателя, правильно указывающего на этот макет. Таким образом: -
A=8означает отсутствие выравнивания (в обычном понимании), что часто используется в пакетах. -
A=64означает выравнивание по слову (на LP64),A=32- по целым числам,A=16- по коротким целым числам и т.д. -
A=512- самое строгое выравнивание, необходимое для x86/SV ABI (для данных AVX-512).
withBitAlignment(long)), то этот метод возвращает ограничение естественного выравнивания (в битах), связанное с этим макетом.- Возвращает:
- ограничение выравнивания макета в битах.
byteAlignment
default long byteAlignment()
A, которая представляет собой байтовое выравнивание макета, где A - это количество байтов, которые должны быть выровнены для любого указателя, правильно указывающего на этот макет. Таким образом: -
A=1означает отсутствие выравнивания (в обычном понимании), что часто используется в пакетах. -
A=8означает выравнивание по слову (на LP64),A=4- по целым числам,A=2- по коротким целым числам и т.д. -
A=64- самое строгое выравнивание, необходимое для x86/SV ABI (для данных AVX-512).
withBitAlignment(long)), то этот метод возвращает ограничение естественного выравнивания (в байтах), связанное с этим макетом.- Возвращает:
- ограничение выравнивания макета в байтах.
- Выбрасывает:
-
UnsupportedOperationException- еслиbitAlignment()не кратно 8.
withBitAlignment
MemoryLayout withBitAlignment(long bitAlignment)
- Параметры:
-
bitAlignment- ограничение выравнивания макета, выраженное в битах. - Возвращает:
- новый макет, такой же, как этот, за исключением связанного с ним ограничения выравнивания.
- Выбрасывает:
-
IllegalArgumentException- еслиbitAlignmentне является степенью двойки или меньше 8.
attribute
Optional<Constable> attribute(String name)
- Параметры:
-
name- имя атрибута - Возвращает:
- атрибут с заданным именем (если он существует).
withAttribute
MemoryLayout withAttribute(String name, Constable value)
- Параметры:
-
name- имя атрибута. -
value- значение атрибута. - Возвращает:
- новый макет памяти, который имеет те же атрибуты, что и этот макет, плюс новый указанный атрибут.
attributes
Stream<String> attributes()
- Возвращает:
- поток имён атрибутов, связанных с этим макетом.
bitOffset
default long bitOffset(MemoryLayout.PathElement... elements)
- Параметры:
-
elements- элементы пути макета. - Возвращает:
- Смещение, в битах, макета, выбранного путём макета в
elements. - Выбрасывает:
-
IllegalArgumentException- если путь макета не выбирает ни один вложенный макет в этом макете, или если путь макета содержит один или несколько элементов пути, выбирающих несколько индексов элементов последовательности (см.MemoryLayout.PathElement.sequenceElement()иMemoryLayout.PathElement.sequenceElement(long, long)). -
UnsupportedOperationException- если у одного из макетов, пройденных путём макета, неопределён размер. -
NullPointerException- если либоelements == null, или если любой из элементов вelementsявляетсяnull.
bitOffsetHandle
default MethodHandle bitOffsetHandle(MemoryLayout.PathElement... elements)
Возвращаемый обработчик метода имеет тип возвращаемого значения long, и содержит столько типов параметров long, сколько свободных измерений в предоставленном пути макета (см. MemoryLayout.PathElement.sequenceElement(), где порядок параметров соответствует порядку элементов пути. Возвращаемый обработчик метода может использоваться для вычисления смещения макета, аналогично bitOffset(PathElement...), но некоторые индексы последовательности указываются только при вызове обработчика метода.
Конечное смещение, возвращаемое обработчиком метода, вычисляется следующим образом:
гдеoffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
x_1, x_2, ... x_n являются динамическими значениями, предоставленными в качестве long аргументов, в то время как c_1, c_2, ... c_m являются статическими константами смещения, а s_0, s_1, ... s_n — статическими константами шага, которые выводятся из пути макета.- Параметры:
-
elements- элементы пути макета. - Возвращает:
- обработчик метода, который может использоваться для вычисления смещения в битах элемента макета, указанного заданными элементами пути макета, при предоставлении недостающих индексов элемента последовательности.
- Исключения:
-
IllegalArgumentException- если путь макета содержит один или несколько элементов пути, которые выбирают несколько индексов элемента последовательности (см.MemoryLayout.PathElement.sequenceElement(long, long)). -
UnsupportedOperationException- если у одного из макетов, пройденных по пути макета, размер не указан.
byteOffset
default long byteOffset(MemoryLayout.PathElement... elements)
- Параметры:
-
elements- элементы пути макета. - Возвращает:
- Смещение в байтах макета, выбранного путём макета, в
elements. - Исключения:
-
IllegalArgumentException- если путь макета не выбирает макет, вложенный в этот макет, или если путь макета содержит один или несколько элементов пути, которые выбирают несколько индексов элемента последовательности (см.MemoryLayout.PathElement.sequenceElement()иMemoryLayout.PathElement.sequenceElement(long, long)). -
UnsupportedOperationException- если у одного из макетов, пройденных по пути макета, размер не указан, или еслиbitOffset(elements)не кратно 8. -
NullPointerException- если либоelements == null, или если любой из элементов вelementsявляетсяnull.
byteOffsetHandle
default MethodHandle byteOffsetHandle(MemoryLayout.PathElement... elements)
Возвращаемый обработчик метода имеет тип возвращаемого значения long, и содержит столько типов параметров long, сколько свободных измерений в предоставленном пути макета (см. MemoryLayout.PathElement.sequenceElement(), где порядок параметров соответствует порядку элементов пути. Возвращаемый обработчик метода может использоваться для вычисления смещения макета, аналогично byteOffset(PathElement...), но некоторые индексы последовательности указываются только при вызове обработчика метода.
Конечное смещение, возвращаемое обработчиком метода, вычисляется следующим образом:
гдеbitOffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n) offset = bitOffset / 8
x_1, x_2, ... x_n являются динамическими значениями, предоставленными в качестве long аргументов, в то время как c_1, c_2, ... c_m — статические константы смещения, а s_0, s_1, ... s_n — статические константы шага, которые выводятся из пути макета. Обработчик метода выбросит UnsupportedOperationException, если вычисленное смещение в битах не кратно 8.
- Параметры:
-
elements- элементы пути макета. - Возвращает:
- обработчик метода, который может использоваться для вычисления байтового смещения элемента макета, указанного заданными элементами пути макета, при предоставлении недостающих индексов элемента последовательности.
- Исключения:
-
IllegalArgumentException- если путь макета содержит один или несколько элементов пути, которые выбирают несколько индексов элемента последовательности (см.MemoryLayout.PathElement.sequenceElement(long, long)). -
UnsupportedOperationException- если у одного из макетов, пройденных по пути макета, размер не указан.
varHandle
default VarHandle varHandle(Class<?> carrier, MemoryLayout.PathElement... elements)
Финальное местоположение памяти, к которому обращается возвращаемый обработчик переменной памяти, может быть вычислено следующим образом:
гдеaddress = base + offset
base обозначает базовый адрес, выраженный с помощью координаты доступа MemorySegment (см. MemorySegment.address() и MemoryAddress.toRawLongValue()), а offset может быть выражено в следующей форме: гдеoffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n)
x_1, x_2, ... x_n являются динамическими значениями, предоставленными в качестве long аргументов, в то время как c_1, c_2, ... c_m — статические константы смещения, а s_0, s_1, ... s_n — статические константы шага, которые выводятся из пути макета.- Примечание API:
- результирующий обработчик переменной будет иметь дополнительную
longкоординату доступа для каждого неопределённого компонента доступа к последовательности, содержащегося в этом пути макета. Кроме того, возвращаемый обработчик переменной имеет определённые ограничения режима доступа, которые общие для всех обработчиков переменных доступа к памяти. - Параметры:
-
carrier- тип носителя обработчика переменных. -
elements- элементы пути макета. - Возвращает:
- обработчик переменной, который может использоваться для разыменования памяти в (возможно вложенном) макете, выбранном путём макета в
elements. - Исключения:
-
UnsupportedOperationException- если путь макета имеет один или несколько элементов с несовместимыми ограничениями выравнивания, или если у одного из макетов, пройденных по пути макета, размер не указан. -
IllegalArgumentException- если носитель не представляет примитивный тип, если носитель являетсяvoid,boolean, или если путь макета вelementsне выбирает макет значения (см.ValueLayout), или если выбранный макет значения имеет размер, который не соответствует размеру указанного типа носителя.
sliceHandle
default MethodHandle sliceHandle(MemoryLayout.PathElement... elements)
Возвращаемый обработчик метода имеет тип возвращаемого значения MemorySegment, содержит MemorySegment параметр в качестве ведущего параметра, представляющего сегмент, подлежащий нарезанию, и содержит столько последующих long типов параметров, сколько свободных измерений в предоставленном пути макета (см. MemoryLayout.PathElement.sequenceElement(), где порядок параметров соответствует порядку элементов пути. Возвращаемый обработчик метода может использоваться для создания среза аналогично MemorySegment.asSlice(long, long), но где аргумент смещения динамически вычисляется на основе индексов, указанных при вызове обработчика метода.
Смещение возвращаемого сегмента вычисляется следующим образом:
гдеbitOffset = c_1 + c_2 + ... + c_m + (x_1 * s_1) + (x_2 * s_2) + ... + (x_n * s_n) offset = bitOffset / 8
x_1, x_2, ... x_n являются динамическими значениями, предоставленными в качестве long аргументов, в то время как c_1, c_2, ... c_m являются статическими константами смещения, а s_0, s_1, ... s_n — статические константы шага, которые выводятся из пути макета. После вычисления смещения возвращаемый сегмент создаётся так, как если бы был вызван:
гдеsegment.asSlice(offset, layout.byteSize());
segment — сегмент, подлежащий нарезанию, а layout — макет, выбранный заданным путём макета, согласно select(PathElement...). Обработчик метода выбросит UnsupportedOperationException, если вычисленное смещение в битах не кратно 8.
- Параметры:
-
elements- элементы пути макета. - Возвращает:
- обработчик метода, который может использоваться для создания среза выбранного элемента макета, заданного сегментом.
- Исключения:
-
UnsupportedOperationException- если размер выбранного макета в битах не кратен 8.
select
default MemoryLayout select(MemoryLayout.PathElement... elements)
- Параметры:
-
elements- элементы пути макета. - Возвращает:
- макет, выбранный путем макета в
elements. - Исключение:
-
IllegalArgumentException- если путь макета не выбирает какой-либо вложенный макет в этом макете или если путь макета содержит один или несколько элементов пути, которые выбирают один или несколько индексов элементов последовательности (см.MemoryLayout.PathElement.sequenceElement(long)иMemoryLayout.PathElement.sequenceElement(long, long)).
map
default MemoryLayout map(UnaryOperator<MemoryLayout> op, MemoryLayout.PathElement... elements)
- Параметры:
-
op- унарная операция, которая должна быть применена к выбранному макету. -
elements- элементы пути макета. - Возвращает:
- новый макет, где макет, выбранный путем макета в
elements, был заменён результатом примененияopк выбранному макету. - Исключение:
-
IllegalArgumentException- если путь макета не выбирает какой-либо вложенный макет в этом макете или если путь макета содержит один или несколько элементов пути, которые выбирают один или несколько индексов элементов последовательности (см.MemoryLayout.PathElement.sequenceElement(long)иMemoryLayout.PathElement.sequenceElement(long, long)).
isPadding
boolean isPadding()
paddingLayout(long)) ?- Возвращает:
- true, если этот макет — макет заполнения.
equals
boolean equals(Object that)
true тогда и только тогда, когда указанный объект также является макетом и равен этому макету. Два макета считаются равными, если они имеют одинаковый тип, размер, имя и ограничения выравнивания. Кроме того, в зависимости от типа макета, должны быть выполнены дополнительные условия: - два макета значений считаются равными, если у них одинаковый порядок байтов (см.
ValueLayout.order()) - два макета последовательностей считаются равными, если у них одинаковое количество элементов (см.
SequenceLayout.elementCount()), и если их макеты элементов (см.SequenceLayout.elementLayout()) также равны - два макета групп считаются равными, если они имеют одинаковый тип (см.
GroupLayout.isStruct(),GroupLayout.isUnion()) и если их макеты членов (см.GroupLayout.memberLayouts()) также равны
- Переопределяет:
-
equalsв классеObject - Параметры:
-
that- объект, который нужно сравнить на равенство с этим макетом. - Возвращает:
-
true, если указанный объект равен этому макету. - См. также:
hashCode
int hashCode()
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого макета.
- См. также:
toString
String toString()
- Переопределяет:
-
toStringв классеObject - Возвращает:
- строковое представление этого макета.
paddingLayout
static MemoryLayout paddingLayout(long size)
- Параметры:
-
size- размер заполнения в битах. - Возвращает:
- новый макет-селектор.
- Исключение:
-
IllegalArgumentException- еслиsize <= 0.
valueLayout
static ValueLayout valueLayout(long size, ByteOrder order)
- Параметры:
-
size- размер макета значения. -
order- порядок байтов макета значения. - Возвращает:
- новый макет значения.
- Исключение:
-
IllegalArgumentException- еслиsize <= 0.
sequenceLayout
static SequenceLayout sequenceLayout(long elementCount, MemoryLayout elementLayout)
- Параметры:
-
elementCount- количество элементов последовательности. -
elementLayout- макет элемента последовательности. - Возвращает:
- новый макет последовательности с заданным макетом элемента и размером.
- Исключение:
-
IllegalArgumentException- еслиelementCount < 0.
sequenceLayout
static SequenceLayout sequenceLayout(MemoryLayout elementLayout)
- Параметры:
-
elementLayout- макет элемента макета последовательности. - Возвращает:
- новый макет последовательности с заданным макетом элемента.
structLayout
static GroupLayout structLayout(MemoryLayout... elements)
- Параметры:
-
elements- Макеты членов макета группы struct. - Возвращает:
- новый макет группы struct с заданными макетами членов.
unionLayout
static GroupLayout unionLayout(MemoryLayout... elements)
- Параметры:
-
elements- Макеты членов макета union. - Возвращает:
- новый макет группы union с заданными макетами членов.
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/jdk.incubator.foreign/jdk/incubator/foreign/MemoryLayout.html