Spec-Zone.ru › OpenJDK 17

Интерфейс CLinker.VaList

Все суперинтерфейсы:
Addressable
Включающий интерфейс:
CLinker
public static sealed interface CLinker.VaList extends Addressable
Интерфейс, моделирующий C va_list.

Список va представляет собой состояние курсора, используемого для итерации по набору аргументов с переменным числом параметров.

В соответствии со спецификацией C (см. стандарт C 6.5.2.2 Функциональные вызовы - пункт 6), аргументы вызовов с переменным числом параметров удаляются с помощью «преобразований по умолчанию для аргументов», которые удаляют целочисленные типы посредством продвижения целых чисел (см. стандарт C 6.3.1.1 - пункт 2), и которые удаляют все float аргументы double.

Таким образом, этот интерфейс поддерживает только чтение int, double, и любого другого типа, который помещается в long.

Если не указано иное, передача аргумента null, или аргумента массива, содержащего один или несколько null элементов методу в этом классе приводит к выбрасыванию NullPointerException.

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

Модификатор и тип Интерфейс Описание
static interface  CLinker.VaList.Builder
Интерфейс-билдер, используемый для построения C va_list.

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

Модификатор и тип Метод Описание
MemoryAddress address()
Возвращает адрес памяти C va_list связанный с этим экземпляром.
CLinker.VaList copy()
Копирует этот C va_list в его текущей позиции.
static CLinker.VaList empty()
Возвращает константу пустого C va_list.
static CLinker.VaList make(Consumer<CLinker.VaList.Builder> actions, ResourceScope scope)
Создает новый VaList с помощью билдера (см. CLinker.VaList.Builder), связанный с заданным объёмом ресурсов.
static CLinker.VaList ofAddress(MemoryAddress address)
Создаёт новый экземпляр VaList из адреса памяти, указывающего на существующий C va_list, поддерживаемый глобальным объёмом ресурсов.
static CLinker.VaList ofAddress(MemoryAddress address, ResourceScope scope)
Создаёт новый экземпляр VaList из адреса памяти, указывающего на существующий C va_list, с заданным объёмом ресурсов.
ResourceScope scope()
Возвращает объём ресурсов, связанный с этим экземпляром.
void skip(MemoryLayout... layouts)
Пропускает количество элементов с заданными структурами памяти и перемещает позицию этого списка va.
MemoryAddress vargAsAddress(MemoryLayout layout)
Читает следующее значение как MemoryAddress и перемещает позицию этого списка va.
double vargAsDouble(MemoryLayout layout)
Читает следующее значение как double и перемещает позицию этого списка va.
int vargAsInt(MemoryLayout layout)
Читает следующее значение как int и перемещает позицию этого списка va.
long vargAsLong(MemoryLayout layout)
Читает следующее значение как long и перемещает позицию этого списка va.
MemorySegment vargAsSegment(MemoryLayout layout, ResourceScope scope)
Читает следующее значение как MemorySegment, и перемещает позицию этого списка va.
MemorySegment vargAsSegment(MemoryLayout layout, SegmentAllocator allocator)
Читает следующее значение как MemorySegment, и перемещает позицию этого списка va.

Подробное описание методов

vargAsInt

int vargAsInt(MemoryLayout layout)
Считывает следующее значение как int и перемещает позицию в этом списке va.
Параметры:
layout - структура данных для значения
Возвращает:
значение, прочитанное как int
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).
IllegalArgumentException - если заданная структура данных памяти несовместима с int

vargAsLong

long vargAsLong(MemoryLayout layout)
Считывает следующее значение как long и перемещает позицию в этом списке va.
Параметры:
layout - структура данных для значения
Возвращает:
значение, прочитанное как long
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).
IllegalArgumentException - если заданная структура данных памяти несовместима с long

vargAsDouble

double vargAsDouble(MemoryLayout layout)
Считывает следующее значение как double и перемещает позицию в этом списке va.
Параметры:
layout - структура данных для значения
Возвращает:
значение, прочитанное как double
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).
IllegalArgumentException - если заданная структура данных памяти несовместима с double

vargAsAddress

MemoryAddress vargAsAddress(MemoryLayout layout)
Считывает следующее значение как MemoryAddress и перемещает позицию в этом списке va.
Параметры:
layout - структура данных для значения
Возвращает:
значение, прочитанное как MemoryAddress
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).
IllegalArgumentException - если заданная структура данных памяти несовместима с MemoryAddress

vargAsSegment

MemorySegment vargAsSegment(MemoryLayout layout, SegmentAllocator allocator)
Считывает следующее значение как MemorySegment, и перемещает позицию в этом списке va.

Сегмент памяти, возвращаемый этим методом, будет выделен с помощью заданного SegmentAllocator.

Параметры:
layout - структура данных для значения
allocator - выделение памяти для сегмента
Возвращает:
значение, прочитанное как MemorySegment
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).
IllegalArgumentException - если заданная структура данных памяти несовместима с MemorySegment

vargAsSegment

MemorySegment vargAsSegment(MemoryLayout layout, ResourceScope scope)
Считывает следующее значение как MemorySegment, и перемещает позицию в этом списке va.

Сегмент памяти, возвращаемый этим методом, будет связан с заданной ResourceScope.

Параметры:
layout - структура данных для значения
scope - область ресурсов, которая будет связана с возвращаемым сегментом
Возвращает:
значение, прочитанное как MemorySegment
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).
IllegalArgumentException - если заданная структура данных памяти несовместима с MemorySegment
IllegalStateException - если scope уже закрыта, или если доступ осуществляется из потока, отличного от потока, владеющего scope.

skip

void skip(MemoryLayout... layouts)
Пропускает заданное количество элементов с указанными структурами данных памяти и перемещает позицию в этом списке va.
Параметры:
layouts - структура данных для значения
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).

scope

ResourceScope scope()
Возвращает область ресурсов, связанную с этим экземпляром.
Возвращает:
область ресурсов, связанная с этим экземпляром.

copy

CLinker.VaList copy()
Копирует этот C va_list в его текущей позиции. Копирование полезно для обхода элементов списка va, начиная с текущей позиции, без изменения состояния исходного списка va, что позволяет обходить элементы несколько раз.

Любые необходимые для выполнения этого метода нативные ресурсы будут выделены в области ресурсов, связанной с этим экземпляром (см. scope()).

Этот метод копирует только указатель списка va, а не память, которая может быть прикреплена к списку va, содержащему его элементы. Это означает, что если этот список va был создан с помощью метода make(Consumer, ResourceScope), закрытие этого списка va также освободит нативную память, содержащую его элементы, сделав копию непригодной для использования.

Возвращает:
копию этого C va_list.
Исключения:
IllegalStateException - если область ресурсов, связанная с этим экземпляром, закрыта (см. scope()).

address

MemoryAddress address()
Возвращает адрес памяти C va_list , связанный с этим экземпляром. Возвращаемый адрес памяти связан с той же областью ресурсов, что и этот экземпляр.
Определено в:
address в интерфейсе Addressable
Возвращает:
адрес памяти C va_list , связанный с этим экземпляром.

ofAddress

static CLinker.VaList ofAddress(MemoryAddress address)
Создает новый экземпляр VaList из адреса памяти, указывающего на существующий C va_list, поддерживаемый глобальной областью ресурсов.

Этот метод ограничен. Ограниченные методы небезопасны, и при неправильном использовании их использование может привести к аварийному завершению JVM или, что еще хуже, к скрытому повреждению памяти. Таким образом, клиенты должны избегать зависимости от ограниченных методов и использовать, по возможности, безопасные и поддерживаемые функции.

Параметры:
address - адрес памяти, указывающий на существующий C va_list.
Возвращает:
новый экземпляр VaList , поддерживаемый C va_list по адресу address.
Исключения:
IllegalCallerException - если доступ к этому методу осуществляется из модуля M и опция командной строки --enable-native-access отсутствует или не упоминает имя модуля M, или ALL-UNNAMED в случае, если M является безымянным модулем.

ofAddress

static CLinker.VaList ofAddress(MemoryAddress address, ResourceScope scope)
Создает новый экземпляр VaList из адреса памяти, указывающего на существующий C va_list, с заданной областью ресурсов.

Этот метод ограничен. Ограниченные методы небезопасны, и при неправильном использовании их использование может привести к аварийному завершению JVM или, что еще хуже, к скрытому повреждению памяти. Таким образом, клиенты должны избегать зависимости от ограниченных методов и использовать, по возможности, безопасные и поддерживаемые функции.

Параметры:
address - адрес памяти, указывающий на существующий C va_list.
scope - область ресурсов, которая будет связана с возвращаемым экземпляром VaList.
Возвращает:
новый экземпляр VaList , поддерживаемый C va_list по адресу address.
Исключения:
IllegalStateException - если scope уже закрыта, или если доступ осуществляется из потока, отличного от потока, владеющего scope.
IllegalCallerException - если доступ к этому методу осуществляется из модуля M и опция командной строки --enable-native-access отсутствует или не упоминает имя модуля M, или ALL-UNNAMED в случае, если M является безымянным модулем.

make

static CLinker.VaList make(Consumer<CLinker.VaList.Builder> actions, ResourceScope scope)
Создаёт новый VaList с помощью билдера (см. CLinker.VaList.Builder), связанный с заданным объёмом ресурсов.

Если для этого метода требуется выделить системную память, такая память будет управляться заданным объёмом ресурсов и будет освобождена при закрытии объёма ресурсов.

Обратите внимание, что если не добавляется никаких элементов в созданный список, этот метод вернёт то же самое, что и empty().

Parameters:
actions - потребитель для билдера (см. CLinker.VaList.Builder), который может быть использован для указания элементов основного C va_list.
scope - объём ресурсов, который будет использоваться для выделения памяти valist.
Returns:
новый экземпляр VaList, поддерживаемый свежим C va_list.
Throws:
IllegalStateException - если scope уже закрыт, или если доступ осуществляется из потока, отличного от потока, владеющего scope.

empty

static CLinker.VaList empty()
Возвращает пустую константу C va_list.

Возвращаемый VaList не может быть закрыт.

Returns:
VaList, моделирующий пустой C va_list.

© 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/CLinker.VaList.html

Spec-Zone.ru

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