Skip to content

Commit 4fc6530

Browse files
committed
prototype exporting to cdata interface
1 parent 3046501 commit 4fc6530

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

matlab/src/cpp/arrow/matlab/array/proxy/array.cc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717

1818
#include "arrow/util/utf8.h"
19+
#include "arrow/c/bridge.h"
1920

2021
#include "arrow/matlab/array/proxy/array.h"
2122
#include "arrow/matlab/array/proxy/wrap.h"
@@ -28,6 +29,7 @@
2829

2930
#include "libmexclass/proxy/ProxyManager.h"
3031

32+
#include <memory>
3133
#include <sstream>
3234

3335
namespace arrow::matlab::array::proxy {
@@ -40,6 +42,7 @@ Array::Array(std::shared_ptr<arrow::Array> array) : array{std::move(array)} {
4042
REGISTER_METHOD(Array, getType);
4143
REGISTER_METHOD(Array, isEqual);
4244
REGISTER_METHOD(Array, slice);
45+
REGISTER_METHOD(Array, exportToC);
4346
}
4447

4548
std::shared_ptr<arrow::Array> Array::unwrap() { return array; }
@@ -178,4 +181,20 @@ void Array::slice(libmexclass::proxy::method::Context& context) {
178181
output[0]["TypeID"] = factory.createScalar(type_id);
179182
context.outputs[0] = output;
180183
}
184+
185+
void Array::exportToC(libmexclass::proxy::method::Context& context) {
186+
namespace mda = ::matlab::data;
187+
188+
struct ArrowArray* arrow_array = new ArrowArray();
189+
struct ArrowSchema* arrow_schema = new ArrowSchema();
190+
191+
MATLAB_ERROR_IF_NOT_OK_WITH_CONTEXT(
192+
arrow::ExportArray(*array, arrow_array, arrow_schema), context, "arrow:cdata:error");
193+
194+
mda::ArrayFactory factory;
195+
mda::StructArray output = factory.createStructArray({1, 1}, {"ArrowArrayAddress", "ArrowSchemaAddress"});
196+
output[0]["ArrowArrayAddress"] = factory.createScalar(reinterpret_cast<uint64_t>(arrow_array));
197+
output[0]["ArrowSchemaAddress"] = factory.createScalar(reinterpret_cast<uint64_t>(arrow_schema));
198+
}
199+
181200
} // namespace arrow::matlab::array::proxy

matlab/src/cpp/arrow/matlab/array/proxy/array.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ class Array : public libmexclass::proxy::Proxy {
4545

4646
void slice(libmexclass::proxy::method::Context& context);
4747

48+
void exportToC(libmexclass::proxy::method::Context& context);
49+
4850
std::shared_ptr<arrow::Array> array;
4951
};
5052

0 commit comments

Comments
 (0)