Skip to content

Commit 8befd60

Browse files
committed
[c++/m] Refactor nix.Tag retrieveFeatureData func
See comments for Refactor nix.Tag retrieveData commit
1 parent 3b1c728 commit 8befd60

File tree

5 files changed

+55
-20
lines changed

5 files changed

+55
-20
lines changed

+nix/Tag.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,8 @@
113113
'Tag::openFeatureIdx', idx, @nix.Feature);
114114
end;
115115

116-
function data = retrieve_feature_data(obj, index)
117-
% convert Matlab-like to C-like index
118-
assert(index > 0, 'Subscript indices must be positive');
119-
tmp = nix_mx('Tag::featureRetrieveData', obj.nix_handle, index - 1);
116+
function data = retrieve_feature_data_idx(obj, idx)
117+
tmp = nix_mx('Tag::featureRetrieveDataIdx', obj.nix_handle, idx);
120118

121119
% data must agree with file & dimensions
122120
% 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::featureRetrieveData", nixtag::retrieveFeatureData);
321320
methods->add("Tag::addReference", nixtag::addReference);
322321
methods->add("Tag::addReferences", nixtag::addReferences);
323322
methods->add("Tag::addSource", nixtag::addSource);
@@ -331,6 +330,7 @@ void mexFunction(int nlhs,
331330
methods->add("Tag::referencesFiltered", nixtag::referencesFiltered);
332331
methods->add("Tag::featuresFiltered", nixtag::featuresFiltered);
333332
methods->add("Tag::retrieveDataIdx", nixtag::retrieveDataIdx);
333+
methods->add("Tag::featureRetrieveDataIdx", nixtag::retrieveFeatureDataIdx);
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 retrieveFeatureData(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.retrieveFeatureData(index));
71-
output.set(0, data);
72-
}
73-
7466
void openReferenceIdx(const extractor &input, infusor &output) {
7567
nix::Tag currObj = input.entity<nix::Tag>(1);
7668
nix::ndsize_t idx = (nix::ndsize_t)input.num<double>(2);
@@ -130,4 +122,12 @@ namespace nixtag {
130122
output.set(0, data);
131123
}
132124

125+
void retrieveFeatureDataIdx(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.retrieveFeatureData(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 retrieveFeatureData(const extractor &input, infusor &output);
29-
3028
void openReferenceIdx(const extractor &input, infusor &output);
3129

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

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

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

4848
#endif

tests/TestTag.m

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
funcs{end+1} = @test_set_metadata;
3636
funcs{end+1} = @test_open_metadata;
3737
funcs{end+1} = @test_retrieve_data_idx;
38-
funcs{end+1} = @test_retrieve_feature_data;
38+
funcs{end+1} = @test_retrieve_feature_data_idx;
3939
funcs{end+1} = @test_attrs;
4040
funcs{end+1} = @test_has_feature;
4141
funcs{end+1} = @test_has_reference;
@@ -548,10 +548,47 @@
548548
assert(retData(1) == raw(t.position + 1), 'Position check failed');
549549
end
550550

551-
%% Test: Retrieve feature data
552-
function [] = test_retrieve_feature_data( varargin )
553-
% TODO
554-
disp('Test Tag: retrieve feature ... TODO (proper testfile)');
551+
%% Test: Retrieve feature data by index
552+
function [] = test_retrieve_feature_data_idx( varargin )
553+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
554+
b = f.create_block('testBlock', 'nixBlock');
555+
raw = [1, 2, 3, 4, 5, 6, 7, 8, 9];
556+
d = b.create_data_array_from_data('testDataArray', 'nixDataArray', raw);
557+
d.append_sampled_dimension(1);
558+
tagStartPos = [3];
559+
t = b.create_tag('testTag', 'nixTag', tagStartPos);
560+
t.extent = [3];
561+
t.add_reference(d);
562+
563+
rawFeature = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19];
564+
565+
% test retrieve untagged feature data
566+
df = b.create_data_array_from_data('testUntagged', 'nixDataArray', rawFeature);
567+
df.append_sampled_dimension(1);
568+
t.add_feature(df, nix.LinkType.Untagged);
569+
retData = t.retrieve_feature_data_idx(0);
570+
assert(size(retData, 2) == size(rawFeature, 2), 'Untagged size check fail');
571+
572+
% test retrieve tagged feature data
573+
df = b.create_data_array_from_data('testTagged', 'nixDataArray', rawFeature);
574+
df.append_sampled_dimension(1);
575+
t.add_feature(df, nix.LinkType.Tagged);
576+
retData = t.retrieve_feature_data_idx(1);
577+
assert(size(retData, 2) == t.extent, 'Tagged Extent check fail');
578+
assert(retData(1) == rawFeature(t.position + 1), 'Tagged Position check fail');
579+
580+
% test retrieve indexed feature data
581+
df = b.create_data_array_from_data('testIndexed', 'nixDataArray', rawFeature);
582+
df.append_sampled_dimension(1);
583+
t.add_feature(df, nix.LinkType.Indexed);
584+
retData = t.retrieve_feature_data_idx(2);
585+
assert(size(retData, 2) == size(rawFeature, 2), 'Indexed size check fail');
586+
587+
try
588+
t.retrieve_feature_data_idx(12);
589+
catch ME
590+
assert(~isempty(strfind(ME.message, 'out of bounds')), 'Invalid index check fail');
591+
end
555592
end
556593

557594
%% Test: Read and write nix.Tag attributes

0 commit comments

Comments
 (0)