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

インタフェースCLinker.VaList

すべてのスーパー・インタフェース:
Addressable, AutoCloseable
含まれているインタフェース:
CLinker

public static interface CLinker.VaList extends Addressable, AutoCloseable
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がスローされます。

APIのノート:
将来、Java言語で許可される場合、CLinker.VaListsealedインタフェースになる可能性があり、明示的に許可されているタイプ以外はサブクラス化できなくなります。
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    インタフェース
    説明
    static interface 
    C va_listの構築に使用されるビルダー・インタフェース。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このインスタンスに関連付けられたC va_listのメモリー・アドレスを返します。
    void
    このインスタンスによってモデル化された基礎となるC va_listと、その要素(make(Consumer)を参照してください)を保持するこのvaリストにアタッチされているネイティブ・メモリーを解放します。
    このC va_listを現在の位置にコピーします。
    copy​(NativeScope scope)
    このC va_listを現在の位置にコピーします。
    空のC va_list定数を返します。
    boolean
    このインスタンスによってモデル化されたC va_listに関連付けられたメモリーがまだ使用可能かどうかをチェックするために使用される述語。
    ビルダー(CLinker.VaList.Builderを参照してください)を使用して新しいVaListを構築します。
    ビルダー(CLinker.VaList.Builderを参照してください)を使用して新しいVaListを構築します。
    既存のC va_listを指すメモリー・アドレスから新しいVaListインスタンスを構築します。
    void
    skip​(MemoryLayout... layouts)
    指定されたメモリー・レイアウトのいくつかの要素をスキップし、このvaリストの位置を進めます。
    次の値をMemoryAddressとして読み取り、このvaリストの位置を進めます。
    double
    次の値をdoubleとして読み取り、このvaリストの位置を進めます。
    int
    次の値をintとして読み取り、このvaリストの位置を進めます。
    long
    次の値をlongとして読み取り、このvaリストの位置を進めます。
    次の値をMemorySegmentとして読み取り、このvaリストの位置を進めます。
    次の値をMemorySegmentとして読み取り、このvaリストの位置を進めます。
  • メソッドの詳細

    • vargAsInt

      int vargAsInt(MemoryLayout layout)
      次の値をintとして読み取り、このvaリストの位置を進めます。
      パラメータ:
      layout - 値のレイアウト
      戻り値:
      intとして読み取られた値
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
      IllegalArgumentException - 指定されたメモリー・レイアウトがintと互換性がない場合
    • vargAsLong

      long vargAsLong(MemoryLayout layout)
      次の値をlongとして読み取り、このvaリストの位置を進めます。
      パラメータ:
      layout - 値のレイアウト
      戻り値:
      longとして読み取られた値
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
      IllegalArgumentException - 指定されたメモリー・レイアウトがlongと互換性がない場合
    • vargAsDouble

      double vargAsDouble(MemoryLayout layout)
      次の値をdoubleとして読み取り、このvaリストの位置を進めます。
      パラメータ:
      layout - 値のレイアウト
      戻り値:
      doubleとして読み取られた値
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
      IllegalArgumentException - 指定されたメモリー・レイアウトがdoubleと互換性がない場合
    • vargAsAddress

      MemoryAddress vargAsAddress(MemoryLayout layout)
      次の値をMemoryAddressとして読み取り、このvaリストの位置を進めます。
      パラメータ:
      layout - 値のレイアウト
      戻り値:
      MemoryAddressとして読み取られた値
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
      IllegalArgumentException - 指定されたメモリー・レイアウトがMemoryAddressと互換性がない場合
    • vargAsSegment

      MemorySegment vargAsSegment(MemoryLayout layout)
      次の値をMemorySegmentとして読み取り、このvaリストの位置を進めます。

      このメソッドによって返されるメモリー・セグメントは、MemorySegment.allocateNative(long, long)を使用して割り当てられ、個別にクローズする必要があります。

      パラメータ:
      layout - 値のレイアウト
      戻り値:
      MemorySegmentとして読み取られた値
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
      IllegalArgumentException - 指定されたメモリー・レイアウトがMemorySegmentと互換性がない場合
    • vargAsSegment

      MemorySegment vargAsSegment(MemoryLayout layout, NativeScope scope)
      次の値をMemorySegmentとして読み取り、このvaリストの位置を進めます。

      このメソッドによって返されるメモリー・セグメントは、指定されたNativeScopeを使用して割り当てられます。

      パラメータ:
      layout - 値のレイアウト
      scope - セグメントを割り当てるスコープ
      戻り値:
      MemorySegmentとして読み取られた値
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
      IllegalArgumentException - 指定されたメモリー・レイアウトがMemorySegmentと互換性がない場合
    • skip

      void skip(MemoryLayout... layouts)
      指定されたメモリー・レイアウトのいくつかの要素をスキップし、このvaリストの位置を進めます。
      パラメータ:
      layouts - 値のレイアウト
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
    • isAlive

      boolean isAlive()
      このインスタンスによってモデル化されたC va_listに関連付けられたメモリーがまだ使用可能かどうかをチェックするために使用される述語。
      戻り値:
      このインスタンスによってモデル化されたC va_listに関連付けられたメモリーがまだ有効な場合はtrue
      関連項目:
      close()
    • close

      void close()
      このインスタンスによってモデル化された基礎となるC va_listと、その要素(make(Consumer)を参照してください)を保持するこのvaリストにアタッチされているネイティブ・メモリーを解放します。

      このメソッドを呼び出した後、isAlive()falseを返し、さらにこのvaリストから値を読み取ろうとすると例外が発生します。

      定義:
      close、インタフェース: AutoCloseable
      関連項目:
      isAlive()
    • copy

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

      このメソッドでコピー用のネイティブ・メモリーを割り当てる必要がある場合は、MemorySegment.allocateNative(long, long)を使用して割り当てます。割り当てられたメモリーを解放するには、返されたvaリスト・インスタンスでclose()をコールする必要があります。

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

      戻り値:
      このC va_listのコピー。
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
    • copy

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

      このメソッドがコピーにネイティブ・メモリーを割り当てる必要がある場合は、指定されたNativeScopeを使用して割り当てます。

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

      パラメータ:
      scope - コピーを割り当てるスコープ
      戻り値:
      このC va_listのコピー。
      例外:
      IllegalStateException - このインスタンスに関連付けられているC va_listが有効な(close()を参照してください)でなくなった場合。
    • address

      MemoryAddress address()
      このインスタンスに関連付けられたC va_listのメモリー・アドレスを返します。
      定義:
      インタフェースAddressable内のaddress
      戻り値:
      このインスタンスに関連付けられたC va_listのメモリー・アドレス。
    • ofAddressRestricted

      static CLinker.VaList ofAddressRestricted(MemoryAddress address)
      既存のC va_listを指すメモリー・アドレスから新しいVaListインスタンスを構築します。

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

      パラメータ:
      address - 既存のC va_listを指すメモリー・アドレス。
      戻り値:
      addressでC va_listによってバックアップされた新しいVaListインスタンス。
    • make

      static CLinker.VaList make(Consumer<CLinker.VaList.Builder> actions)
      ビルダー(CLinker.VaList.Builderを参照してください)を使用して新しいVaListを構築します。

      このメソッドがvaリストにネイティブ・メモリーを割り当てる必要がある場合は、MemorySegment.allocateNative(long, long)を使用して割り当てます。

      このメソッドは、vaリスト内の要素を保持するためのネイティブ・メモリーを割り当てます。 このメモリーは、戻されたvaリスト・インスタンスに対する'添付済'であり、close()がコールされると解放されます。

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

      パラメータ:
      actions - 基礎となるC va_listの要素を指定するために使用できるビルダー(CLinker.VaList.Builderを参照してください)のコンシューマ。
      戻り値:
      新しいC va_listによって支えられた新しいVaListインスタンス。
    • make

      static CLinker.VaList make(Consumer<CLinker.VaList.Builder> actions, NativeScope scope)
      ビルダー(CLinker.VaList.Builderを参照してください)を使用して新しいVaListを構築します。

      このメソッドがvaリストにネイティブ・メモリーを割り当てる必要がある場合は、指定されたNativeScopeを使用して割り当てます。

      このメソッドは、vaリスト内の要素を保持するためのネイティブ・メモリーを割り当てます。 このメモリーは指定されたNativeScopeによって管理され、スコープが閉じられると解放されます。

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

      パラメータ:
      actions - 基礎となるC va_listの要素を指定するために使用できるビルダー(CLinker.VaList.Builderを参照してください)のコンシューマ。
      scope - 値リストの割当てに使用されるスコープ。
      戻り値:
      新しいC va_listによって支えられた新しいVaListインスタンス。
    • empty

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

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

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