Skip to content

Commit 0d36772

Browse files
committed
create/del tag, mtag, dataarray from block
1 parent 5fce7be commit 0d36772

File tree

5 files changed

+125
-8
lines changed

5 files changed

+125
-8
lines changed

+nix/Block.m

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@
4646
da = obj.create_data_array(name, nixtype, dtype, shape);
4747
da.write_all(data);
4848
end
49-
49+
50+
function delCheck = delete_data_array(obj, del)
51+
[delCheck, obj.dataArraysCache] = nix.Utils.delete_entity(obj, ...
52+
del, 'nix.DataArray', 'Block::deleteDataArray', obj.dataArraysCache);
53+
end;
54+
5055
% -----------------
5156
% Sources methods
5257
% -----------------
@@ -85,7 +90,12 @@
8590
tag = nix.Tag(th);
8691
obj.tagsCache.lastUpdate = 0;
8792
end;
88-
93+
94+
function delCheck = delete_tag(obj, del)
95+
[delCheck, obj.tagsCache] = nix.Utils.delete_entity(obj, ...
96+
del, 'nix.Tag', 'Block::deleteTag', obj.tagsCache);
97+
end;
98+
8999
% -----------------
90100
% MultiTag methods
91101
% -----------------
@@ -98,7 +108,25 @@
98108
retObj = nix.Utils.open_entity(obj, ...
99109
'Block::openMultiTag', id_or_name, @nix.MultiTag);
100110
end;
111+
112+
%-- creating a multitag requires an already existing data array
113+
function multitag = create_multi_tag(obj, name, type, add_data_array)
114+
if(strcmp(class(add_data_array), 'nix.DataArray'))
115+
addID = add_data_array.id;
116+
else
117+
addID = add_data_array;
118+
end;
119+
120+
multitag = nix.MultiTag(nix_mx('Block::createMultiTag', ...
121+
obj.nix_handle, name, type, addID));
122+
obj.multiTagsCache.lastUpdate = 0;
123+
end;
101124

125+
function delCheck = delete_multi_tag(obj, del)
126+
[delCheck, obj.multiTagsCache] = nix.Utils.delete_entity(obj, ...
127+
del, 'nix.MultiTag', 'Block::deleteMultiTag', obj.multiTagsCache);
128+
end;
129+
102130
% -----------------
103131
% Metadata methods
104132
% -----------------

nix_mx.cc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,10 @@ void mexFunction(int nlhs,
101101

102102
classdef<nix::Block>("Block", methods)
103103
.desc(&nixblock::describe)
104-
.reg("dataArrays", &nix::Block::dataArrays)
105-
.reg("createSource", &nix::Block::createSource)
106-
.reg("deleteSource", REMOVER(nix::Source, nix::Block, deleteSource))
107104
//.reg("createDataArray", static_cast<nix::DataArray(nix::Block::*)(const std::string &, const std::string &, nix::DataType, const nix::NDSize &)>(&nix::Block::createDataArray))
105+
.reg("createSource", &nix::Block::createSource)
108106
.reg("createTag", &nix::Block::createTag)
109-
.reg("createMultiTag", &nix::Block::createMultiTag)
107+
.reg("dataArrays", &nix::Block::dataArrays)
110108
.reg("sources", &nix::Block::sources)
111109
.reg("tags", &nix::Block::tags)
112110
.reg("multiTags", &nix::Block::multiTags)
@@ -116,8 +114,13 @@ void mexFunction(int nlhs,
116114
.reg("openSource", GETBYSTR(nix::Source, nix::Block, getSource))
117115
.reg("openTag", GETBYSTR(nix::Tag, nix::Block, getTag))
118116
.reg("openMultiTag", GETBYSTR(nix::MultiTag, nix::Block, getMultiTag))
119-
.reg("openMetadataSection", GETCONTENT(nix::Section, nix::Block, metadata));
117+
.reg("openMetadataSection", GETCONTENT(nix::Section, nix::Block, metadata))
118+
.reg("deleteDataArray", REMOVER(nix::DataArray, nix::Block, deleteDataArray))
119+
.reg("deleteSource", REMOVER(nix::Source, nix::Block, deleteSource))
120+
.reg("deleteTag", REMOVER(nix::Tag, nix::Block, deleteTag))
121+
.reg("deleteMultiTag", REMOVER(nix::MultiTag, nix::Block, deleteMultiTag));
120122
methods->add("Block::createDataArray", nixblock::create_data_array);
123+
methods->add("Block::createMultiTag", nixblock::create_multi_tag);
121124

122125
classdef<nix::DataArray>("DataArray", methods)
123126
.desc(&nixdataarray::describe)

src/nixblock.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,15 @@ namespace nixblock {
3535
output.set(0, dt);
3636
}
3737

38+
void create_multi_tag(const extractor &input, infusor &output)
39+
{
40+
nix::Block block = input.entity<nix::Block>(1);
41+
std::string name = input.str(2);
42+
std::string type = input.str(3);
43+
nix::DataArray positions = block.getDataArray(input.str(4));
44+
45+
nix::MultiTag mTag = block.createMultiTag(name, type, positions);
46+
output.set(0, mTag);
47+
}
48+
3849
} // namespace nixblock

src/nixblock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ namespace nixblock {
99

1010
void create_data_array(const extractor &input, infusor &output);
1111

12+
void create_multi_tag(const extractor &input, infusor &output);
13+
1214
} // namespace nixblock
1315

1416
#endif

tests/TestBlock.m

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@
1515
funcs{end+1} = @test_has_tag;
1616
funcs{end+1} = @test_open_metadata;
1717
funcs{end+1} = @test_attrs;
18-
funcs{end+1} = @test_create_tag;
1918
funcs{end+1} = @test_create_data_array;
2019
funcs{end+1} = @test_create_data_array_from_data;
20+
funcs{end+1} = @test_delete_data_array;
21+
funcs{end+1} = @test_create_tag;
22+
funcs{end+1} = @test_delete_tag;
23+
funcs{end+1} = @test_create_multi_tag;
24+
funcs{end+1} = @test_delete_multi_tag;
2125
funcs{end+1} = @test_create_source;
2226
funcs{end+1} = @test_delete_source;
2327
end
@@ -175,6 +179,23 @@
175179
assert(~isempty(b.tags));
176180
end
177181

182+
%% Test: delete tag by entity and id
183+
function [] = test_delete_tag( varargin )
184+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
185+
b = f.createBlock('tagtest', 'nixBlock');
186+
position = [1.0 1.2 1.3 15.9];
187+
tmp = b.create_tag('tagtest1', 'nixTag', position);
188+
tmp = b.create_tag('tagtest2', 'nixTag', position);
189+
190+
assert(size(b.tags, 1) == 2);
191+
assert(b.delete_tag(b.tags{2}.id));
192+
assert(size(b.tags, 1) == 1);
193+
assert(b.delete_tag(b.tags{1}));
194+
assert(isempty(b.tags));
195+
196+
assert(~b.delete_tag('I do not exist'));
197+
end
198+
178199
function [] = test_create_data_array( varargin )
179200
%% Test: Create Data Array
180201
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
@@ -213,6 +234,58 @@
213234
assert(~isempty(b.dataArrays));
214235
end
215236

237+
%% Test: delete dataArray by entity and id
238+
function [] = test_delete_data_array( varargin )
239+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
240+
b = f.createBlock('arraytest', 'nixBlock');
241+
tmp = b.create_data_array('dataArrayTest1', 'nixDataArray', 'double', [1 2]);
242+
tmp = b.create_data_array('dataArrayTest2', 'nixDataArray', 'double', [3 4]);
243+
244+
assert(size(b.dataArrays, 1) == 2);
245+
assert(b.delete_data_array(b.dataArrays{2}.id));
246+
assert(size(b.dataArrays, 1) == 1);
247+
assert(b.delete_data_array(b.dataArrays{1}));
248+
assert(isempty(b.dataArrays));
249+
assert(~b.delete_data_array('I do not exist'));
250+
end
251+
252+
function [] = test_create_multi_tag( varargin )
253+
%% Test: Create multitag by data_array entity and data_array id
254+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
255+
b = f.createBlock('mTagTestBlock', 'nixBlock');
256+
tmp = b.create_data_array('mTagTestDataArray1', 'nixDataArray', 'double', [1 2]);
257+
tmp = b.create_data_array('mTagTestDataArray2', 'nixDataArray', 'double', [3 4]);
258+
assert(isempty(b.multiTags));
259+
260+
%-- create by data_array entity
261+
tmp = b.create_multi_tag('mTagTest1', 'nixMultiTag1', b.dataArrays{1});
262+
assert(~isempty(b.multiTags));
263+
assert(strcmp(b.multiTags{1}.name, 'mTagTest1'));
264+
265+
%-- create by data_array id
266+
tmp = b.create_multi_tag('mTagTest2', 'nixMultiTag2', b.dataArrays{2}.id);
267+
assert(size(b.multiTags, 1) == 2);
268+
assert(strcmp(b.multiTags{2}.type, 'nixMultiTag2'));
269+
end
270+
271+
%% Test: delete multitag by entity and id
272+
function [] = test_delete_multi_tag( varargin )
273+
f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);
274+
b = f.createBlock('mTagTestBlock', 'nixBlock');
275+
tmp = b.create_data_array('mTagTestDataArray1', 'nixDataArray', 'double', [1 2]);
276+
tmp = b.create_multi_tag('mTagTest1', 'nixMultiTag1', b.dataArrays{1});
277+
tmp = b.create_multi_tag('mTagTest2', 'nixMultiTag2', b.dataArrays{1});
278+
279+
assert(size(b.multiTags, 1) == 2);
280+
assert(b.delete_multi_tag(b.multiTags{2}.id));
281+
assert(size(b.multiTags, 1) == 1);
282+
assert(b.delete_multi_tag(b.multiTags{1}));
283+
assert(isempty(b.multiTags));
284+
assert(size(b.dataArrays, 1) == 1);
285+
286+
assert(~b.delete_multi_tag('I do not exist'));
287+
end
288+
216289
%% Test: create source
217290
function [] = test_create_source ( varargin )
218291
test_file = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite);

0 commit comments

Comments
 (0)