@@ -63,31 +63,35 @@ class MexFunction : public matlab::mex::Function {
6363public:
6464 void operator ()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
6565// boilerplate engine & ArrayFactory setup
66- std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine ();
66+ std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine ();
6767
6868 matlab::data::ArrayFactory factory;
69- // boilerplate input checks
69+ // wrangle inputs
70+ std::string in;
71+
7072 if (inputs.size () != 4 ) {
71- matlabPtr ->feval (u" error" , 0 ,
73+ matlabEng ->feval (u" error" , 0 ,
7274 std::vector<matlab::data::Array>({ factory.createScalar (" Four inputs required" ) }));
7375 }
74- if (inputs[0 ].getType () != matlab::data::ArrayType::MATLAB_STRING ||
75- inputs[0 ].getNumberOfElements () != 1 ) {
76- matlabPtr->feval (u" error" , 0 ,
77- std::vector<matlab::data::Array>({ factory.createScalar (" Input must be a scalar string" ) }));
76+ if ((inputs[0 ].getType () == matlab::data::ArrayType::MATLAB_STRING && inputs[0 ].getNumberOfElements () == 1 )){
77+ matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0 ];
78+ in = stringArr[0 ];
79+ } else if (inputs[0 ].getType () == matlab::data::ArrayType::CHAR){
80+ matlab::data::CharArray charArr = inputs[0 ];
81+ in.assign (charArr.begin (), charArr.end ());
82+ } else {
83+ matlabEng->feval (u" error" , 0 ,
84+ std::vector<matlab::data::Array>({ factory.createScalar (" Mex: First input must be a scalar string or char vector" ) }));
7885 }
7986 if (inputs[1 ].getType () != matlab::data::ArrayType::DOUBLE ||
8087 inputs[2 ].getType () != matlab::data::ArrayType::DOUBLE ||
8188 inputs[3 ].getType () != matlab::data::ArrayType::DOUBLE) {
82- matlabPtr ->feval (u" error" , 0 ,
83- std::vector<matlab::data::Array>({ factory.createScalar (" Permission inputs must be doubles" ) }));
89+ matlabEng ->feval (u" error" , 0 ,
90+ std::vector<matlab::data::Array>({ factory.createScalar (" Mex: Permission inputs must be scalar doubles" ) }));
8491 }
8592
86- // Matlab strings are an array, so we use [0][0] to get the first element
87- std::string inputStr = inputs[0 ][0 ];
88-
8993// actual function algorithm / computation
90- bool y = fs_set_permissions (inputStr , inputs[1 ][0 ], inputs[2 ][0 ], inputs[3 ][0 ]);
94+ bool y = fs_set_permissions (in , inputs[1 ][0 ], inputs[2 ][0 ], inputs[3 ][0 ]);
9195
9296// convert to Matlab output
9397// https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html
0 commit comments