モジュール jdk.incubator.foreign
パッケージ jdk.incubator.foreign

インタフェース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)を介して整数型が消去され、doubleに対するすべてのfloat引数が消去されます。

そのため、このインタフェースでは、intdoubleおよびlongに適合するその他のタイプの読取りのみがサポートされます。

特に指定がないかぎり、null引数、またはこのクラスのメソッドに1つ以上のnull要素を含む配列引数を渡すと、NullPointerExceptionがスローされます。

  • メソッドの詳細

    • 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

      このC va_listを現在の位置にコピーします。 コピーは、元のvaリストの状態に影響を与えずに、現在の位置からvaリスト要素をトラバースする場合に便利で、基本的に要素を複数回トラバースできます。

      このメソッドの実行に必要なネイティブ・リソースは、このインスタンス(scope()を参照してください)に関連付けられたリソース・スコープに割り当てられます。

      このメソッドは、vaリスト・カーソル自体のみをコピーし、その要素を保持するvaリストにアタッチできるメモリーはコピーしません。 つまり、このvaリストがmake(Consumer, ResourceScope)メソッドで作成された場合、このvaリストを閉じると、その要素を保持するネイティブ・メモリーも解放され、コピーが使用できなくなります。

      戻り値:
      このC va_listのコピー。
      例外:
      IllegalStateException - このインスタンスに関連付けられているリソース・スコープが(scope()を参照してください)をクローズした場合。
    • address

      MemoryAddress address()
      このインスタンスに関連付けられたC va_listのメモリー・アドレスを返します。 返されるメモリー・アドレスは、このインスタンスに関連付けられたものと同じリソース・スコープに関連付けられます。
      定義:
      インタフェースAddressable内のaddress
      戻り値:
      このインスタンスに関連付けられたC va_listのメモリー・アドレス。
    • ofAddress

      static CLinker.VaList ofAddress(MemoryAddress address)
      「グローバル」リソース・スコープによって支えられた既存のC va_listを指すメモリー・アドレスから新しいVaListインスタンスを構築します。

      このメソッドは制限付きです。 制限されたメソッドは安全ではなく、誤って使用するとJVMがクラッシュしたり、悪化したりするとメモリーが破損する可能性があります。 したがって、クライアントは制限付きメソッドに応じて屈折し、可能な場合は安全でサポートされている機能を使用する必要があります。

      パラメータ:
      address - 既存のC va_listを指すメモリー・アドレス。
      戻り値:
      addressでC va_listによってバックアップされた新しいVaListインスタンス。
      例外:
      IllegalCallerException - このメソッドへのアクセスがモジュールMから発生し、コマンドライン・オプション--enable-native-accessがない場合、またはモジュール名Mが名前なしモジュールの場合はALL-UNNAMEDは説明しません。
    • ofAddress

      static CLinker.VaList ofAddress(MemoryAddress address, ResourceScope scope)
      指定されたリソース・スコープを持つ既存のC va_listを指し示すメモリー・アドレスから新しいVaListインスタンスを構築します。

      このメソッドは制限付きです。 制限されたメソッドは安全ではなく、誤って使用するとJVMがクラッシュしたり、悪化したりするとメモリーが破損する可能性があります。 したがって、クライアントは制限付きメソッドに応じて屈折し、可能な場合は安全でサポートされている機能を使用する必要があります。

      パラメータ:
      address - 既存のC va_listを指すメモリー・アドレス。
      scope - 返されるVaListインスタンスに関連付けるリソース・スコープ。
      戻り値:
      addressでC va_listによってバックアップされた新しいVaListインスタンス。
      例外:
      IllegalStateException - scopeがすでにクローズされている場合、またはscopeを所有するスレッド以外のスレッドからアクセスが発生した場合。
      IllegalCallerException - このメソッドへのアクセスがモジュールMから発生し、コマンドライン・オプション--enable-native-accessがない場合、またはモジュール名Mが名前なしモジュールの場合はALL-UNNAMEDは説明しません。
    • make

      特定の「リソース・スコープ」に関連付けられたビルダー(CLinker.VaList.Builderを参照してください)を使用して、新しいVaListを作成します。

      このメソッドがネイティブ・メモリーを割り当てる必要がある場合、このようなメモリーは指定された「リソース・スコープ」によって管理され、リソース・スコープがclosedのときに解放されます。

      作成されたvaリストに要素が追加されていない場合、このメソッドはempty()と同じものを返します。

      パラメータ:
      actions - 基礎となるC va_listの要素を指定するために使用できるビルダー(CLinker.VaList.Builderを参照してください)のコンシューマ。
      scope - 値リストの割当てに使用されるスコープ。
      戻り値:
      新しいC va_listによって支えられた新しいVaListインスタンス。
      例外:
      IllegalStateException - scopeがすでにクローズされている場合、またはscopeを所有するスレッド以外のスレッドからアクセスが発生した場合。
    • empty

      static CLinker.VaList empty()
      空のC va_list定数を返します。

      返されたVaListをクローズできません。

      戻り値:
      空のC va_listをモデル化するVaList