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