Интерфейс CLinker.VaList
- Все суперинтерфейсы:
Addressable
- Включающий интерфейс:
- CLinker
public static sealed interface CLinker.VaList extends Addressable
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 |
Создает новый VaList с помощью билдера (см. CLinker.VaList.Builder), связанный с заданным объёмом ресурсов. |
static CLinker.VaList |
ofAddress |
Создаёт новый экземпляр VaList из адреса памяти, указывающего на существующий C va_list, поддерживаемый глобальным объёмом ресурсов. |
static CLinker.VaList |
ofAddress |
Создаёт новый экземпляр VaList из адреса памяти, указывающего на существующий C va_list, с заданным объёмом ресурсов. |
ResourceScope |
scope() |
Возвращает объём ресурсов, связанный с этим экземпляром. |
void |
skip |
Пропускает количество элементов с заданными структурами памяти и перемещает позицию этого списка va. |
MemoryAddress |
vargAsAddress |
Читает следующее значение как MemoryAddress и перемещает позицию этого списка va. |
double |
vargAsDouble |
Читает следующее значение как double и перемещает позицию этого списка va. |
int |
vargAsInt |
Читает следующее значение как int и перемещает позицию этого списка va. |
long |
vargAsLong |
Читает следующее значение как long и перемещает позицию этого списка va. |
MemorySegment |
vargAsSegment |
Читает следующее значение как MemorySegment, и перемещает позицию этого списка va. |
MemorySegment |
vargAsSegment |
Читает следующее значение как 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)
- Параметры:
-
layouts- структура данных для значения - Исключения:
-
IllegalStateException- если область ресурсов, связанная с этим экземпляром, закрыта (см.scope()).
scope
ResourceScope scope()
- Возвращает:
- область ресурсов, связанная с этим экземпляром.
copy
CLinker.VaList copy()
va_list в его текущей позиции. Копирование полезно для обхода элементов списка va, начиная с текущей позиции, без изменения состояния исходного списка va, что позволяет обходить элементы несколько раз. Любые необходимые для выполнения этого метода нативные ресурсы будут выделены в области ресурсов, связанной с этим экземпляром (см. scope()).
Этот метод копирует только указатель списка va, а не память, которая может быть прикреплена к списку va, содержащему его элементы. Это означает, что если этот список va был создан с помощью метода make(Consumer, ResourceScope), закрытие этого списка va также освободит нативную память, содержащую его элементы, сделав копию непригодной для использования.
- Возвращает:
- копию этого C
va_list. - Исключения:
-
IllegalStateException- если область ресурсов, связанная с этим экземпляром, закрыта (см.scope()).
address
MemoryAddress address()
va_list , связанный с этим экземпляром. Возвращаемый адрес памяти связан с той же областью ресурсов, что и этот экземпляр.- Определено в:
-
addressв интерфейсеAddressable - Возвращает:
- адрес памяти C
va_list, связанный с этим экземпляром.
ofAddress
static CLinker.VaList ofAddress(MemoryAddress address)
VaList из адреса памяти, указывающего на существующий C va_list, поддерживаемый глобальной областью ресурсов. Этот метод ограничен. Ограниченные методы небезопасны, и при неправильном использовании их использование может привести к аварийному завершению JVM или, что еще хуже, к скрытому повреждению памяти. Таким образом, клиенты должны избегать зависимости от ограниченных методов и использовать, по возможности, безопасные и поддерживаемые функции.
- Параметры:
-
address- адрес памяти, указывающий на существующий Cva_list. - Возвращает:
- новый экземпляр
VaList, поддерживаемый Cva_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- адрес памяти, указывающий на существующий Cva_list. -
scope- область ресурсов, которая будет связана с возвращаемым экземпляромVaList. - Возвращает:
- новый экземпляр
VaList, поддерживаемый Cva_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), который может быть использован для указания элементов основного Cva_list. -
scope- объём ресурсов, который будет использоваться для выделения памяти valist. - Returns:
- новый экземпляр
VaList, поддерживаемый свежим Cva_list. - Throws:
-
IllegalStateException- еслиscopeуже закрыт, или если доступ осуществляется из потока, отличного от потока, владеющегоscope.
empty
static CLinker.VaList empty()
va_list. Возвращаемый VaList не может быть закрыт.
- Returns:
VaList, моделирующий пустой Cva_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