Skip to content

Commit 229bf51

Browse files
committed
Add ArrowCStruct proxy class
1 parent aaa1294 commit 229bf51

File tree

4 files changed

+94
-1
lines changed

4 files changed

+94
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
#include "arrow/matlab/c/proxy/array_c_struct.h"
19+
#include "libmexclass/proxy/Proxy.h"
20+
21+
namespace arrow::matlab::c::proxy {
22+
ArrayCStruct::ArrayCStruct() : array_c_struct{new ArrowArray{}} {
23+
REGISTER_METHOD(ArrayCStruct, getAddress);
24+
}
25+
26+
libmexclass::proxy::MakeResult ArrayCStruct::make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
27+
return std::make_shared<ArrayCStruct>();
28+
}
29+
30+
ArrayCStruct::~ArrayCStruct() {
31+
if (array_c_struct != nullptr) {
32+
if (array_c_struct->release != nullptr) {
33+
array_c_struct->release(array_c_struct);
34+
array_c_struct->release = nullptr;
35+
}
36+
free(array_c_struct);
37+
}
38+
}
39+
40+
void ArrayCStruct::getAddress(libmexclass::proxy::method::Context& context) {
41+
namespace mda = ::matlab::data;
42+
43+
mda::ArrayFactory factory;
44+
auto address = reinterpret_cast<uint64_t>(array_c_struct);
45+
context.outputs[0] = factory.createScalar(address);
46+
}
47+
48+
49+
} // namespace arrow::matlab::c::proxy
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
#pragma once
19+
20+
#include "arrow/c/abi.h"
21+
#include "libmexclass/proxy/Proxy.h"
22+
23+
namespace arrow::matlab::c::proxy {
24+
25+
class ArrayCStruct : public libmexclass::proxy::Proxy {
26+
public:
27+
ArrayCStruct();
28+
29+
~ArrayCStruct();
30+
31+
static libmexclass::proxy::MakeResult make(
32+
const libmexclass::proxy::FunctionArguments& constructor_arguments);
33+
34+
protected:
35+
void getAddress(libmexclass::proxy::method::Context& context);
36+
37+
struct ArrowArray* array_c_struct;
38+
39+
};
40+
41+
} // namespace arrow::matlab::c::proxy

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

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "arrow/matlab/array/proxy/time64_array.h"
2626
#include "arrow/matlab/array/proxy/timestamp_array.h"
2727
#include "arrow/matlab/buffer/proxy/buffer.h"
28+
#include "arrow/matlab/c/proxy/array_c_struct.h"
2829
#include "arrow/matlab/error/error.h"
2930
#include "arrow/matlab/io/csv/proxy/table_reader.h"
3031
#include "arrow/matlab/io/csv/proxy/table_writer.h"
@@ -99,6 +100,7 @@ libmexclass::proxy::MakeResult Factory::make_proxy(
99100
REGISTER_PROXY(arrow.io.feather.proxy.Reader , arrow::matlab::io::feather::proxy::Reader);
100101
REGISTER_PROXY(arrow.io.csv.proxy.TableWriter , arrow::matlab::io::csv::proxy::TableWriter);
101102
REGISTER_PROXY(arrow.io.csv.proxy.TableReader , arrow::matlab::io::csv::proxy::TableReader);
103+
REGISTER_PROXY(arrow.c.proxy.ArrayCStruct , arrow::matlab::c::proxy::ArrayCStruct);
102104
// clang-format on
103105

104106
return libmexclass::error::Error{error::UNKNOWN_PROXY_ERROR_ID,

matlab/tools/cmake/BuildMatlabArrowInterface.cmake

+2-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ set(MATLAB_ARROW_LIBMEXCLASS_CLIENT_PROXY_SOURCES "${CMAKE_SOURCE_DIR}/src/cpp/a
7575
"${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/io/csv/proxy/table_writer.cc"
7676
"${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/io/csv/proxy/table_reader.cc"
7777
"${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/index/validate.cc"
78-
"${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/buffer/proxy/buffer.cc")
78+
"${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/buffer/proxy/buffer.cc"
79+
"${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/c/proxy/array_c_struct.cc")
7980

8081

8182
set(MATLAB_ARROW_LIBMEXCLASS_CLIENT_PROXY_FACTORY_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/src/cpp/arrow/matlab/proxy")

0 commit comments

Comments
 (0)