Skip to content

Commit 981521a

Browse files
committed
Merge pull request #84 from asobolev/master
Dimensions (Matlab part)
2 parents 3ae6be9 + 65591fa commit 981521a

14 files changed

+289
-27
lines changed

+nix/DataArray.m

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,57 @@
2626

2727
obj.dimsCache = nix.CacheStruct();
2828
end;
29+
30+
% -----------------
31+
% Dimensions
32+
% -----------------
2933

3034
function dimensions = get.dimensions(obj)
3135
if obj.dimsCache.lastUpdate ~= obj.updatedAt
3236
currList = nix_mx('DataArray::dimensions', obj.nix_handle);
3337
obj.dimsCache.data = cell(length(currList), 1);
3438
for i = 1:length(currList)
35-
% TODO convert to a proper type
36-
obj.dimsCache.data{i} = nix.SetDimension(currList{i});
39+
40+
switch currList(i).dtype
41+
case 'set'
42+
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
43+
case 'sample'
44+
obj.dimsCache.data{i} = nix.SampledDimension(currList(i).dimension);
45+
case 'range'
46+
obj.dimsCache.data{i} = nix.RangeDimension(currList(i).dimension);
47+
otherwise
48+
disp('some dimension type is unknown! skip')
49+
end
3750
end;
3851
obj.dimsCache.lastUpdate = obj.updatedAt;
3952
end;
4053
dimensions = obj.dimsCache.data;
4154
end;
4255

56+
function dim = append_set_dimension(obj)
57+
func_name = strcat(obj.alias, '::append_set_dimension');
58+
dim = nix.SetDimension(nix_mx(func_name, obj.nix_handle));
59+
obj.dimsCache.lastUpdate = 0;
60+
end
61+
62+
function dim = append_sampled_dimension(obj, interval)
63+
func_name = strcat(obj.alias, '::append_sampled_dimension');
64+
dim = nix.SampledDimension(nix_mx(func_name, obj.nix_handle, interval));
65+
obj.dimsCache.lastUpdate = 0;
66+
end
67+
68+
function dim = append_range_dimension(obj, ticks)
69+
func_name = strcat(obj.alias, '::append_range_dimension');
70+
dim = nix.RangeDimension(nix_mx(func_name, obj.nix_handle, ticks));
71+
obj.dimsCache.lastUpdate = 0;
72+
end
73+
74+
function delCheck = delete_dimension(obj, index)
75+
func_name = strcat(obj.alias, '::delete_dimension');
76+
delCheck = nix_mx(func_name, obj.nix_handle, index);
77+
obj.dimsCache.lastUpdate = 0;
78+
end;
79+
4380
% -----------------
4481
% Data access methods
4582
% -----------------

+nix/Dynamic.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function set_method(obj, val)
2424
end
2525

2626
if (isempty(val))
27-
nix_mx(strcat(obj.alias, '::set_none_', prop), obj.nix_handle, val);
27+
nix_mx(strcat(obj.alias, '::set_none_', prop), obj.nix_handle, 0);
2828
else
2929
nix_mx(strcat(obj.alias, '::set_', prop), obj.nix_handle, val);
3030
end

+nix/RangeDimension.m

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
classdef RangeDimension < nix.Entity
2+
%RangeDimension nix RangeDimension object
3+
4+
properties (Hidden)
5+
% namespace reference for nix-mx functions
6+
alias = 'RangeDimension'
7+
end
8+
9+
methods
10+
function obj = RangeDimension(h)
11+
12+
13+
% assign dynamic properties
14+
nix.Dynamic.add_dyn_attr(obj, 'dimensionType', 'r');
15+
nix.Dynamic.add_dyn_attr(obj, 'label', 'rw');
16+
nix.Dynamic.add_dyn_attr(obj, 'unit', 'rw');
17+
nix.Dynamic.add_dyn_attr(obj, 'ticks', 'rw');
18+
end
19+
20+
function tickAt = tick_at(obj, index)
21+
func_name = strcat(obj.alias, '::tick_at');
22+
tickAt = nix_mx(func_name, obj.nix_handle, index);
23+
end
24+
25+
function indexOf = index_of(obj, position)
26+
func_name = strcat(obj.alias, '::index_of');
27+
indexOf = nix_mx(func_name, obj.nix_handle, position);
28+
end
29+
30+
function axis = axis(obj, count, startIndex)
31+
if nargin < 3
32+
startIndex = 0;
33+
end
34+
35+
func_name = strcat(obj.alias, '::axis');
36+
axis = nix_mx(func_name, obj.nix_handle, count, startIndex);
37+
end
38+
end
39+
end
40+

+nix/SampledDimension.m

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
classdef SampledDimension < nix.Entity
2+
%SampledDimension nix SampledDimension object
3+
4+
properties (Hidden)
5+
% namespace reference for nix-mx functions
6+
alias = 'SampledDimension'
7+
end
8+
9+
methods
10+
function obj = SampledDimension(h)
11+
12+
13+
% assign dynamic properties
14+
nix.Dynamic.add_dyn_attr(obj, 'dimensionType', 'r');
15+
nix.Dynamic.add_dyn_attr(obj, 'label', 'rw');
16+
nix.Dynamic.add_dyn_attr(obj, 'unit', 'rw');
17+
nix.Dynamic.add_dyn_attr(obj, 'samplingInterval', 'rw');
18+
nix.Dynamic.add_dyn_attr(obj, 'offset', 'rw');
19+
end
20+
21+
function indexOf = index_of(obj, position)
22+
func_name = strcat(obj.alias, '::index_of');
23+
indexOf = nix_mx(func_name, obj.nix_handle, position);
24+
end
25+
26+
function posAt = position_at(obj, index)
27+
func_name = strcat(obj.alias, '::position_at');
28+
posAt = nix_mx(func_name, obj.nix_handle, index);
29+
end
30+
31+
function axis = axis(obj, count, startIndex)
32+
if nargin < 3
33+
startIndex = 0;
34+
end
35+
36+
func_name = strcat(obj.alias, '::axis');
37+
axis = nix_mx(func_name, obj.nix_handle, count, startIndex);
38+
end
39+
end
40+
end
41+

+nix/SetDimension.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
methods
1010
function obj = SetDimension(h)
1111
12+
13+
% assign dynamic properties
14+
nix.Dynamic.add_dyn_attr(obj, 'dimensionType', 'r');
15+
nix.Dynamic.add_dyn_attr(obj, 'labels', 'rw');
1216
end
13-
14-
function ua = updatedAt(obj)
15-
ua = 0;
16-
end;
1717
end
1818
end
1919

nix_mx.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ void mexFunction(int nlhs,
150150
.reg("append_sampled_dimension", &nix::DataArray::appendSampledDimension)
151151
.reg("create_set_dimension", &nix::DataArray::createSetDimension)
152152
.reg("create_range_dimension", &nix::DataArray::createRangeDimension)
153-
.reg("create_sampled_dimension", &nix::DataArray::createSampledDimension)
154-
.reg("deleteDimension", &nix::DataArray::deleteDimension);
153+
.reg("create_sampled_dimension", &nix::DataArray::createSampledDimension);
154+
methods->add("DataArray::delete_dimension", nixdataarray::delete_dimension);
155155
methods->add("DataArray::readAll", nixdataarray::read_all);
156156
methods->add("DataArray::writeAll", nixdataarray::write_all);
157157
methods->add("DataArray::addSource", nixdataarray::add_source);
@@ -272,7 +272,7 @@ void mexFunction(int nlhs,
272272
.reg("set_none_label", SETTER(const boost::none_t, nix::SampledDimension, label))
273273
.reg("set_unit", SETTER(const std::string&, nix::SampledDimension, unit))
274274
.reg("set_none_unit", SETTER(const boost::none_t, nix::SampledDimension, unit))
275-
.reg("set_sampling", SETTER(double, nix::SampledDimension, samplingInterval))
275+
.reg("set_samplingInterval", SETTER(double, nix::SampledDimension, samplingInterval))
276276
.reg("set_offset", SETTER(double, nix::SampledDimension, offset))
277277
.reg("set_none_offset", SETTER(const boost::none_t, nix::SampledDimension, offset))
278278
.reg("index_of", &nix::SampledDimension::indexOf)

src/nixdataarray.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,13 @@ namespace nixdataarray {
6060
da.setData(dtype, ptr, count, offset);
6161
}
6262

63+
void delete_dimension(const extractor &input, infusor &output) {
64+
nix::DataArray da = input.entity<nix::DataArray>(1);
65+
66+
const size_t idx = static_cast<size_t>(input.num<double>(2));
67+
bool res = da.deleteDimension(idx);
68+
69+
output.set(0, res);
70+
}
71+
6372
} // namespace nixdataarray

src/nixdataarray.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ namespace nixdataarray {
1515

1616
void write_all(const extractor &input, infusor &output);
1717

18+
void delete_dimension(const extractor &input, infusor &output);
19+
1820
} // namespace nixdataarray
1921

2022
#endif

src/nixdimensions.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace nixdimensions {
1313

1414
mxArray *describe(const nix::SetDimension &dim)
1515
{
16-
struct_builder sb({ 1 }, { "dim_type", "labels" });
16+
struct_builder sb({ 1 }, { "dimensionType", "labels" });
1717

1818
sb.set(dim.dimensionType());
1919
sb.set(dim.labels());
@@ -23,7 +23,7 @@ namespace nixdimensions {
2323

2424
mxArray *describe(const nix::SampledDimension &dim)
2525
{
26-
struct_builder sb({ 1 }, { "dim_type", "label", "unit", "sampling_interval", "offset" });
26+
struct_builder sb({ 1 }, { "dimensionType", "label", "unit", "samplingInterval", "offset" });
2727

2828
sb.set(dim.dimensionType());
2929
sb.set(dim.label());
@@ -36,7 +36,7 @@ namespace nixdimensions {
3636

3737
mxArray *describe(const nix::RangeDimension &dim)
3838
{
39-
struct_builder sb({ 1 }, { "dim_type", "label", "unit", "ticks" });
39+
struct_builder sb({ 1 }, { "dimensionType", "label", "unit", "ticks" });
4040

4141
sb.set(dim.dimensionType());
4242
sb.set(dim.label());

src/utils/mkarray.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ mxArray* make_mx_array(const nix::LinkType &ltype)
3030

3131
mxArray* make_mx_array(const nix::DimensionType &dtype)
3232
{
33-
uint8_t d_type;
33+
const char *d_type;
3434

3535
switch (dtype) {
36-
case nix::DimensionType::Set: d_type = 0; break;
37-
case nix::DimensionType::Sample: d_type = 1; break;
38-
case nix::DimensionType::Range: d_type = 2; break;
36+
case nix::DimensionType::Set: d_type = "set"; break;
37+
case nix::DimensionType::Sample: d_type = "sample"; break;
38+
case nix::DimensionType::Range: d_type = "range"; break;
3939
default: throw std::invalid_argument("unkown dimension type");
4040
}
41-
mxArray *data = mxCreateDoubleScalar(d_type);
41+
mxArray *data = mxCreateString(d_type);
4242

4343
return data;
4444
}

0 commit comments

Comments
 (0)