| 1109 | class RStructConverter : public StructConverter<RConverter, RConverterTrait> { |
| 1110 | public: |
| 1111 | Status Extend(SEXP x, int64_t size, int64_t offset = 0) override { |
| 1112 | RETURN_NOT_OK(ExtendSetup(x, size, offset)); |
| 1113 | |
| 1114 | auto fields = this->struct_type_->fields(); |
| 1115 | R_xlen_t n_columns = XLENGTH(x); |
| 1116 | for (R_xlen_t i = offset; i < n_columns; i++) { |
| 1117 | auto status = children_[i]->Extend(VECTOR_ELT(x, i), size); |
| 1118 | if (!status.ok()) { |
| 1119 | return Status::Invalid("Problem with column ", (i + 1), " (", fields[i]->name(), |
| 1120 | "): ", status.ToString()); |
| 1121 | } |
| 1122 | } |
| 1123 | |
| 1124 | return Status::OK(); |
| 1125 | } |
| 1126 | |
| 1127 | void DelayedExtend(SEXP values, int64_t size, RTasks& tasks) override { |
| 1128 | // the setup runs synchronously first |