Skip to content

Commit d53db06

Browse files
committed
dimensions cell array to struct array
1 parent 3ae6be9 commit d53db06

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

+nix/DataArray.m

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,17 @@
3232
currList = nix_mx('DataArray::dimensions', obj.nix_handle);
3333
obj.dimsCache.data = cell(length(currList), 1);
3434
for i = 1:length(currList)
35-
% TODO convert to a proper type
36-
obj.dimsCache.data{i} = nix.SetDimension(currList{i});
35+
36+
switch currList(i).name
37+
case 'set'
38+
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
39+
case 'sample'
40+
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
41+
case 'range'
42+
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
43+
otherwise
44+
disp('for some dimension type is unknown! skip')
45+
end
3746
end;
3847
obj.dimsCache.lastUpdate = obj.updatedAt;
3948
end;

src/utils/mkarray.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,26 @@ inline mxArray* make_mx_array(const std::vector<nix::Dimension> &dims) {
129129
return nullptr;
130130
}
131131

132+
const char *field_names[] = { "dtype", "dimension" };
133+
mwSize dim_arr[2] = {1, dims.size()};
132134
nix::DimensionType dt;
133135

134-
mxArray *data = mxCreateCellMatrix(1, dims.size());
136+
mxArray *data = mxCreateStructArray(2, dim_arr, 2, field_names);
135137
for (size_t i = 0; i < dims.size(); i++) {
136138
dt = dims[i].dimensionType();
137139

138140
switch (dt) {
139-
case nix::DimensionType::Set: mxSetCell(data, i, make_mx_array(dims[i].asSetDimension()));
141+
case nix::DimensionType::Set:
142+
mxSetFieldByNumber(data, i, 0, mxCreateString("set"));
143+
mxSetFieldByNumber(data, i, 1, make_mx_array(dims[i].asSetDimension()));
140144
break;
141-
case nix::DimensionType::Range: mxSetCell(data, i, make_mx_array(dims[i].asRangeDimension()));
145+
case nix::DimensionType::Range:
146+
mxSetFieldByNumber(data, i, 0, mxCreateString("range"));
147+
mxSetFieldByNumber(data, i, 1, make_mx_array(dims[i].asRangeDimension()));
142148
break;
143-
case nix::DimensionType::Sample: mxSetCell(data, i, make_mx_array(dims[i].asSampledDimension()));
149+
case nix::DimensionType::Sample:
150+
mxSetFieldByNumber(data, i, 0, mxCreateString("sample"));
151+
mxSetFieldByNumber(data, i, 1, make_mx_array(dims[i].asSampledDimension()));
144152
break;
145153
default: throw std::invalid_argument("Encountered unknown dimension type");
146154
break;

0 commit comments

Comments
 (0)