Skip to content

Commit 9a21715

Browse files
committed
sample and range dimensions added
1 parent d53db06 commit 9a21715

File tree

11 files changed

+175
-22
lines changed

11 files changed

+175
-22
lines changed

+nix/DataArray.m

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +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)
3539

36-
switch currList(i).name
40+
switch currList(i).dtype
3741
case 'set'
3842
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
3943
case 'sample'
40-
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
44+
obj.dimsCache.data{i} = nix.SampledDimension(currList(i).dimension);
4145
case 'range'
42-
obj.dimsCache.data{i} = nix.SetDimension(currList(i).dimension);
46+
obj.dimsCache.data{i} = nix.RangeDimension(currList(i).dimension);
4347
otherwise
44-
disp('for some dimension type is unknown! skip')
48+
disp('some dimension type is unknown! skip')
4549
end
4650
end;
4751
obj.dimsCache.lastUpdate = obj.updatedAt;
4852
end;
4953
dimensions = obj.dimsCache.data;
5054
end;
5155

56+
function dim = append_set_dimension(obj)
57+
func_name = strcat(obj.alias, '::append_set_dimension');
58+
dim = 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_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_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+
5280
% -----------------
5381
% Data access methods
5482
% -----------------

+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: 2 additions & 2 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);

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
}

src/utils/mkarray.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,6 @@ inline mxArray *make_mx_array(const std::vector<T> &v) {
125125
}
126126

127127
inline mxArray* make_mx_array(const std::vector<nix::Dimension> &dims) {
128-
if (dims.empty()) {
129-
return nullptr;
130-
}
131-
132128
const char *field_names[] = { "dtype", "dimension" };
133129
mwSize dim_arr[2] = {1, dims.size()};
134130
nix::DimensionType dt;

0 commit comments

Comments
 (0)