Skip to content

Commit cffca54

Browse files
committed
add create/delete feature for multitag
1 parent c927e97 commit cffca54

File tree

5 files changed

+78
-2
lines changed

5 files changed

+78
-2
lines changed

+nix/MultiTag.m

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,22 @@
5454
% ------------------
5555
% Features methods
5656
% ------------------
57-
57+
58+
function retObj = add_feature(obj, add_this, link_type)
59+
if(strcmp(class(add_this), 'nix.DataArray'))
60+
addID = add_this.id;
61+
else
62+
addID = add_this;
63+
end;
64+
retObj = nix.Feature(nix_mx('MultiTag::createFeature', obj.nix_handle, addID, link_type));
65+
obj.featuresCache.lastUpdate = 0;
66+
end;
67+
68+
function delCheck = remove_feature(obj, del)
69+
[delCheck, obj.featuresCache] = nix.Utils.delete_entity(obj, ...
70+
del, 'nix.Feature', 'MultiTag::deleteFeature', obj.featuresCache);
71+
end;
72+
5873
function retObj = open_feature(obj, id_or_name)
5974
retObj = nix.Utils.open_entity(obj, ...
6075
'MultiTag::openFeature', id_or_name, @nix.Feature);

nix_mx.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,13 @@ void mexFunction(int nlhs,
171171
.reg("openSource", GETBYSTR(nix::Source, nix::MultiTag, getSource))
172172
.reg("openMetadataSection", GETCONTENT(nix::Section, nix::MultiTag, metadata))
173173
.reg("removeReference", REMOVER(nix::DataArray, nix::MultiTag, removeReference))
174-
.reg("removeSource", REMOVER(nix::Source, nix::MultiTag, removeSource));
174+
.reg("removeSource", REMOVER(nix::Source, nix::MultiTag, removeSource))
175+
.reg("deleteFeature", REMOVER(nix::Feature, nix::MultiTag, deleteFeature));
175176
methods->add("MultiTag::retrieveData", nixmultitag::retrieve_data);
176177
methods->add("MultiTag::featureRetrieveData", nixmultitag::retrieve_feature_data);
177178
methods->add("MultiTag::addReference", nixmultitag::add_reference);
178179
methods->add("MultiTag::addSource", nixmultitag::add_source);
180+
methods->add("MultiTag::createFeature", nixmultitag::create_feature);
179181

180182
classdef<nix::Section>("Section", methods)
181183
.desc(&nixsection::describe)

src/nixmultitag.cc

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

39+
void create_feature(const extractor &input, infusor &output)
40+
{
41+
nix::MultiTag currObj = input.entity<nix::MultiTag>(1);
42+
43+
nix::LinkType link_type = nixgen::get_link_type(input.num<uint8_t>(3));
44+
45+
nix::Feature newFeat = currObj.createFeature(input.str(2), link_type);
46+
output.set(0, handle(newFeat));
47+
}
48+
3949
void retrieve_data(const extractor &input, infusor &output) {
4050
nix::MultiTag currObj = input.entity<nix::MultiTag>(1);
4151
double p_index = input.num<double>(2);

src/nixmultitag.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ namespace nixmultitag {
1111

1212
void add_source(const extractor &input, infusor &output);
1313

14+
void create_feature(const extractor &input, infusor &output);
15+
1416
void retrieve_data(const extractor &input, infusor &output);
1517

1618
void retrieve_feature_data(const extractor &input, infusor &output);

tests/TestMultiTag.m

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
funcs{end+1} = @test_remove_source;
88
funcs{end+1} = @test_add_reference;
99
funcs{end+1} = @test_remove_reference;
10+
funcs{end+1} = @test_add_feature;
11+
funcs{end+1} = @test_remove_feature;
1012
funcs{end+1} = @test_fetch_references;
1113
funcs{end+1} = @test_fetch_sources;
1214
funcs{end+1} = @test_fetch_features;
@@ -94,6 +96,51 @@
9496
assert(size(b.dataArrays, 1) == 3);
9597
end
9698

99+
%% Test: Add features by entity and id
100+
function [] = test_add_feature ( varargin )
101+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
102+
b = f.createBlock('featureTest', 'nixBlock');
103+
tmp = b.create_data_array('featureTestDataArray', 'nixDataArray', 'double', [1 2]);
104+
getMTag = b.create_multi_tag('featuretest', 'nixMultiTag', b.dataArrays{1});
105+
106+
tmp = b.create_data_array('featTestDA1', 'nixDataArray', 'double', [1 2]);
107+
tmp = b.create_data_array('featTestDA2', 'nixDataArray', 'double', [3 4]);
108+
tmp = b.create_data_array('featTestDA3', 'nixDataArray', 'double', [5 6]);
109+
tmp = b.create_data_array('featTestDA4', 'nixDataArray', 'double', [7 8]);
110+
tmp = b.create_data_array('featTestDA5', 'nixDataArray', 'double', [9 10]);
111+
tmp = b.create_data_array('featTestDA6', 'nixDataArray', 'double', [11 12]);
112+
113+
assert(isempty(getMTag.features));
114+
tmp = getMTag.add_feature(b.dataArrays{2}.id, nix.LinkType.Tagged);
115+
tmp = getMTag.add_feature(b.dataArrays{3}, nix.LinkType.Tagged);
116+
tmp = getMTag.add_feature(b.dataArrays{4}.id, nix.LinkType.Untagged);
117+
tmp = getMTag.add_feature(b.dataArrays{5}, nix.LinkType.Untagged);
118+
tmp = getMTag.add_feature(b.dataArrays{6}.id, nix.LinkType.Indexed);
119+
tmp = getMTag.add_feature(b.dataArrays{7}, nix.LinkType.Indexed);
120+
assert(size(getMTag.features, 1) == 6);
121+
end
122+
123+
%% Test: Remove features by entity and id
124+
function [] = test_remove_feature ( varargin )
125+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
126+
b = f.createBlock('featureTest', 'nixBlock');
127+
tmp = b.create_data_array('featureTestDataArray', 'nixDataArray', 'double', [1 2]);
128+
getMTag = b.create_multi_tag('featuretest', 'nixMultiTag', b.dataArrays{1});
129+
130+
tmp = b.create_data_array('featTestDA1', 'nixDataArray', 'double', [1 2]);
131+
tmp = b.create_data_array('featTestDA2', 'nixDataArray', 'double', [3 4]);
132+
133+
tmp = getMTag.add_feature(b.dataArrays{2}.id, nix.LinkType.Tagged);
134+
tmp = getMTag.add_feature(b.dataArrays{3}, nix.LinkType.Tagged);
135+
136+
assert(getMTag.remove_feature(getMTag.features{2}.id));
137+
assert(getMTag.remove_feature(getMTag.features{1}));
138+
assert(isempty(getMTag.features));
139+
140+
assert(~getMTag.remove_feature('I do not exist'));
141+
assert(size(b.dataArrays, 1) == 3);
142+
end
143+
97144
%% Test: fetch references
98145
function [] = test_fetch_references( varargin )
99146
test_file = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);

0 commit comments

Comments
 (0)