diff --git a/matlab/src/cpp/arrow/matlab/proxy/factory.cc b/matlab/src/cpp/arrow/matlab/proxy/factory.cc index 5b3b85d33ce..b7f86b9fcf9 100644 --- a/matlab/src/cpp/arrow/matlab/proxy/factory.cc +++ b/matlab/src/cpp/arrow/matlab/proxy/factory.cc @@ -24,16 +24,20 @@ namespace arrow::matlab::proxy { std::shared_ptr Factory::make_proxy(const ClassName& class_name, const FunctionArguments& constructor_arguments) { - - // Register MATLAB Proxy classes for unsigned integer arrays - REGISTER_PROXY(arrow.array.proxy.UInt8Array, arrow::matlab::array::proxy::NumericArray); - REGISTER_PROXY(arrow.array.proxy.UInt16Array, arrow::matlab::array::proxy::NumericArray); - REGISTER_PROXY(arrow.array.proxy.UInt32Array, arrow::matlab::array::proxy::NumericArray); - REGISTER_PROXY(arrow.array.proxy.UInt64Array, arrow::matlab::array::proxy::NumericArray); - // Register MATLAB Proxy classes with corresponding C++ Proxy classes. REGISTER_PROXY(arrow.array.proxy.Float32Array, arrow::matlab::array::proxy::NumericArray); REGISTER_PROXY(arrow.array.proxy.Float64Array, arrow::matlab::array::proxy::NumericArray); + // Register MATLAB Proxy classes for unsigned integer arrays + REGISTER_PROXY(arrow.array.proxy.UInt8Array , arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.UInt16Array , arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.UInt32Array , arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.UInt64Array , arrow::matlab::array::proxy::NumericArray); + // Register MATLAB Proxy classes for signed integer arrays + REGISTER_PROXY(arrow.array.proxy.Int8Array , arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.Int16Array , arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.Int32Array , arrow::matlab::array::proxy::NumericArray); + REGISTER_PROXY(arrow.array.proxy.Int64Array , arrow::matlab::array::proxy::NumericArray); + // TODO: Decide what to do in the case that there isn't a Proxy match. std::cout << "Did not find a matching C++ proxy for: " + class_name << std::endl; return nullptr; diff --git a/matlab/src/matlab/+arrow/+array/Int16Array.m b/matlab/src/matlab/+arrow/+array/Int16Array.m new file mode 100644 index 00000000000..f2b76041295 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/Int16Array.m @@ -0,0 +1,40 @@ +classdef Int16Array < arrow.array.Array + % arrow.array.Int16Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties (Hidden, SetAccess=private) + MatlabArray = int16([]) + end + + methods + function obj = Int16Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "int16", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "int16", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.Int16Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = int16(obj) + data = obj.Proxy.toMATLAB(); + end + end +end diff --git a/matlab/src/matlab/+arrow/+array/Int32Array.m b/matlab/src/matlab/+arrow/+array/Int32Array.m new file mode 100644 index 00000000000..d493ee8ceb4 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/Int32Array.m @@ -0,0 +1,40 @@ +classdef Int32Array < arrow.array.Array + % arrow.array.Int32Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties (Hidden, SetAccess=private) + MatlabArray = int32([]) + end + + methods + function obj = Int32Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "int32", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "int32", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.Int32Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = int32(obj) + data = obj.Proxy.toMATLAB(); + end + end +end diff --git a/matlab/src/matlab/+arrow/+array/Int64Array.m b/matlab/src/matlab/+arrow/+array/Int64Array.m new file mode 100644 index 00000000000..85e9f2e62f6 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/Int64Array.m @@ -0,0 +1,40 @@ +classdef Int64Array < arrow.array.Array + % arrow.array.Int64Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties (Hidden, SetAccess=private) + MatlabArray = int64([]) + end + + methods + function obj = Int64Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "int64", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "int64", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.Int64Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = int64(obj) + data = obj.Proxy.toMATLAB(); + end + end +end diff --git a/matlab/src/matlab/+arrow/+array/Int8Array.m b/matlab/src/matlab/+arrow/+array/Int8Array.m new file mode 100644 index 00000000000..3452dd2d0f1 --- /dev/null +++ b/matlab/src/matlab/+arrow/+array/Int8Array.m @@ -0,0 +1,40 @@ +classdef Int8Array < arrow.array.Array + % arrow.array.Int8Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties (Hidden, SetAccess=private) + MatlabArray = int8([]) + end + + methods + function obj = Int8Array(data, opts) + arguments + data + opts.DeepCopy = false + end + validateattributes(data, "int8", ["2d", "nonsparse", "real"]); + if ~isempty(data), validateattributes(data, "int8", "vector"); end + obj@arrow.array.Array("Name", "arrow.array.proxy.Int8Array", "ConstructorArguments", {data, opts.DeepCopy}); + % Store a reference to the array if not doing a deep copy + if (~opts.DeepCopy), obj.MatlabArray = data; end + end + + function data = int8(obj) + data = obj.Proxy.toMATLAB(); + end + end +end diff --git a/matlab/test/arrow/array/tInt16Array.m b/matlab/test/arrow/array/tInt16Array.m new file mode 100644 index 00000000000..7ae3a5ead7f --- /dev/null +++ b/matlab/test/arrow/array/tInt16Array.m @@ -0,0 +1,28 @@ +classdef tInt16Array < hNumericArray + % Tests for arrow.array.Int16Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties + ArrowArrayClassName = "arrow.array.Int16Array" + ArrowArrayConstructor = @arrow.array.Int16Array + MatlabConversionFcn = @int16 % int16 method on class + MatlabArrayFcn = @int16 % int16 function + MaxValue = intmax("int16") + MinValue = intmin("int16") + end + +end diff --git a/matlab/test/arrow/array/tInt32Array.m b/matlab/test/arrow/array/tInt32Array.m new file mode 100644 index 00000000000..7b63c5c57ca --- /dev/null +++ b/matlab/test/arrow/array/tInt32Array.m @@ -0,0 +1,28 @@ +classdef tInt32Array < hNumericArray + % Tests for arrow.array.Int32Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties + ArrowArrayClassName = "arrow.array.Int32Array" + ArrowArrayConstructor = @arrow.array.Int32Array + MatlabConversionFcn = @int32 % int32 method on class + MatlabArrayFcn = @int32 % int32 function + MaxValue = intmax("int32") + MinValue = intmin("int32") + end + +end diff --git a/matlab/test/arrow/array/tInt64Array.m b/matlab/test/arrow/array/tInt64Array.m new file mode 100644 index 00000000000..41270ef240f --- /dev/null +++ b/matlab/test/arrow/array/tInt64Array.m @@ -0,0 +1,28 @@ +classdef tInt64Array < hNumericArray + % Tests for arrow.array.Int64Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties + ArrowArrayClassName = "arrow.array.Int64Array" + ArrowArrayConstructor = @arrow.array.Int64Array + MatlabConversionFcn = @int64 % int64 method on class + MatlabArrayFcn = @int64 % int64 function + MaxValue = intmax("int64") + MinValue = intmin("int64") + end + +end diff --git a/matlab/test/arrow/array/tInt8Array.m b/matlab/test/arrow/array/tInt8Array.m new file mode 100644 index 00000000000..76f96f01e45 --- /dev/null +++ b/matlab/test/arrow/array/tInt8Array.m @@ -0,0 +1,28 @@ +classdef tInt8Array < hNumericArray + % Tests for arrow.array.Int8Array + + % Licensed to the Apache Software Foundation (ASF) under one or more + % contributor license agreements. See the NOTICE file distributed with + % this work for additional information regarding copyright ownership. + % The ASF licenses this file to you under the Apache License, Version + % 2.0 (the "License"); you may not use this file except in compliance + % with the License. You may obtain a copy of the License at + % + % http://www.apache.org/licenses/LICENSE-2.0 + % + % Unless required by applicable law or agreed to in writing, software + % distributed under the License is distributed on an "AS IS" BASIS, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + % implied. See the License for the specific language governing + % permissions and limitations under the License. + + properties + ArrowArrayClassName = "arrow.array.Int8Array" + ArrowArrayConstructor = @arrow.array.Int8Array + MatlabConversionFcn = @int8 % int8 method on class + MatlabArrayFcn = @int8 % int8 function + MaxValue = intmax("int8") + MinValue = intmin("int8") + end + +end