From b18e38ed2b834cd0f689c584f84d0b00715ccb60 Mon Sep 17 00:00:00 2001 From: conrad Date: Wed, 8 Oct 2025 12:18:24 +1000 Subject: [PATCH] remove mex_interface --- README.md | 12 +- mex_interface/README.txt | 8 - mex_interface/armaMex.hpp | 817 ------------------------ mex_interface/armaMex_demo.cpp | 64 -- mex_interface/armaMex_documentation.pdf | Bin 99889 -> 0 bytes mex_interface/run_demo.m | 11 - 6 files changed, 2 insertions(+), 910 deletions(-) delete mode 100644 mex_interface/README.txt delete mode 100644 mex_interface/armaMex.hpp delete mode 100644 mex_interface/armaMex_demo.cpp delete mode 100644 mex_interface/armaMex_documentation.pdf delete mode 100644 mex_interface/run_demo.m diff --git a/README.md b/README.md index cae318bb..671716dd 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,7 @@ Copyright 2017-2025 Data61 / CSIRO 13. [API Stability and Version Policy](#13-api-stability-and-version-policy) 14. [Bug Reports and Frequently Asked Questions](#14-bug-reports-and-frequently-asked-questions) -15. [MEX Interface to Octave/Matlab](#15-mex-interface-to-octavematlab) -16. [Related Software Using Armadillo](#16-related-software-using-armadillo) +15. [Related Software Using Armadillo](#15-related-software-using-armadillo) --- @@ -452,14 +451,7 @@ https://arma.sourceforge.net/faq.html --- -### 15: MEX Interface to Octave/Matlab - -The `mex_interface` folder contains examples of how to interface -Octave/Matlab with C++ code that uses Armadillo matrices. - ---- - -### 16: Related Software Using Armadillo +### 15: Related Software Using Armadillo * MLPACK: extensive library of machine learning algorithms https://mlpack.org diff --git a/mex_interface/README.txt b/mex_interface/README.txt deleted file mode 100644 index e039571f..00000000 --- a/mex_interface/README.txt +++ /dev/null @@ -1,8 +0,0 @@ -IMPORTANT! ----------- - -All mex objects need to be linked _statically_ with BLAS and LAPACK -(or high-performance versions such as OpenBLAS) -in order to work correctly with Matlab. - -See "armaMex_documentation.pdf" and "armaMex_demo.cpp" for example usage. diff --git a/mex_interface/armaMex.hpp b/mex_interface/armaMex.hpp deleted file mode 100644 index cfc24d80..00000000 --- a/mex_interface/armaMex.hpp +++ /dev/null @@ -1,817 +0,0 @@ -// Copyright 2014 Conrad Sanderson (http://conradsanderson.id.au) -// Copyright 2014 National ICT Australia (NICTA) -// -// Licensed 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. -// ------------------------------------------------------------------------ - - -// Connector for Mex files to use Armadillo for calculation -// Version 0.6 - - -#include -#include -#include -#include - -using namespace std; -using namespace arma; - - -// Get scalar value from Matlab/Octave -template -inline -Type -armaGetScalar(const mxArray* matlabScalar) - { - if(mxGetData(matlabScalar) != NULL) - { - return (Type)mxGetScalar(matlabScalar); - } - else - { - mexErrMsgTxt("No data available."); - return 0; - } - } - - -// To keep with Matlab/Octave mex functions since functions for double are usually defined in conjunction with the general functions. -inline -double -armaGetDouble(const mxArray* matlabScalar) - { - return armaGetScalar(matlabScalar); - } - - -// Get non-double real matrix from Matlab/Octave. Type should be case according to input. -// Use mxGetClassID inside main program to test for type. -template -inline -Mat -armaGetData(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 2) - { - return Mat((Type *)mxGetData(matlabMatrix), mxGetM(matlabMatrix), mxGetN(matlabMatrix), copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 2."); - return Mat(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Mat(); - } - } - - -// Get double real matrix from Matlab/Octave. -inline -Mat -armaGetPr(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 2) - { - return Mat(mxGetPr(matlabMatrix), mxGetM(matlabMatrix), mxGetN(matlabMatrix), copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 2."); - return Mat(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Mat(); - } - } - - -// Get non-double imaginary matrix from Matlab/Octave. Type should be case according to input. -// Use mxGetClassID inside main program to test for type. -template -inline -Mat -armaGetImagData(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetImagData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 2) - { - return Mat((Type *)mxGetImagData(matlabMatrix), mxGetM(matlabMatrix), mxGetN(matlabMatrix), copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 2."); - return Mat(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Mat(); - } - } - - -// Get double imaginary matrix from Matlab/Octave. -inline -Mat -armaGetPi(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetImagData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 2) - { - return Mat(mxGetPi(matlabMatrix), mxGetM(matlabMatrix), mxGetN(matlabMatrix), copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 2."); - return Mat(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Mat(); - } - } - - -// Get complex matrix from Matlab/Octave -inline -cx_mat -armaGetCx(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if( (mxGetPr(matlabMatrix) != NULL) && (mxGetPi(matlabMatrix) != NULL) ) - { - return cx_mat(armaGetPr(matlabMatrix, copy_aux_mem, strict), armaGetPi(matlabMatrix, copy_aux_mem, strict)); - } - else if( (mxGetPr(matlabMatrix) != NULL) && (mxGetPi(matlabMatrix) == NULL) ) - { - return cx_mat(armaGetPr(matlabMatrix, copy_aux_mem, strict), zeros(mxGetM(matlabMatrix),mxGetN(matlabMatrix))); - } - else if( (mxGetPr(matlabMatrix) == NULL) && (mxGetPi(matlabMatrix) != NULL) ) - { - return cx_mat(zeros(mxGetM(matlabMatrix), mxGetN(matlabMatrix)), armaGetPi(matlabMatrix, copy_aux_mem, strict)); - } - else - { - mexErrMsgTxt("No data available."); - return cx_mat(); - } - } - - -// Return non-double real valued matrix to Matlab/Octave -template -inline -void -armaSetData(mxArray* matlabMatrix, const Mat& armaMatrix) - { - Type *dst_pointer = (Type*)mxGetData(matlabMatrix); - const Type *src_pointer = (Type*)armaMatrix.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(Type)*armaMatrix.n_elem); - } - - -// Return double real valued matrix to Matlab/Octave -inline -void -armaSetPr(mxArray* matlabMatrix, const Mat& armaMatrix) - { - double *dst_pointer = mxGetPr(matlabMatrix); - const double *src_pointer = armaMatrix.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(double)*armaMatrix.n_elem); - } - - -// Return imaginary valued matrix to Matlab/Octave. -template -inline -void -armaSetImagData(mxArray* matlabMatrix, const Mat& armaMatrix) - { - Type *dst_pointer = (Type*)mxGetImagData(matlabMatrix); - const Type *src_pointer = (Type*)armaMatrix.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(Type)*armaMatrix.n_elem); - } - - -// Return double complex valued matrix to Matlab/Octave -inline -void -armaSetPi(mxArray* matlabMatrix, const Mat& armaMatrix) - { - double *dst_pointer = mxGetPi(matlabMatrix); - const double *src_pointer = armaMatrix.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(double)*armaMatrix.n_elem); - } - - -// Return complex matrix to Matlab/Octave. Requires Matlab/Octave matrix to be mxCOMPLEX -inline -void -armaSetCx(mxArray* matlabMatrix, const cx_mat& armaMatrix) - { - armaSetPr(matlabMatrix, real(armaMatrix)); - armaSetPi(matlabMatrix, imag(armaMatrix)); - } - - -// Cube functions - -// Get non-double real cube from Matlab/Octave. Type should be case according to input. -// Use mxGetClassID inside main program to test for type. -template -inline -Cube -armaGetCubeData(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 3) - { - const mwSize *dims = mxGetDimensions(matlabMatrix); - return Cube((Type *)mxGetData(matlabMatrix), dims[0], dims[1], dims[2], copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 3."); - return Cube(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Cube(); - } - } - - -// Get double cube from Matlab/Octave. -inline -Cube -armaGetCubePr(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 3) - { - const mwSize *dims = mxGetDimensions(matlabMatrix); - return Cube(mxGetPr(matlabMatrix), dims[0], dims[1], dims[2], copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 3."); - return Cube(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Cube(); - } - } - - -// Get non-double imaginary cube from Matlab/Octave. Type should be case according to input. -// Use mxGetClassID inside main program to test for type. -template -inline -Cube -armaGetCubeImagData(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetImagData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 3) - { - const mwSize *dims = mxGetDimensions(matlabMatrix); - return Cube((Type *)mxGetImagData(matlabMatrix), dims[0], dims[1], dims[2], copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 3."); - return Cube(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Cube(); - } - } - - -// Get double cube from Matlab/Octave. -inline -Cube -armaGetCubePi(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if(mxGetImagData(matlabMatrix) != NULL) - { - const mwSize n_dim = mxGetNumberOfDimensions(matlabMatrix); - - if(n_dim == 3) - { - const mwSize *dims = mxGetDimensions(matlabMatrix); - return Cube(mxGetPi(matlabMatrix), dims[0], dims[1], dims[2], copy_aux_mem, strict); - } - else - { - mexErrMsgTxt("Number of dimensions must be 3."); - return Cube(); - } - } - else - { - mexErrMsgTxt("No data available."); - return Cube(); - } - } - - -// Get complex cube from Matlab/Octave -inline -cx_cube -armaGetCubeCx(const mxArray* matlabMatrix, bool copy_aux_mem = false, bool strict = true) - { - if( (mxGetPr(matlabMatrix) != NULL) && (mxGetPi(matlabMatrix) != NULL) ) - { - return cx_cube(armaGetCubePr(matlabMatrix, copy_aux_mem, strict), armaGetCubePi(matlabMatrix, copy_aux_mem, strict)); - } - else if( (mxGetPr(matlabMatrix) != NULL) && (mxGetPi(matlabMatrix) == NULL) ) - { - const mwSize *dims = mxGetDimensions(matlabMatrix); - return cx_cube(armaGetCubePr(matlabMatrix, copy_aux_mem, strict), zeros(dims[0], dims[1], dims[2])); - } - else if( (mxGetPr(matlabMatrix) == NULL) && (mxGetPi(matlabMatrix) != NULL) ) - { - const mwSize *dims = mxGetDimensions(matlabMatrix); - return cx_cube(zeros(dims[0], dims[1], dims[2]), armaGetCubePi(matlabMatrix, copy_aux_mem, strict)); - } - else - { - mexErrMsgTxt("No data available."); - return cx_cube(); - } - } - -// return real valued cube to Matlab/Octave -template -inline -void -armaSetCubeData(mxArray* matlabMatrix, const Cube& armaCube) - { - Type *dst_pointer = (Type*)mxGetData(matlabMatrix); - const Type *src_pointer = (Type*)armaCube.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(Type)*armaCube.n_elem); - } - - -// Return double real valued cube to Matlab/Octave -inline -void -armaSetCubePr(mxArray* matlabMatrix, const Cube& armaCube) - { - double *dst_pointer = mxGetPr(matlabMatrix); - const double *src_pointer = armaCube.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(double)*armaCube.n_elem); - } - - -// Return imaginary valued cube to Matlab/Octave. -template -inline -void -armaSetImagCubeData(mxArray* matlabMatrix, const Cube& armaCube) - { - Type *dst_pointer = (Type*)mxGetImagData(matlabMatrix); - const Type *src_pointer = (Type*)armaCube.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(Type)*armaCube.n_elem); - } - - -// Return double imaginary valued matrix to Matlab/Octave -inline -void -armaSetCubePi(mxArray* matlabMatrix, const Cube& armaCube) - { - double *dst_pointer = mxGetPi(matlabMatrix); - const double *src_pointer = armaCube.memptr(); - - std::memcpy(dst_pointer, src_pointer, sizeof(double)*armaCube.n_elem); - } - - -// Return double complex cube to Matlab/Octave. -inline -void -armaSetCubeCx(mxArray* matlabMatrix, const cx_cube& armaCube) - { - armaSetCubePr(matlabMatrix, real(armaCube)); - armaSetCubePi(matlabMatrix, imag(armaCube)); - } - - -// Sparse matrices - - -// Get sparse matrix from Matlab/Octave. -template -inline -SpMat -armaGetSparseData(const mxArray* matlabMatrix, bool sort_locations = false) - { - if(!mxIsSparse(matlabMatrix)) - { - mexErrMsgTxt("Matrix is not sparse."); - return SpMat(); - } - else - { - Type *pr = (Type *)mxGetData(matlabMatrix); - - if(pr == NULL) - { - mexErrMsgTxt("No data available."); - return SpMat(); - } - - mwIndex *jc = mxGetJc(matlabMatrix); - mwIndex *ir = mxGetIr(matlabMatrix); - - mwSize m = mxGetM(matlabMatrix); - mwSize n = mxGetN(matlabMatrix); - - mwSize non_zero = mxGetNzmax(matlabMatrix); - - umat locations = zeros(2,non_zero); - Col values = zeros< Col >(non_zero); - mwSize row = 0; - - for(mwSize col = 0; col < n ; col++) - { - - mwIndex starting_row_index = jc[col]; - mwIndex stopping_row_index = jc[col+1]; - - if (starting_row_index == stopping_row_index) - { - // End of matrix when jc[col] == jc[col+1] - continue; - } - else - { - for (mwIndex current_row_index = starting_row_index; current_row_index < stopping_row_index; current_row_index++) - { - values[row]=pr[row]; - locations.at(0,row)=ir[current_row_index]; - locations.at(1,row)=col; - row++; - } - } - } - - return SpMat(locations, values, m, n, sort_locations); - } - } - - -// Get double valued sparse matrix from Matlab/Octave. -inline -SpMat -armaGetSparseMatrix(const mxArray* matlabMatrix, bool sort_locations = false) - { - if(!mxIsSparse(matlabMatrix)) - { - mexErrMsgTxt("Matrix is not sparse."); - return SpMat(); - } - else - { - double *pr = mxGetPr(matlabMatrix); - - if(pr == NULL) - { - mexErrMsgTxt("No data available."); - return SpMat(); - } - - mwIndex *jc = mxGetJc(matlabMatrix); - mwIndex *ir = mxGetIr(matlabMatrix); - - mwSize m = mxGetM(matlabMatrix); - mwSize n = mxGetN(matlabMatrix); - - mwSize non_zero = mxGetNzmax(matlabMatrix); - - umat locations = zeros(2,non_zero); - Col values = zeros< Col >(non_zero); - - mwSize row = 0; - - for(mwSize col = 0; col < n ; col++) - { - - mwIndex starting_row_index = jc[col]; - mwIndex stopping_row_index = jc[col+1]; - - if (starting_row_index == stopping_row_index) - { - // End of matrix when jc[col] == jc[col+1] - continue; - } - else - { - for (mwIndex current_row_index = starting_row_index; current_row_index < stopping_row_index ; current_row_index++) - { - values[row]=pr[row]; - locations.at(0,row)=ir[current_row_index]; - locations.at(1,row)=col; - row++; - } - } - - } - return SpMat(locations, values, m, n, sort_locations); - } - } - - -// Get imaginary sparse matrix from Matlab/Octave. -template -inline -SpMat -armaGetSparseImagData(const mxArray* matlabMatrix, bool sort_locations = false) - { - if(!mxIsSparse(matlabMatrix)) - { - mexErrMsgTxt("Matrix is not sparse."); - return SpMat(); - } - else - { - Type *pi = (Type *)mxGetImagData(matlabMatrix); - - if(pi == NULL) - { - mexErrMsgTxt("No data available."); - return SpMat(); - } - - mwIndex *jc = mxGetJc(matlabMatrix); - mwIndex *ir = mxGetIr(matlabMatrix); - - mwSize m = mxGetM(matlabMatrix); - mwSize n = mxGetN(matlabMatrix); - - mwSize non_zero = mxGetNzmax(matlabMatrix); - - umat locations = zeros(2,non_zero); - Col values = zeros< Col >(non_zero); - mwSize row = 0; - - for(mwSize col = 0; col < n ; col++) - { - mwIndex starting_row_index = jc[col]; - mwIndex stopping_row_index = jc[col+1]; - - if (starting_row_index == stopping_row_index) - { - // End of matrix when jc[col] == jc[col+1] - continue; - } - else - { - for (mwIndex current_row_index = starting_row_index; current_row_index < stopping_row_index; current_row_index++) - { - values[row]=pi[row]; - locations.at(0,row)=ir[current_row_index]; - locations.at(1,row)=col; - row++; - } - } - } - - return SpMat(locations, values, m, n, sort_locations); - } - } - - -// Get imaginary double valued sparse matrix from Matlab/Octave. -inline -SpMat -armaGetSparseImagMatrix(const mxArray* matlabMatrix, bool sort_locations = false) - { - if(!mxIsSparse(matlabMatrix)) - { - mexErrMsgTxt("Matrix is not sparse."); - return SpMat(); - } - else - { - double *pi = mxGetPi(matlabMatrix); - - if(pi == NULL) - { - mexErrMsgTxt("No data available."); - return SpMat(); - } - - mwIndex *jc = mxGetJc(matlabMatrix); - mwIndex *ir = mxGetIr(matlabMatrix); - - mwSize m = mxGetM(matlabMatrix); - mwSize n = mxGetN(matlabMatrix); - - mwSize non_zero = mxGetNzmax(matlabMatrix); - - umat locations = zeros(2,non_zero); - Col values = zeros< Col >(non_zero); - - mwSize row = 0; - - for(mwSize col = 0; col < n ; col++) - { - mwIndex starting_row_index = jc[col]; - mwIndex stopping_row_index = jc[col+1]; - - if (starting_row_index == stopping_row_index) - { - // End of matrix when jc[col] == jc[col+1] - continue; - } - else - { - for (mwIndex current_row_index = starting_row_index; current_row_index < stopping_row_index; current_row_index++) - { - values[row]=pi[row]; - locations.at(0,row)=ir[current_row_index]; - locations.at(1,row)=col; - row++; - } - } - } - - return SpMat(locations, values, m, n, sort_locations); - } - } - - -// Return sparse matrix to matlab -inline -void -armaSetSparsePr(mxArray* matlabMatrix, const SpMat& armaMatrix) - { - double *sr = mxGetPr(matlabMatrix); - mwIndex *irs = mxGetIr(matlabMatrix); - mwIndex *jcs = mxGetJc(matlabMatrix); - - armaMatrix.sync(); - - mwSize n_nonzero = armaMatrix.n_nonzero; - mwSize n_cols = armaMatrix.n_cols; - - for (mwIndex j = 0; j < n_nonzero; j++) - { - sr[j] = armaMatrix.values[j]; - irs[j] = armaMatrix.row_indices[j]; - } - for (mwIndex j = 0; j <= n_cols; j++) - { - jcs[j] = armaMatrix.col_ptrs[j]; - } - } - - -// Return sparse matrix to matlab as imaginary part -inline -void -armaSetSparsePi(mxArray* matlabMatrix, const SpMat& armaMatrix) - { - double *si = mxGetPi(matlabMatrix); - mwIndex *irs = mxGetIr(matlabMatrix); - mwIndex *jcs = mxGetJc(matlabMatrix); - - armaMatrix.sync(); - - mwSize n_nonzero = armaMatrix.n_nonzero; - mwSize n_cols = armaMatrix.n_cols; - - for (mwIndex j = 0; j < n_nonzero; j++) - { - si[j] = armaMatrix.values[j]; - irs[j] = armaMatrix.row_indices[j]; - } - for (mwIndex j = 0; j <= n_cols; j++) - { - jcs[j] = armaMatrix.col_ptrs[j]; - } - } - - -// Create matlab side matrices - - -// Create 2-D Matlab/Octave matrix -inline -mxArray* -armaCreateMxMatrix(const mwSize n_rows, const mwSize n_cols, const mxClassID mx_type = mxDOUBLE_CLASS, const mxComplexity mx_complexity = mxREAL) - { - mxArray* temp = mxCreateNumericMatrix(n_rows, n_cols, mx_type, mx_complexity); - - if(temp == NULL) - { - mexErrMsgTxt("Could not create array."); - return NULL; - } - else - { - return temp; - } - } - - -// Create 3-D Matlab/Octave matrix (cube) -inline -mxArray* -armaCreateMxMatrix(const mwSize n_rows, const mwSize n_cols, const mwSize n_slices, const mxClassID mx_type = mxDOUBLE_CLASS, const mxComplexity mx_complexity = mxREAL) - { - mwSize dims[3] = { n_rows, n_cols, n_slices }; - - const mwSize n_dim = 3; - - mxArray* temp = mxCreateNumericArray(n_dim, dims, mx_type, mx_complexity); - - if(temp == NULL) - { - mexErrMsgTxt("Could not create array."); - return NULL; - } - else - { - return temp; - } - } - - -inline -mxArray* -armaCreateMxSparseMatrix(const mwSize n_rows,const mwSize n_cols,const mwSize n_nonzero,const mxComplexity mx_complexity = mxREAL) - { - mxArray* temp = mxCreateSparse(n_rows, n_cols, n_nonzero, mx_complexity); - - if(temp == NULL) - { - mexErrMsgTxt("Could not create array."); - return NULL; - } - else - { - return temp; - } - } - - diff --git a/mex_interface/armaMex_demo.cpp b/mex_interface/armaMex_demo.cpp deleted file mode 100644 index 5d9f9b03..00000000 --- a/mex_interface/armaMex_demo.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 Conrad Sanderson (http://conradsanderson.id.au) -// Copyright 2014 National ICT Australia (NICTA) -// -// Licensed 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. -// ------------------------------------------------------------------------ - - -// Demonstration of how to connect Armadillo with Matlab mex functions. -// Version 0.2 - - -#include "armaMex.hpp" - - -void -mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) - { - // Check the number of input arguments. - if (nrhs != 2) - mexErrMsgTxt("Incorrect number of input arguments."); - - // Check type of input. - if ( (mxGetClassID(prhs[0]) != mxDOUBLE_CLASS) || (mxGetClassID(prhs[1]) != mxDOUBLE_CLASS) ) - mexErrMsgTxt("Input must me of type double."); - - // Check if input is real. - if ( (mxIsComplex(prhs[0])) || (mxIsComplex(prhs[1])) ) - mexErrMsgTxt("Input must be real."); - - // Create matrices X and Y from the first and second argument. - mat X = armaGetPr(prhs[0]); - mat Y = armaGetPr(prhs[1]); - - // Our calculations require that matrices must be of the same size - if ( arma::size(X) != arma::size(Y) ) - mexErrMsgTxt("Matrices should be of same size."); - - // Perform calculations - mat A = X + Y; - mat B = X % Y; // % means element-wise multiplication in Armadillo - - // Create cube C with A and B as slices. - cube C(A.n_rows, A.n_cols, 2); - - C.slice(0) = A; - C.slice(1) = B; - - // Create the output argument plhs[0] to return cube C - plhs[0] = armaCreateMxMatrix(C.n_rows, C.n_cols, C.n_slices); - - // Return the cube C as plhs[0] in Matlab/Octave - armaSetCubePr(plhs[0], C); - - return; - } diff --git a/mex_interface/armaMex_documentation.pdf b/mex_interface/armaMex_documentation.pdf deleted file mode 100644 index 3d4a3e6567d7fbf2130814c266137f7abd4f22b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99889 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%0Do0=}&6?~fkXwLTNH_DRI8-#=^KALX8V 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