Skip to content

Commit 6fe5ba1

Browse files
authored
Merge pull request #139 from mpsonntag/sourceFunc
Add missing 'Source' functions LGTM
2 parents 30ed627 + b6614e1 commit 6fe5ba1

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed

+nix/Source.m

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,25 @@
4848
retObj = nix.Utils.open_entity(obj, ...
4949
'Source::openSource', id_or_name, @nix.Source);
5050
end;
51-
51+
52+
function retObj = parent_source(obj)
53+
retObj = nix.Utils.fetchObj('Source::parentSource', ...
54+
obj.nix_handle, @nix.Source);
55+
end
56+
57+
function retObj = referring_data_arrays(obj)
58+
retObj = nix.Utils.fetchObjList('Source::referringDataArrays', ...
59+
obj.nix_handle, @nix.DataArray);
60+
end
61+
62+
function retObj = referring_tags(obj)
63+
retObj = nix.Utils.fetchObjList('Source::referringTags', ...
64+
obj.nix_handle, @nix.Tag);
65+
end
66+
67+
function retObj = referring_multi_tags(obj)
68+
retObj = nix.Utils.fetchObjList('Source::referringMultiTags', ...
69+
obj.nix_handle, @nix.MultiTag);
70+
end
5271
end;
5372
end

nix_mx.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,11 @@ void mexFunction(int nlhs,
243243
.reg("setType", SETTER(const std::string&, nix::Source, type))
244244
.reg("setDefinition", SETTER(const std::string&, nix::Source, definition))
245245
.reg("setNoneDefinition", SETTER(const boost::none_t, nix::Source, definition))
246-
.reg("sourceCount", GETTER(nix::ndsize_t, nix::Source, sourceCount));
246+
.reg("parentSource", GETTER(nix::Source, nix::Source, parentSource))
247+
.reg("sourceCount", GETTER(nix::ndsize_t, nix::Source, sourceCount))
248+
.reg("referringDataArrays", GETTER(std::vector<nix::DataArray>, nix::Source, referringDataArrays))
249+
.reg("referringTags", GETTER(std::vector<nix::Tag>, nix::Source, referringTags))
250+
.reg("referringMultiTags", GETTER(std::vector<nix::MultiTag>, nix::Source, referringMultiTags));
247251

248252
classdef<nix::Tag>("Tag", methods)
249253
.desc(&nixtag::describe)

tests/TestSource.m

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818
funcs{end+1} = @test_has_source;
1919
funcs{end+1} = @test_open_source;
2020
funcs{end+1} = @test_source_count;
21+
funcs{end+1} = @test_parent_source;
2122
funcs{end+1} = @test_set_metadata;
2223
funcs{end+1} = @test_open_metadata;
24+
funcs{end+1} = @test_referring_data_arrays;
25+
funcs{end+1} = @test_referring_tags;
26+
funcs{end+1} = @test_referring_multi_tags;
2327
end
2428

2529
%% Test: fetch sources
@@ -190,3 +194,76 @@
190194
f = nix.File(fullfile(pwd, 'tests', fileName), nix.FileMode.ReadOnly);
191195
assert(f.blocks{1}.sources{1}.has_source(nestedID));
192196
end
197+
198+
%% Test: Get parent source
199+
function [] = test_parent_source( varargin )
200+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
201+
f = nix.File(fileName, nix.FileMode.Overwrite);
202+
b = f.create_block('sourcetest', 'nixBlock');
203+
sourceName1 = 'testSource1';
204+
sourceName2 = 'testSource2';
205+
s1 = b.create_source(sourceName1, 'nixSource');
206+
s2 = s1.create_source(sourceName2, 'nixSource');
207+
s3 = s2.create_source('testSource3', 'nixSource');
208+
209+
assert(strcmp(s3.parent_source.name, sourceName2));
210+
assert(strcmp(s2.parent_source.name, sourceName1));
211+
end
212+
213+
%% Test: Referring data arrays
214+
function [] = test_referring_data_arrays( varargin )
215+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
216+
f = nix.File(fileName, nix.FileMode.Overwrite);
217+
b = f.create_block('testBlock', 'nixBlock');
218+
s = b.create_source('testSource', 'nixSource');
219+
220+
assert(isempty(s.referring_data_arrays));
221+
222+
d1 = b.create_data_array('testDataArray1', 'nixDataArray', nix.DataType.Double, [1 2]);
223+
d1.add_source(s);
224+
assert(~isempty(s.referring_data_arrays));
225+
assert(strcmp(s.referring_data_arrays{1}.name, d1.name));
226+
227+
d2 = b.create_data_array('testDataArray2', 'nixDataArray', nix.DataType.Double, [1 2]);
228+
d2.add_source(s);
229+
assert(size(s.referring_data_arrays, 1) == 2);
230+
end
231+
232+
%% Test: Referring tags
233+
function [] = test_referring_tags( varargin )
234+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
235+
f = nix.File(fileName, nix.FileMode.Overwrite);
236+
b = f.create_block('testBlock', 'nixBlock');
237+
s = b.create_source('testSource', 'nixSource');
238+
239+
assert(isempty(s.referring_tags));
240+
241+
t1 = b.create_tag('testTag1', 'nixTag', [1, 2]);
242+
t1.add_source(s);
243+
assert(~isempty(s.referring_tags));
244+
assert(strcmp(s.referring_tags{1}.name, t1.name));
245+
246+
t2 = b.create_tag('testTag2', 'nixTag', [1, 2]);
247+
t2.add_source(s);
248+
assert(size(s.referring_tags, 1) == 2);
249+
end
250+
251+
%% Test: Referring multi tags
252+
function [] = test_referring_multi_tags( varargin )
253+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
254+
f = nix.File(fileName, nix.FileMode.Overwrite);
255+
b = f.create_block('testBlock', 'nixBlock');
256+
d = b.create_data_array('testDataArray', 'nixDataArray', nix.DataType.Double, [1 2]);
257+
s = b.create_source('testSource', 'nixSource');
258+
259+
assert(isempty(s.referring_multi_tags));
260+
261+
t1 = b.create_multi_tag('testMultiTag1', 'nixMultiTag', d);
262+
t1.add_source(s);
263+
assert(~isempty(s.referring_multi_tags));
264+
assert(strcmp(s.referring_multi_tags{1}.name, t1.name));
265+
266+
t2 = b.create_multi_tag('testMultiTag2', 'nixMultiTag', d);
267+
t2.add_source(s);
268+
assert(size(s.referring_multi_tags, 1) == 2);
269+
end

0 commit comments

Comments
 (0)