Skip to content

Commit 3ff7e66

Browse files
committed
refactored nixgen to mkarray
1 parent 5e8d111 commit 3ff7e66

File tree

13 files changed

+54
-76
lines changed

13 files changed

+54
-76
lines changed

nix_mx.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "handle.h"
1010
#include "arguments.h"
1111
#include "struct.h"
12-
#include "nix2mx.h"
12+
#include "mknix.h"
1313

1414
#include "nixfile.h"
1515
#include "nixsection.h"

src/nixdataarray.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
#include "nixdataarray.h"
2-
#include "nixgen.h"
3-
2+
#include "mkarray.h"
43
#include "mex.h"
54

65
#include <nix.hpp>
76

87
#include "handle.h"
98
#include "arguments.h"
109
#include "struct.h"
11-
#include "nix2mx.h"
10+
#include "mknix.h"
1211

1312
namespace nixdataarray {
1413

@@ -44,7 +43,7 @@ namespace nixdataarray {
4443
void read_all(const extractor &input, infusor &output)
4544
{
4645
nix::DataArray da = input.entity<nix::DataArray>(1);
47-
mxArray *data = nixgen::dataset_read_all(da);
46+
mxArray *data = make_mx_array(da);
4847
output.set(0, data);
4948
}
5049

src/nixdimensions.cc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
#include "nixtag.h"
2-
#include "nixgen.h"
3-
4-
#include "mex.h"
5-
61
#include <nix.hpp>
7-
8-
#include "handle.h"
2+
#include "mex.h"
93
#include "arguments.h"
104
#include "struct.h"
115

src/nixgen.cc

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/nixgen.h

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/nixmultitag.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "nixmultitag.h"
2-
#include "nixgen.h"
2+
#include "mkarray.h"
33

44
#include "mex.h"
55

@@ -49,7 +49,7 @@ namespace nixmultitag {
4949
double p_index = input.num<double>(2);
5050
double f_index = input.num<double>(3);
5151

52-
mxArray *data = nixgen::dataset_read_all(currObj.retrieveData(p_index, f_index));
52+
mxArray *data = make_mx_array(currObj.retrieveData(p_index, f_index));
5353
output.set(0, data);
5454
}
5555

@@ -58,7 +58,7 @@ namespace nixmultitag {
5858
double p_index = input.num<double>(2);
5959
double f_index = input.num<double>(3);
6060

61-
mxArray *data = nixgen::dataset_read_all(currObj.retrieveFeatureData(p_index, f_index));
61+
mxArray *data = make_mx_array(currObj.retrieveFeatureData(p_index, f_index));
6262
output.set(0, data);
6363
}
6464

src/nixsection.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "handle.h"
77
#include "arguments.h"
88
#include "struct.h"
9-
#include "nix2mx.h"
9+
#include "mknix.h"
1010

1111

1212
namespace nixsection {

src/nixtag.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "nixtag.h"
2-
#include "nixgen.h"
2+
#include "mkarray.h"
33

44
#include "mex.h"
55

@@ -50,15 +50,15 @@ namespace nixtag {
5050
nix::Tag currObj = input.entity<nix::Tag>(1);
5151
double index = input.num<double>(2);
5252

53-
mxArray *data = nixgen::dataset_read_all(currObj.retrieveData(index));
53+
mxArray *data = make_mx_array(currObj.retrieveData(index));
5454
output.set(0, data);
5555
}
5656

5757
void retrieve_feature_data(const extractor &input, infusor &output) {
5858
nix::Tag currObj = input.entity<nix::Tag>(1);
5959
double index = input.num<double>(2);
6060

61-
mxArray *data = nixgen::dataset_read_all(currObj.retrieveFeatureData(index));
61+
mxArray *data = make_mx_array(currObj.retrieveFeatureData(index));
6262
output.set(0, data);
6363
}
6464

src/utils/arguments.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "handle.h"
66
#include "datatypes.h"
77
#include "mkarray.h"
8-
#include "nix2mx.h"
8+
#include "mknix.h"
99
#include <stdexcept>
1010

1111
// *** argument helpers ***
@@ -199,6 +199,13 @@ class extractor : public argument_helper<const mxArray> {
199199
return l[0];
200200
}
201201

202+
template<typename T>
203+
T get(size_t pos) const {
204+
check_size(pos);
205+
206+
return mx_array_to_nix(array[pos]);
207+
}
208+
202209
template<typename T>
203210
T entity(size_t pos) const {
204211
return hdl(pos).get<T>();

src/utils/mkarray.cc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,35 @@
11
#include "mkarray.h"
2+
#include "mex.h"
3+
#include <nix.hpp>
4+
5+
mxArray* make_mx_array(const nix::DataSet &da) {
6+
nix::NDSize size = da.dataExtent();
7+
const size_t len = size.size();
8+
std::vector<mwSize> dims(len);
9+
10+
//NB: matlab is column-major, while HDF5 is row-major
11+
// data is correct with this, but dimensions don't
12+
// agree with the file anymore. Transpose it in matlab
13+
// (DataArray.read_all)
14+
for (size_t i = 0; i < len; i++) {
15+
dims[len - (i + 1)] = static_cast<mwSize>(size[i]);
16+
}
17+
18+
nix::DataType da_type = da.dataType();
19+
DType2 dtype = dtype_nix2mex(da_type);
20+
21+
if (!dtype.is_valid) {
22+
throw std::domain_error("Unsupported data type");
23+
}
24+
25+
mxArray *data = mxCreateNumericArray(dims.size(), dims.data(), dtype.cid, dtype.clx);
26+
double *ptr = mxGetPr(data);
27+
28+
nix::NDSize offset(size.size(), 0);
29+
da.getData(da_type, ptr, size, offset);
30+
31+
return data;
32+
}
233

334
mxArray* make_mx_array(const nix::NDSize &size)
435
{

0 commit comments

Comments
 (0)