Skip to content

Commit affefd6

Browse files
committed
[c++/m] Add MultiTag multiple entities create
Closes #124. Adds references and sources multiple entity create methods to the MultiTag entity and introduces tests for all added methods.
1 parent 3aa963c commit affefd6

File tree

5 files changed

+94
-0
lines changed

5 files changed

+94
-0
lines changed

+nix/MultiTag.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
'nix.DataArray', 'MultiTag::addReference');
3838
end;
3939

40+
function [] = add_references(obj, add_cell_array)
41+
nix.Utils.add_entity_array(obj, add_cell_array, ...
42+
'nix.DataArray', strcat(obj.alias, '::addReferences'));
43+
end
44+
4045
function hasRef = has_reference(obj, id_or_name)
4146
hasRef = nix_mx('MultiTag::hasReference', ...
4247
obj.nix_handle, id_or_name);

nix_mx.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,9 @@ void mexFunction(int nlhs,
314314
methods->add("MultiTag::retrieveData", nixmultitag::retrieveData);
315315
methods->add("MultiTag::featureRetrieveData", nixmultitag::retrieveFeatureData);
316316
methods->add("MultiTag::addReference", nixmultitag::addReference);
317+
methods->add("MultiTag::addReferences", nixmultitag::addReferences);
317318
methods->add("MultiTag::addSource", nixmultitag::addSource);
319+
methods->add("MultiTag::addSources", nixmultitag::addSources);
318320
methods->add("MultiTag::createFeature", nixmultitag::createFeature);
319321
methods->add("MultiTag::addPositions", nixmultitag::addPositions);
320322

src/nixmultitag.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,23 @@ namespace nixmultitag {
3636
currObj.addReference(input.str(2));
3737
}
3838

39+
void addReferences(const extractor &input, infusor &output) {
40+
nix::MultiTag currObj = input.entity<nix::MultiTag>(1);
41+
std::vector<nix::DataArray> curr = input.entity_vec<nix::DataArray>(2);
42+
currObj.references(curr);
43+
}
44+
3945
void addSource(const extractor &input, infusor &output) {
4046
nix::MultiTag currObj = input.entity<nix::MultiTag>(1);
4147
currObj.addSource(input.str(2));
4248
}
4349

50+
void addSources(const extractor &input, infusor &output) {
51+
nix::MultiTag currObj = input.entity<nix::MultiTag>(1);
52+
std::vector<nix::Source> curr = input.entity_vec<nix::Source>(2);
53+
currObj.sources(curr);
54+
}
55+
4456
void createFeature(const extractor &input, infusor &output) {
4557
nix::MultiTag currObj = input.entity<nix::MultiTag>(1);
4658

src/nixmultitag.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ namespace nixmultitag {
1717

1818
void addReference(const extractor &input, infusor &output);
1919

20+
void addReferences(const extractor &input, infusor &output);
21+
2022
void addSource(const extractor &input, infusor &output);
2123

24+
void addSources(const extractor &input, infusor &output);
25+
2226
void createFeature(const extractor &input, infusor &output);
2327

2428
void retrieveData(const extractor &input, infusor &output);

tests/TestMultiTag.m

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212

1313
funcs = {};
1414
funcs{end+1} = @test_add_source;
15+
funcs{end+1} = @test_add_sources;
1516
funcs{end+1} = @test_remove_source;
1617
funcs{end+1} = @test_add_reference;
18+
funcs{end+1} = @test_add_references;
1719
funcs{end+1} = @test_has_reference;
1820
funcs{end+1} = @test_remove_reference;
1921
funcs{end+1} = @test_add_feature;
@@ -68,6 +70,41 @@
6870
assert(size(f.blocks{1}.multiTags{1}.sources, 1) == 2);
6971
end
7072

73+
%% Test: Add sources by entity cell array
74+
function [] = test_add_sources ( varargin )
75+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
76+
f = nix.File(testFile, nix.FileMode.Overwrite);
77+
b = f.create_block('testBlock', 'nixBlock');
78+
tmp = b.create_data_array('testDataArray', 'nixDataArray', nix.DataType.Double, [1 2]);
79+
t = b.create_multi_tag('testMultiTag', 'nixMultiTag', b.dataArrays{1});
80+
tmp = b.create_source('testSource1', 'nixSource');
81+
tmp = b.create_source('testSource2', 'nixSource');
82+
tmp = b.create_source('testSource3', 'nixSource');
83+
84+
assert(isempty(t.sources));
85+
86+
try
87+
t.add_sources('hurra');
88+
catch ME
89+
assert(strcmp(ME.message, 'Expected cell array'));
90+
end;
91+
assert(isempty(t.sources));
92+
93+
try
94+
t.add_sources({12, 13});
95+
catch ME
96+
assert(~isempty(strfind(ME.message, 'not a nix.Source')));
97+
end;
98+
assert(isempty(t.sources));
99+
100+
t.add_sources(b.sources());
101+
assert(size(t.sources, 1) == 3);
102+
103+
clear t tmp b f;
104+
f = nix.File(testFile, nix.FileMode.ReadOnly);
105+
assert(size(f.blocks{1}.multiTags{1}.sources, 1) == 3);
106+
end
107+
71108
%% Test: Remove sources by entity and id
72109
function [] = test_remove_source ( varargin )
73110
test_file = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
@@ -119,6 +156,40 @@
119156
assert(size(f.blocks{1}.multiTags{1}.references, 1) == 2);
120157
end
121158

159+
%% Test: Add references by entity cell array
160+
function [] = test_add_references ( varargin )
161+
testFile = fullfile(pwd, 'tests', 'testRW.h5');
162+
f = nix.File(testFile, nix.FileMode.Overwrite);
163+
b = f.create_block('testBlock', 'nixBlock');
164+
tmp = b.create_data_array('referenceTest1', 'nixDataArray', nix.DataType.Double, [1 2]);
165+
t = b.create_multi_tag('referencetest', 'nixMultiTag', b.dataArrays{1});
166+
tmp = b.create_data_array('referenceTest2', 'nixDataArray', nix.DataType.Double, [3 4]);
167+
tmp = b.create_data_array('referenceTest3', 'nixDataArray', nix.DataType.Double, [3 4]);
168+
169+
assert(isempty(t.references));
170+
171+
try
172+
t.add_references('hurra');
173+
catch ME
174+
assert(strcmp(ME.message, 'Expected cell array'));
175+
end;
176+
assert(isempty(t.references));
177+
178+
try
179+
t.add_references({12, 13});
180+
catch ME
181+
assert(~isempty(strfind(ME.message, 'not a nix.DataArray')));
182+
end;
183+
assert(isempty(t.references));
184+
185+
t.add_references(b.dataArrays);
186+
assert(size(t.references, 1) == 3);
187+
188+
clear t tmp b f;
189+
f = nix.File(testFile, nix.FileMode.ReadOnly);
190+
assert(size(f.blocks{1}.multiTags{1}.references, 1) == 3);
191+
end
192+
122193
%% Test: Remove references by entity and id
123194
function [] = test_remove_reference ( varargin )
124195
test_file = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);

0 commit comments

Comments
 (0)