Skip to content

Commit 0706ed5

Browse files
committed
Merge pull request #108 from mpsonntag/aliasRangeDim
Add alias range dimension LGTM
2 parents 41a28dc + b411d8b commit 0706ed5

File tree

6 files changed

+61
-6
lines changed

6 files changed

+61
-6
lines changed

+nix/Block.m

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@
6868
end
6969

7070
function da = create_data_array_from_data(obj, name, nixtype, data)
71+
shape = size(data);
72+
%-- Quick fix to enable alias range dimension with
73+
%-- 1D data arrays created with this function.
74+
%-- e.g. size([1 2 3]) returns shape [1 3], which would not
75+
%-- be accepted when trying to add an alias range dimension.
76+
if(shape(1) == 1)
77+
shape = size(data, 2);
78+
end;
79+
7180
errorStruct.identifier = 'Block:unsupportedDataType';
7281
if(ischar(data))
7382
errorStruct.message = 'Writing Strings to DataArrays is not supported as of yet.';
@@ -81,7 +90,6 @@
8190
error(errorStruct);
8291
end;
8392

84-
shape = size(data);
8593
da = obj.create_data_array(name, nixtype, dtype, shape);
8694
da.write_all(data);
8795
end

+nix/DataArray.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@
6060
dim = nix.RangeDimension(nix_mx(func_name, obj.nix_handle, ticks));
6161
end
6262

63+
function dim = append_alias_range_dimension(obj)
64+
func_name = strcat(obj.alias, '::append_alias_range_dimension');
65+
dim = nix.RangeDimension(nix_mx(func_name, obj.nix_handle));
66+
end
67+
6368
function delCheck = delete_dimension(obj, index)
6469
func_name = strcat(obj.alias, '::delete_dimension');
6570
delCheck = nix_mx(func_name, obj.nix_handle, index);

+nix/RangeDimension.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
% assign dynamic properties
1414
nix.Dynamic.add_dyn_attr(obj, 'dimensionType', 'r');
15+
nix.Dynamic.add_dyn_attr(obj, 'isAlias', 'r');
1516
nix.Dynamic.add_dyn_attr(obj, 'label', 'rw');
1617
nix.Dynamic.add_dyn_attr(obj, 'unit', 'rw');
1718
nix.Dynamic.add_dyn_attr(obj, 'ticks', 'rw');
@@ -35,6 +36,6 @@
3536
func_name = strcat(obj.alias, '::axis');
3637
axis = nix_mx(func_name, obj.nix_handle, count, startIndex);
3738
end
39+
3840
end
3941
end
40-

nix_mx.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,11 @@ void mexFunction(int nlhs,
178178
.reg("dimensions", FILTER(std::vector<nix::Dimension>, nix::DataArray, , dimensions))
179179
.reg("append_set_dimension", &nix::DataArray::appendSetDimension)
180180
.reg("append_range_dimension", &nix::DataArray::appendRangeDimension)
181+
.reg("append_alias_range_dimension", &nix::DataArray::appendAliasRangeDimension)
181182
.reg("append_sampled_dimension", &nix::DataArray::appendSampledDimension)
182183
.reg("create_set_dimension", &nix::DataArray::createSetDimension)
183184
.reg("create_range_dimension", &nix::DataArray::createRangeDimension)
185+
.reg("create_alias_range_dimension", &nix::DataArray::createAliasRangeDimension)
184186
.reg("create_sampled_dimension", &nix::DataArray::createSampledDimension);
185187
methods->add("DataArray::delete_dimension", nixdataarray::delete_dimension);
186188
methods->add("DataArray::readAll", nixdataarray::read_all);

src/nixdimensions.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ namespace nixdimensions {
3030

3131
mxArray *describe(const nix::RangeDimension &dim)
3232
{
33-
struct_builder sb({ 1 }, { "dimensionType", "label", "unit", "ticks" });
33+
struct_builder sb({ 1 }, { "dimensionType", "isAlias", "label", "unit", "ticks" });
3434

3535
sb.set(dim.dimensionType());
36+
sb.set(dim.alias());
3637
sb.set(dim.label());
3738
sb.set(dim.unit());
3839
sb.set(dim.ticks());
3940

4041
return sb.array();
4142
}
42-
} // namespace nixtag
43+
} // namespace nixdimensions

tests/TestDataArray.m

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,8 @@
305305

306306
%% Test: Dimensions
307307
function [] = test_dimensions( varargin )
308-
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
308+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
309+
f = nix.File(fileName, nix.FileMode.Overwrite);
309310
b = f.createBlock('daTestBlock', 'test nixBlock');
310311
da = b.create_data_array('daTest', 'test nixDataArray', nix.DataType.Double, [1 2]);
311312

@@ -329,7 +330,8 @@
329330
assert(strcmp(da.dimensions{3}.dimensionType, 'range'));
330331
assert(isequal(da.dimensions{3}.ticks, ticks));
331332
assert(isequal(f.blocks{1}.dataArrays{1}.dimensions{3}.ticks, ticks));
332-
333+
assert(~da.dimensions{3}.isAlias);
334+
333335
da.delete_dimension(2);
334336
assert(length(da.dimensions) == 2);
335337
assert(strcmp(da.dimensions{1}.dimensionType, 'set'));
@@ -341,4 +343,40 @@
341343

342344
da.delete_dimension(1);
343345
assert(isempty(da.dimensions));
346+
347+
try
348+
da.append_alias_range_dimension;
349+
catch ME
350+
assert(strcmp(ME.identifier, 'nix:arg:inval'));
351+
end;
352+
353+
da.append_set_dimension();
354+
try
355+
da.append_alias_range_dimension();
356+
catch ME
357+
assert(strcmp(ME.identifier, 'nix:arg:inval'));
358+
end;
359+
360+
daAlias = b.create_data_array('aliasDimTest', 'nix.DataArray', ...
361+
nix.DataType.Double, 25);
362+
daAlias.append_alias_range_dimension();
363+
assert(f.blocks{1}.dataArrays{2}.dimensions{1}.isAlias);
364+
365+
clear daAlias da b f;
366+
f = nix.File(fileName, nix.FileMode.ReadWrite);
367+
assert(f.blocks{1}.dataArrays{2}.dimensions{1}.isAlias);
368+
369+
%-- Test for the alias dimension shape work around
370+
daAliasWa = f.blocks{1}.create_data_array_from_data('aliasDimWTest1', ...
371+
'nix.DataArray', [1 2 3]);
372+
daAliasWa.append_alias_range_dimension();
373+
assert(daAliasWa.dimensions{1}.isAlias);
374+
375+
daAliasWa = f.blocks{1}.create_data_array_from_data('aliasDimWATest2', ...
376+
'nix.DataArray', [1; 2; 3]);
377+
assert(isequal(daAliasWa.shape, [3 1]));
378+
379+
daAliasWa = f.blocks{1}.create_data_array_from_data('aliasDimWATest3', ...
380+
'nix.DataArray', [1 2 3; 2 4 5; 3 6 7]);
381+
assert(isequal(daAliasWa.shape, [3 3]));
344382
end

0 commit comments

Comments
 (0)