|
10 | 10 |
|
11 | 11 |
|
12 | 12 | class MexFunction : public matlab::mex::Function { |
| 13 | +private: |
| 14 | +#include "mex2string.inl" |
| 15 | + |
13 | 16 | public: |
14 | 17 | void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) { |
15 | | -// boilerplate engine & ArrayFactory setup |
16 | | - std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine(); |
17 | 18 |
|
18 | 19 | matlab::data::ArrayFactory factory; |
19 | | -// wrangle inputs |
| 20 | + |
20 | 21 | std::string target, link; |
21 | 22 |
|
22 | | - if (inputs.size() != 2) { |
23 | | - matlabEng->feval(u"error", 0, |
24 | | - std::vector<matlab::data::Array>({ factory.createScalar("Mex: Two inputs required") })); |
25 | | - } |
26 | | - |
27 | | - if ((inputs[0].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[0].getNumberOfElements() == 1)){ |
28 | | - matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0]; |
29 | | - target = stringArr[0]; |
30 | | - } else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){ |
31 | | - matlab::data::CharArray charArr = inputs[0]; |
32 | | - target.assign(charArr.begin(), charArr.end()); |
33 | | - } else { |
34 | | - matlabEng->feval(u"error", 0, |
35 | | - std::vector<matlab::data::Array>({ factory.createScalar("Mex: First input must be a scalar string or char vector") })); |
36 | | - } |
37 | | - |
38 | | - if ((inputs[1].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[1].getNumberOfElements() == 1)){ |
39 | | - matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[1]; |
40 | | - link = stringArr[0]; |
41 | | - } else if (inputs[1].getType() == matlab::data::ArrayType::CHAR){ |
42 | | - matlab::data::CharArray charArr = inputs[1]; |
43 | | - link.assign(charArr.begin(), charArr.end()); |
44 | | - } else { |
45 | | - matlabEng->feval(u"error", 0, |
46 | | - std::vector<matlab::data::Array>({ factory.createScalar("Mex: Second input must be a scalar string or char vector") })); |
47 | | - } |
48 | | - |
49 | | -// actual function algorithm / computation |
50 | | - bool y = fs_create_symlink(target, link); |
| 23 | + matlab_2string(inputs, &target, &link); |
51 | 24 |
|
52 | 25 | // convert to Matlab output |
53 | 26 | // https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html |
54 | 27 | // https://www.mathworks.com/help/matlab/apiref/matlab.data.arrayfactory.html |
55 | 28 |
|
56 | | - outputs[0] = factory.createScalar<bool>(y); |
| 29 | + outputs[0] = factory.createScalar<bool>(fs_create_symlink(target, link)); |
57 | 30 | } |
58 | 31 | }; |
0 commit comments