|
12 | 12 | #include "ffilesystem.h" |
13 | 13 |
|
14 | 14 |
|
15 | | - |
16 | 15 | class MexFunction : public matlab::mex::Function { |
| 16 | +private: |
| 17 | +#include "mex2string.inl" |
| 18 | + |
17 | 19 | public: |
18 | 20 | void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) { |
19 | | -// boilerplate engine & ArrayFactory setup |
| 21 | + |
20 | 22 | std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine(); |
21 | 23 |
|
22 | 24 | matlab::data::ArrayFactory factory; |
23 | | -// wrangle inputs |
24 | | - std::string base, other; |
25 | 25 |
|
26 | | - if (inputs.size() != 2) { |
27 | | - matlabEng->feval(u"error", 0, |
28 | | - std::vector<matlab::data::Array>({ factory.createScalar("Mex: Two inputs required") })); |
29 | | - } |
30 | | - |
31 | | - if ((inputs[0].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[0].getNumberOfElements() == 1)){ |
32 | | - matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0]; |
33 | | - base = stringArr[0]; |
34 | | - } else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){ |
35 | | - matlab::data::CharArray charArr = inputs[0]; |
36 | | - base.assign(charArr.begin(), charArr.end()); |
37 | | - } else { |
38 | | - matlabEng->feval(u"error", 0, |
39 | | - std::vector<matlab::data::Array>({ factory.createScalar("Mex: First input must be a scalar string or char vector") })); |
40 | | - } |
| 26 | + std::string base, other; |
41 | 27 |
|
42 | | - if ((inputs[1].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[1].getNumberOfElements() == 1)){ |
43 | | - matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[1]; |
44 | | - other = stringArr[0]; |
45 | | - } else if (inputs[1].getType() == matlab::data::ArrayType::CHAR){ |
46 | | - matlab::data::CharArray charArr = inputs[1]; |
47 | | - other.assign(charArr.begin(), charArr.end()); |
48 | | - } else { |
49 | | - matlabEng->feval(u"error", 0, |
50 | | - std::vector<matlab::data::Array>({ factory.createScalar("Mex: Second input must be a scalar string or char vector") })); |
51 | | - } |
| 28 | + matlab_2string(inputs, &base, &other); |
52 | 29 |
|
53 | | -// actual function algorithm / computation |
54 | 30 | std::error_code ec; |
55 | | - std::string out; |
56 | | - |
57 | | - out = std::filesystem::proximate(other, base, ec).generic_string(); |
| 31 | + std::string out = std::filesystem::proximate(other, base, ec).generic_string(); |
58 | 32 |
|
59 | 33 | if(ec) |
60 | 34 | matlabEng->feval(u"error", 0, |
|
0 commit comments