Skip to content

Commit e527a6f

Browse files
committed
mex: inline
1 parent 66943a8 commit e527a6f

17 files changed

+139
-308
lines changed

src/create_symlink.cpp

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,22 @@
1010

1111

1212
class MexFunction : public matlab::mex::Function {
13+
private:
14+
#include "mex2string.inl"
15+
1316
public:
1417
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
15-
// boilerplate engine & ArrayFactory setup
16-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
1718

1819
matlab::data::ArrayFactory factory;
19-
// wrangle inputs
20+
2021
std::string target, link;
2122

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);
5124

5225
// convert to Matlab output
5326
// https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html
5427
// https://www.mathworks.com/help/matlab/apiref/matlab.data.arrayfactory.html
5528

56-
outputs[0] = factory.createScalar<bool>(y);
29+
outputs[0] = factory.createScalar<bool>(fs_create_symlink(target, link));
5730
}
5831
};

src/disk_available.cpp

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,15 @@
1313

1414

1515
class MexFunction : public matlab::mex::Function {
16+
private:
17+
#include "mex1string.inl"
18+
1619
public:
1720
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
18-
// boilerplate engine & ArrayFactory setup
19-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
2021

2122
matlab::data::ArrayFactory factory;
22-
// wrangle inputs
23-
std::string in;
24-
25-
if (inputs.size() != 1) {
26-
matlabEng->feval(u"error", 0,
27-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: One input required") }));
28-
}
29-
if ((inputs[0].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[0].getNumberOfElements() == 1)){
30-
matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0];
31-
in = stringArr[0];
32-
} else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){
33-
matlab::data::CharArray charArr = inputs[0];
34-
in.assign(charArr.begin(), charArr.end());
35-
} else {
36-
matlabEng->feval(u"error", 0,
37-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: First input must be a scalar string or char vector") }));
38-
}
39-
40-
// actual function algorithm / computation
41-
std::uintmax_t s = std::filesystem::space(in).available;
23+
24+
std::uintmax_t s = std::filesystem::space(matlab_1string_input(inputs)).available;
4225

4326
outputs[0] = factory.createScalar(s);
4427
}

src/disk_capacity.cpp

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,15 @@
1313

1414

1515
class MexFunction : public matlab::mex::Function {
16+
private:
17+
#include "mex1string.inl"
18+
1619
public:
1720
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
18-
// boilerplate engine & ArrayFactory setup
19-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
2021

2122
matlab::data::ArrayFactory factory;
22-
// wrangle inputs
23-
std::string in;
24-
25-
if (inputs.size() != 1) {
26-
matlabEng->feval(u"error", 0,
27-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: One input required") }));
28-
}
29-
if ((inputs[0].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[0].getNumberOfElements() == 1)){
30-
matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0];
31-
in = stringArr[0];
32-
} else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){
33-
matlab::data::CharArray charArr = inputs[0];
34-
in.assign(charArr.begin(), charArr.end());
35-
} else {
36-
matlabEng->feval(u"error", 0,
37-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: First input must be a scalar string or char vector") }));
38-
}
39-
40-
// actual function algorithm / computation
41-
std::uintmax_t s = std::filesystem::space(in).capacity;
23+
24+
std::uintmax_t s = std::filesystem::space(matlab_1string_input(inputs)).capacity;
4225

4326
outputs[0] = factory.createScalar(s);
4427
}

src/drop_slash.cpp

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,14 @@
1010

1111

1212
class MexFunction : public matlab::mex::Function {
13+
private:
14+
#include "mex1string.inl"
15+
1316
public:
1417
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
15-
// boilerplate engine & ArrayFactory setup
16-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
1718

1819
matlab::data::ArrayFactory factory;
1920

20-
// wrangle Inputs
21-
std::string in;
22-
23-
if (inputs.size() != 1) {
24-
matlabEng->feval(u"error", 0,
25-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: One input required") }));
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-
in = stringArr[0];
30-
} else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){
31-
matlab::data::CharArray charArr = inputs[0];
32-
in.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-
// actual function algorithm / computation
39-
std::string out = fs_drop_slash(in);
40-
41-
outputs[0] = factory.createScalar(out);
21+
outputs[0] = factory.createScalar(fs_drop_slash(matlab_1string_input(inputs)));
4222
}
4323
};

src/is_admin.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,15 @@
88

99

1010
class MexFunction : public matlab::mex::Function {
11+
private:
12+
#include "mex0.inl"
13+
1114
public:
1215
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
13-
// boilerplate engine & ArrayFactory setup
14-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
15-
matlab::data::ArrayFactory factory;
1616

17-
if (inputs.size() != 0) {
18-
matlabEng->feval(u"error", 0,
19-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: No input required") }));
20-
}
17+
matlab_0_input(inputs);
2118

22-
// actual function algorithm / computation
23-
bool y = fs_is_admin();
24-
25-
outputs[0] = factory.createScalar<bool>(y);
19+
matlab::data::ArrayFactory factory;
20+
outputs[0] = factory.createScalar<bool>(fs_is_admin());
2621
}
2722
};

src/is_char_device.cpp

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -38,38 +38,14 @@ static bool fs_is_char_device(std::string_view path)
3838

3939

4040
class MexFunction : public matlab::mex::Function {
41-
public:
42-
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
43-
// boilerplate engine & ArrayFactory setup
44-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
41+
private:
42+
#include "mex1string.inl"
4543

44+
public:
45+
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs)
46+
{
4647
matlab::data::ArrayFactory factory;
47-
// wrangle inputs
48-
std::string in;
49-
50-
if (inputs.size() != 1) {
51-
matlabEng->feval(u"error", 0,
52-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: One input required") }));
53-
}
54-
if ((inputs[0].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[0].getNumberOfElements() == 1)){
55-
matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0];
56-
in = stringArr[0];
57-
} else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){
58-
matlab::data::CharArray charArr = inputs[0];
59-
in.assign(charArr.begin(), charArr.end());
60-
} else {
61-
matlabEng->feval(u"error", 0,
62-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: First input must be a scalar string or char vector") }));
63-
}
64-
65-
// actual function algorithm / computation
66-
bool y = fs_is_char_device(in);
67-
68-
// convert to Matlab output
69-
// https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html
70-
// https://www.mathworks.com/help/matlab/apiref/matlab.data.arrayfactory.html
71-
72-
outputs[0] = factory.createScalar<bool>(y);
7348

49+
outputs[0] = factory.createScalar<bool>(fs_is_char_device(matlab_1string_input(inputs)));
7450
}
7551
};

src/is_rosetta.cpp

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,16 @@
88

99

1010
class MexFunction : public matlab::mex::Function {
11+
private:
12+
#include "mex0.inl"
13+
1114
public:
1215
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
13-
// boilerplate engine & ArrayFactory setup
14-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
15-
16-
matlab::data::ArrayFactory factory;
17-
// boilerplate input checks
18-
if (inputs.size() != 0) {
19-
matlabEng->feval(u"error", 0,
20-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: No input required") }));
21-
}
2216

23-
// actual function algorithm / computation
24-
bool y = fs_is_rosetta();
17+
matlab_0_input(inputs);
2518

26-
// convert to Matlab output
27-
// https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html
28-
// https://www.mathworks.com/help/matlab/apiref/matlab.data.arrayfactory.html
19+
matlab::data::ArrayFactory factory;
2920

30-
outputs[0] = factory.createScalar<bool>(y);
21+
outputs[0] = factory.createScalar<bool>(fs_is_rosetta());
3122
}
3223
};

src/is_symlink.cpp

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,18 @@
1010

1111

1212
class MexFunction : public matlab::mex::Function {
13+
private:
14+
#include "mex1string.inl"
15+
1316
public:
1417
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
15-
// boilerplate engine & ArrayFactory setup
16-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
1718

1819
matlab::data::ArrayFactory factory;
19-
// wrangle inputs
20-
std::string in;
21-
22-
if (inputs.size() != 1) {
23-
matlabEng->feval(u"error", 0,
24-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: One input required") }));
25-
}
26-
if ((inputs[0].getType() == matlab::data::ArrayType::MATLAB_STRING && inputs[0].getNumberOfElements() == 1)){
27-
matlab::data::TypedArray<matlab::data::MATLABString> stringArr = inputs[0];
28-
in = stringArr[0];
29-
} else if (inputs[0].getType() == matlab::data::ArrayType::CHAR){
30-
matlab::data::CharArray charArr = inputs[0];
31-
in.assign(charArr.begin(), charArr.end());
32-
} else {
33-
matlabEng->feval(u"error", 0,
34-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: First input must be a scalar string or char vector") }));
35-
}
36-
37-
// actual function algorithm / computation
38-
bool y = fs_is_symlink(in);
3920

4021
// convert to Matlab output
4122
// https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html
4223
// https://www.mathworks.com/help/matlab/apiref/matlab.data.arrayfactory.html
4324

44-
outputs[0] = factory.createScalar<bool>(y);
25+
outputs[0] = factory.createScalar<bool>(fs_is_symlink(matlab_1string_input(inputs)));
4526
}
4627
};

src/is_wsl.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,16 @@
88

99

1010
class MexFunction : public matlab::mex::Function {
11+
private:
12+
#include "mex0.inl"
13+
1114
public:
1215
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
13-
// boilerplate engine & ArrayFactory setup
14-
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
15-
matlab::data::ArrayFactory factory;
1616

17-
if (inputs.size() != 0) {
18-
matlabEng->feval(u"error", 0,
19-
std::vector<matlab::data::Array>({ factory.createScalar("Mex: No input required") }));
20-
}
17+
matlab_0_input(inputs);
2118

22-
// actual function algorithm / computation
23-
int wsl = fs_is_wsl();
19+
matlab::data::ArrayFactory factory;
2420

25-
outputs[0] = factory.createScalar<int>(wsl);
21+
outputs[0] = factory.createScalar<int>(fs_is_wsl());
2622
}
2723
};

src/mex0.inl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
void matlab_0_input(matlab::mex::ArgumentList inputs)
2+
{
3+
std::shared_ptr<matlab::engine::MATLABEngine> matlabEng = getEngine();
4+
5+
matlab::data::ArrayFactory factory;
6+
7+
if (inputs.size() != 0) {
8+
matlabEng->feval(u"error", 0,
9+
std::vector<matlab::data::Array>({ factory.createScalar("MexFunction requires exactly zero inputs.") }));
10+
}
11+
}

0 commit comments

Comments
 (0)