Skip to content

Commit 4b1aee3

Browse files
committed
Add SchemaCStruct proxy class
1 parent 6f9caad commit 4b1aee3

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
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/schema_c_struct.h"
19+
#include "libmexclass/proxy/Proxy.h"
20+
21+
namespace arrow::matlab::c::proxy {
22+
SchemaCStruct::SchemaCStruct() : schema_c_struct{new ArrowSchema{}} {
23+
REGISTER_METHOD(SchemaCStruct, getAddress);
24+
}
25+
26+
libmexclass::proxy::MakeResult SchemaCStruct::make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
27+
return std::make_shared<SchemaCStruct>();
28+
}
29+
30+
SchemaCStruct::~SchemaCStruct() {
31+
if (schema_c_struct != nullptr) {
32+
if (schema_c_struct->release != nullptr) {
33+
schema_c_struct->release(schema_c_struct);
34+
schema_c_struct->release = nullptr;
35+
}
36+
free(schema_c_struct);
37+
}
38+
}
39+
40+
void SchemaCStruct::getAddress(libmexclass::proxy::method::Context& context) {
41+
namespace mda = ::matlab::data;
42+
43+
mda::ArrayFactory factory;
44+
auto address = reinterpret_cast<uint64_t>(schema_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 SchemaCStruct : public libmexclass::proxy::Proxy {
26+
public:
27+
SchemaCStruct();
28+
29+
~SchemaCStruct();
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 ArrowSchema* schema_c_struct;
38+
39+
};
40+
41+
} // namespace arrow::matlab::c::proxy

0 commit comments

Comments
 (0)