Skip to content

Commit 5f3288c

Browse files
committed
pass optional ownership info
1 parent 34c8d1c commit 5f3288c

12 files changed

+32
-21
lines changed

r/src/vctr_builder.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ SEXP nanoarrow_c_convert_array2(SEXP array_xptr, SEXP ptype_sexp) {
311311
Rf_error("builder->Reserve() failed: %s", error.message);
312312
}
313313

314-
result = builder->PushNext(array, &error);
314+
result = builder->PushNext(array_xptr, array, &error);
315315
if (result != NANOARROW_OK) {
316316
Rf_error("builder->PushNext() failed: %s", error.message);
317317
}

r/src/vctr_builder_base.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ struct VctrBuilder {
7676
// Push an array into this builder and do not take ownership of array. This is
7777
// called when the caller cannot safely relinquish ownership of an array (e.g.,
7878
// convert_array()). Calling this method may longjmp.
79-
virtual ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) {
79+
virtual ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
80+
ArrowError* error) {
8081
NANOARROW_RETURN_NOT_OK(ArrowArrayViewSetArray(&array_view_, array, error));
8182
return NANOARROW_OK;
8283
}
@@ -85,7 +86,7 @@ struct VctrBuilder {
8586
// ownership. This is called when the caller can relinquish ownership (e.g.,
8687
// convert_array_stream()). Calling this method may longjmp.
8788
virtual ArrowErrorCode PushNextOwning(ArrowArray* array, ArrowError* error) {
88-
return PushNext(array, error);
89+
return PushNext(R_NilValue, array, error);
8990
}
9091

9192
// Perform any final calculations required to calculate the return value.

r/src/vctr_builder_blob.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ class BlobBuilder : public VctrBuilder {
3636
return NANOARROW_OK;
3737
}
3838

39-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
40-
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array, error));
39+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
40+
ArrowError* error) override {
41+
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array_shelter, array, error));
4142
R_xlen_t length = array_view_.length;
4243

4344
switch (array_view_.storage_type) {

r/src/vctr_builder_chr.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ class ChrBuilder : public VctrBuilder {
4141
return NANOARROW_OK;
4242
}
4343

44-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
45-
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array, error));
44+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
45+
ArrowError* error) override {
46+
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array_shelter, array, error));
4647
R_xlen_t length = array_view_.length;
4748

4849
switch (array_view_.storage_type) {

r/src/vctr_builder_dbl.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ class DblBuilder : public VctrBuilder {
4848
return NANOARROW_OK;
4949
}
5050

51-
virtual ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
52-
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array, error));
51+
virtual ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
52+
ArrowError* error) override {
53+
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array_shelter, array, error));
5354

5455
double* result = REAL(value_);
5556
int64_t n_bad_values = 0;

r/src/vctr_builder_difftime.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,10 @@ class DifftimeBuilder : public DblBuilder {
8080
return NANOARROW_OK;
8181
}
8282

83-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
83+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
84+
ArrowError* error) override {
8485
R_xlen_t value_size0 = value_size_;
85-
NANOARROW_RETURN_NOT_OK(DblBuilder::PushNext(array, error));
86+
NANOARROW_RETURN_NOT_OK(DblBuilder::PushNext(array_shelter, array, error));
8687

8788
if (scale_ != 1) {
8889
double* result = REAL(value_);

r/src/vctr_builder_int.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ class IntBuilder : public VctrBuilder {
3838
return NANOARROW_OK;
3939
}
4040

41-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
42-
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array, error));
41+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
42+
ArrowError* error) override {
43+
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array_shelter, array, error));
4344

4445
int* result = INTEGER(value_);
4546
int64_t n_bad_values = 0;

r/src/vctr_builder_int64.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ class Integer64Builder : public VctrBuilder {
3939
return NANOARROW_OK;
4040
}
4141

42-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
43-
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array, error));
42+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
43+
ArrowError* error) override {
44+
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array_shelter, array, error));
4445

4546
int64_t* result = reinterpret_cast<int64_t*>(REAL(value_));
4647
int64_t n_bad_values = 0;

r/src/vctr_builder_lgl.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ class LglBuilder : public VctrBuilder {
3838
return NANOARROW_OK;
3939
}
4040

41-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
42-
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array, error));
41+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
42+
ArrowError* error) override {
43+
NANOARROW_RETURN_NOT_OK(VctrBuilder::PushNext(array_shelter, array, error));
4344

4445
// True for all the types supported here
4546
const uint8_t* is_valid = array_view_.buffer_views[0].data.as_uint8;

r/src/vctr_builder_other.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ class OtherBuilder : public VctrBuilder {
4747

4848
ArrowErrorCode Reserve(R_xlen_t n, ArrowError* error) override { return NANOARROW_OK; }
4949

50-
ArrowErrorCode PushNext(const ArrowArray* array, ArrowError* error) override {
50+
ArrowErrorCode PushNext(SEXP array_shelter, const ArrowArray* array,
51+
ArrowError* error) override {
5152
// Fill this in
5253
return NANOARROW_OK;
5354
}

0 commit comments

Comments
 (0)