Skip to content

Commit 3b1c728

Browse files
committed
[c++/m] Refactor nix.Tag retrieveData function
- renamed existing function to retrieveDataIdx to stay consistent with existing index functions. - removed index manipulation on matlab side to stay consistent with existing index functions. - rewrote existing test.
1 parent d35849b commit 3b1c728

File tree

5 files changed

+36
-24
lines changed

5 files changed

+36
-24
lines changed

+nix/Tag.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,8 @@
6363
'Tag::openReferenceIdx', idx, @nix.DataArray);
6464
end;
6565

66-
function data = retrieve_data(obj, index)
67-
% convert Matlab-like to C-like index
68-
assert(index > 0, 'Subscript indices must be positive');
69-
tmp = nix_mx('Tag::retrieveData', obj.nix_handle, index - 1);
66+
function data = retrieve_data_idx(obj, idx)
67+
tmp = nix_mx('Tag::retrieveDataIdx', obj.nix_handle, idx);
7068

7169
% data must agree with file & dimensions
7270
% see mkarray.cc(42)

nix_mx.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,6 @@ void mexFunction(int nlhs,
317317
.reg("sourceCount", GETTER(nix::ndsize_t, nix::Tag, sourceCount))
318318
.reg("referenceCount", GETTER(nix::ndsize_t, nix::Tag, referenceCount))
319319
.reg("featureCount", GETTER(nix::ndsize_t, nix::Tag, featureCount));
320-
methods->add("Tag::retrieveData", nixtag::retrieveData);
321320
methods->add("Tag::featureRetrieveData", nixtag::retrieveFeatureData);
322321
methods->add("Tag::addReference", nixtag::addReference);
323322
methods->add("Tag::addReferences", nixtag::addReferences);
@@ -331,6 +330,7 @@ void mexFunction(int nlhs,
331330
methods->add("Tag::sourcesFiltered", nixtag::sourcesFiltered);
332331
methods->add("Tag::referencesFiltered", nixtag::referencesFiltered);
333332
methods->add("Tag::featuresFiltered", nixtag::featuresFiltered);
333+
methods->add("Tag::retrieveDataIdx", nixtag::retrieveDataIdx);
334334

335335
classdef<nix::MultiTag>("MultiTag", methods)
336336
.desc(&nixmultitag::describe)

src/nixtag.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,6 @@ namespace nixtag {
6363
output.set(0, handle(newFeat));
6464
}
6565

66-
void retrieveData(const extractor &input, infusor &output) {
67-
nix::Tag currObj = input.entity<nix::Tag>(1);
68-
double index = input.num<double>(2);
69-
70-
mxArray *data = make_mx_array_from_ds(currObj.retrieveData(index));
71-
output.set(0, data);
72-
}
73-
7466
void retrieveFeatureData(const extractor &input, infusor &output) {
7567
nix::Tag currObj = input.entity<nix::Tag>(1);
7668
double index = input.num<double>(2);
@@ -130,4 +122,12 @@ namespace nixtag {
130122
output.set(0, res);
131123
}
132124

125+
void retrieveDataIdx(const extractor &input, infusor &output) {
126+
nix::Tag currObj = input.entity<nix::Tag>(1);
127+
nix::ndsize_t idx = (nix::ndsize_t)input.num<double>(2);
128+
129+
mxArray *data = make_mx_array_from_ds(currObj.retrieveData(idx));
130+
output.set(0, data);
131+
}
132+
133133
} // namespace nixtag

src/nixtag.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ namespace nixtag {
2525

2626
void createFeature(const extractor &input, infusor &output);
2727

28-
void retrieveData(const extractor &input, infusor &output);
29-
3028
void retrieveFeatureData(const extractor &input, infusor &output);
3129

3230
void openReferenceIdx(const extractor &input, infusor &output);
@@ -43,6 +41,8 @@ namespace nixtag {
4341

4442
void featuresFiltered(const extractor &input, infusor &output);
4543

44+
void retrieveDataIdx(const extractor &input, infusor &output);
45+
4646
} // namespace nixtag
4747

4848
#endif

tests/TestTag.m

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
funcs{end+1} = @test_open_reference_idx;
3535
funcs{end+1} = @test_set_metadata;
3636
funcs{end+1} = @test_open_metadata;
37-
funcs{end+1} = @test_retrieve_data;
37+
funcs{end+1} = @test_retrieve_data_idx;
3838
funcs{end+1} = @test_retrieve_feature_data;
3939
funcs{end+1} = @test_attrs;
4040
funcs{end+1} = @test_has_feature;
@@ -524,14 +524,28 @@
524524
assert(strcmp(t.open_metadata.name, 'testSection'));
525525
end
526526

527-
%% Test: Retrieve data
528-
function [] = test_retrieve_data( varargin )
529-
f = nix.File(fullfile(pwd, 'tests', 'test.h5'), nix.FileMode.ReadOnly);
530-
b = f.blocks{1};
531-
tag = b.open_tag('Arm movement epoch Trial 001');
532-
533-
data = tag.retrieve_data(1);
534-
assert(~isempty(data));
527+
%% Test: Retrieve referenced data by index
528+
function [] = test_retrieve_data_idx( varargin )
529+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
530+
b = f.create_block('testBlock', 'nixBlock');
531+
raw = [1, 2, 3, 4, 5, 6, 7, 8, 9];
532+
d = b.create_data_array_from_data('testDataArray', 'nixDataArray', raw);
533+
d.append_sampled_dimension(1);
534+
% tag positon is used like an index, therfore starts with 0!
535+
tagStartPos = [3];
536+
t = b.create_tag('testTag', 'nixTag', tagStartPos);
537+
t.extent = [3];
538+
t.add_reference(d);
539+
540+
try
541+
t.retrieve_data_idx(12);
542+
catch ME
543+
assert(~isempty(strfind(ME.message, 'out of bounds')), 'Invalid index failed');
544+
end
545+
546+
retData = t.retrieve_data_idx(0);
547+
assert(size(retData, 2) == t.extent, 'Extent check failed');
548+
assert(retData(1) == raw(t.position + 1), 'Position check failed');
535549
end
536550

537551
%% Test: Retrieve feature data

0 commit comments

Comments
 (0)