跳到內容

nanoarrow_schemananoarrow_arraynanoarrow_array_stream 類別在 R 中以外部指標 (EXTPTRSXP) 表示。當這些物件超出作用域時(即,當它們被垃圾回收或不久之後),如果底層指標為非空值且 release() 回呼為非空值,則會呼叫底層物件的 release() 回呼。

用法

nanoarrow_pointer_is_valid(ptr)

nanoarrow_pointer_addr_dbl(ptr)

nanoarrow_pointer_addr_chr(ptr)

nanoarrow_pointer_addr_pretty(ptr)

nanoarrow_pointer_release(ptr)

nanoarrow_pointer_move(ptr_src, ptr_dst)

nanoarrow_pointer_export(ptr_src, ptr_dst)

nanoarrow_allocate_schema()

nanoarrow_allocate_array()

nanoarrow_allocate_array_stream()

nanoarrow_pointer_set_protected(ptr_src, protected)

引數

ptr、ptr_src、ptr_dst

指向 struct ArrowSchemastruct ArrowArraystruct ArrowArrayStream 的外部指標。

protected

其作用域必須超出 ptr 的物件。這對於陣列串流很有用,因為至少有兩個涉及陣列串流的規範指定串流僅在另一個物件的生命週期內有效(例如,AdbcStatement 或 OGRDataset)。

  • 如果指標為非空值且具有非空值的 release 回呼,則 nanoarrow_pointer_is_valid() 會傳回 TRUE。

  • nanoarrow_pointer_addr_dbl()nanoarrow_pointer_addr_chr() 傳回指標表示,這可能有助於促進將 nanoarrow 物件移動或匯出到其他程式庫。

  • nanoarrow_pointer_addr_pretty() 提供適用於列印或錯誤訊息的指標表示。

  • nanoarrow_pointer_release() 不可見地傳回 ptr

  • nanoarrow_pointer_move()nanoarrow_pointer_export() 不可見地傳回 ptr_dst

  • nanoarrow_allocate_array()nanoarrow_allocate_schema()nanoarrow_allocate_array_stream() 分別傳回 arrayschemaarray stream

詳細資訊

當與其他 C Data Interface 實作互動時,務必記住,包裝這些指標的 R 物件始終以傳參考方式傳遞(因為它是外部指標),並且可能被另一個 R 物件引用(例如,list() 中的元素或使用者環境中指定的變數)。當將 schema、array 或 array stream 匯入 nanoarrow 時,這不是問題:R 物件取得生命週期的所有權,並且在 R 物件被垃圾回收時釋放記憶體。在這種情況下,可以使用 nanoarrow_pointer_move(),其中 ptr_dst 是使用 nanoarrow_allocate_*() 建立的。

匯出的情況更複雜,因此有一個專用的函式 nanoarrow_pointer_export(),它實作不同的邏輯 schema、array 和 array stream

  • Schema 物件會被(深度)複製,以便匯出 schema 的全新副本,並使其成為其他 C data interface 實作的責任。

  • Array 物件會作為原始 array 周圍的外殼匯出,該外殼保留對 R 物件的引用。這確保了 array 指向的緩衝區和子物件不會被複製,並且對原始 array 的任何引用都不會失效。

  • Array stream 物件會被移動:物件的責任被轉移到其他 C data interface 實作,並且對原始 R 物件的任何引用都將失效。由於這些物件是可變的,因此這通常是您想要的(即,您不應意外地從兩個地方從串流中提取 array)。

如果您知道物件的生命週期(即,您自己建立了 R 物件,並且從未將其引用傳遞到其他地方),則可以更有效率地為所有三種指標類型呼叫 nanoarrow_pointer_move()