Skip to content

Commit 105adb8

Browse files
authored
Merge pull request #155 from mpsonntag/refactorProperty
Easy access to 'Section.properties' listing LGTM
2 parents dbe7399 + 4b6f910 commit 105adb8

File tree

7 files changed

+83
-143
lines changed

7 files changed

+83
-143
lines changed

+nix/Section.m

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@
1414
% namespace reference for nix-mx functions
1515
alias = 'Section'
1616
end;
17-
18-
properties(Dependent)
19-
allProperties
20-
allPropertiesMap
21-
end;
22-
17+
2318
methods
2419
function obj = Section(h)
2520
@@ -30,6 +25,7 @@
3025

3126
% assign relations
3227
nix.Dynamic.add_dyn_relation(obj, 'sections', @nix.Section);
28+
nix.Dynamic.add_dyn_relation(obj, 'properties', @nix.Property);
3329
end;
3430

3531
function section = parent(obj)
@@ -169,19 +165,6 @@
169165
'Section::openPropertyIdx', idx, @nix.Property);
170166
end;
171167

172-
function props = get.allProperties(obj)
173-
props = nix_mx('Section::properties', obj.nix_handle);
174-
end;
175-
176-
function p_map = get.allPropertiesMap(obj)
177-
p_map = containers.Map();
178-
props = obj.allProperties;
179-
180-
for i=1:length(props)
181-
p_map(props{i}.name) = cell2mat(props{i}.values);
182-
end
183-
end;
184-
185168
function c = property_count(obj)
186169
c = nix_mx('Section::propertyCount', obj.nix_handle);
187170
end

examples/Primer.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@
7373
sec = f.sections{2}.sections{1};
7474

7575
% display all Section properties
76-
cellfun(@(x) disp(x), sec.allProperties);
76+
cellfun(@(x) disp(x), sec.properties);
7777

7878
% get a certain Value by index
79-
value = sec.allProperties{1}.values{1};
79+
value = sec.properties{1}.values{1};
8080

8181
% or by name
8282
value = sec.open_property('Name').values{1}.value;

nix_mx.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ void mexFunction(int nlhs,
381381
classdef<nix::Section>("Section", methods)
382382
.desc(&nixsection::describe)
383383
.reg("sections", &nix::Section::sections)
384+
.reg("properties", &nix::Section::properties)
384385
.reg("openSection", GETBYSTR(nix::Section, nix::Section, getSection))
385386
.reg("hasProperty", GETBYSTR(bool, nix::Section, hasProperty))
386387
.reg("hasSection", GETBYSTR(bool, nix::Section, hasSection))
@@ -407,7 +408,6 @@ void mexFunction(int nlhs,
407408
.reg("referringMultiTags", GETTER(std::vector<nix::MultiTag>, nix::Section, referringMultiTags))
408409
.reg("referringSources", GETTER(std::vector<nix::Source>, nix::Section, referringSources))
409410
.reg("referringBlocks", GETTER(std::vector<nix::Block>, nix::Section, referringBlocks));
410-
methods->add("Section::properties", nixsection::properties);
411411
methods->add("Section::createProperty", nixsection::createProperty);
412412
methods->add("Section::createPropertyWithValue", nixsection::createPropertyWithValue);
413413
methods->add("Section::referringBlockSources", nixsection::referringBlockSources);

src/nixsection.cc

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -34,37 +34,6 @@ namespace nixsection {
3434
return sb.array();
3535
}
3636

37-
void properties(const extractor &input, infusor &output) {
38-
nix::Section section = input.entity<nix::Section>(1);
39-
std::vector<nix::Property> properties = section.properties();
40-
41-
const mwSize size = static_cast<mwSize>(properties.size());
42-
mxArray *lst = mxCreateCellArray(1, &size);
43-
44-
for (size_t i = 0; i < properties.size(); i++) {
45-
46-
nix::Property pr = properties[i];
47-
std::vector<nix::Value> values = pr.values();
48-
49-
mxArray *mx_values = make_mx_array(values);
50-
51-
struct_builder sb({ 1 }, {
52-
"name", "id", "definition", "mapping", "unit", "values"
53-
});
54-
55-
sb.set(pr.name());
56-
sb.set(pr.id());
57-
sb.set(pr.definition());
58-
sb.set(pr.mapping());
59-
sb.set(pr.unit());
60-
sb.set(mx_values);
61-
62-
mxSetCell(lst, i, sb.array());
63-
}
64-
65-
output.set(0, lst);
66-
}
67-
6837
void createProperty(const extractor &input, infusor &output) {
6938
nix::Section currObj = input.entity<nix::Section>(1);
7039

src/nixsection.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ namespace nixsection {
1515

1616
mxArray *describe(const nix::Section &section);
1717

18-
void properties(const extractor &input, infusor &output);
19-
2018
void createProperty(const extractor &input, infusor &output);
2119

2220
void createPropertyWithValue(const extractor &input, infusor &output);

tests/TestProperty.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@
9191
assert(updateDouble.values{1}.value == 2.2);
9292

9393
%-- test remove values from property
94-
delValues = s.open_property(s.allProperties{3}.id);
94+
delValues = s.properties{3};
9595
assert(size(delValues.values, 1) == 4);
9696
delValues.values = {};
9797
assert(size(delValues.values, 1) == 0);
9898
clear delValues;
9999

100100
%-- test add new values to empty value property
101-
newValues = s.open_property(s.allProperties{3}.id);
101+
newValues = s.properties{3};
102102
newValues.values = [1,2,3,4,5];
103103
assert(newValues.values{5}.value == 5);
104104
newValues.values = {};
@@ -110,7 +110,7 @@
110110
val2 = newValues.values{2};
111111
updateNewDouble = s.create_property('doubleProperty2', nix.DataType.Double);
112112
updateNewDouble.values = {val1, val2};
113-
assert(s.open_property(s.allProperties{end}.id).values{2}.value == val2.value);
113+
assert(s.properties{end}.values{2}.value == val2.value);
114114
end
115115

116116
%% Test: Value count
@@ -127,7 +127,7 @@
127127

128128
clear p s f;
129129
f = nix.File(testFile, nix.FileMode.ReadOnly);
130-
pid = f.sections{1}.allProperties{1}.id;
130+
pid = f.sections{1}.properties{1}.id;
131131
assert(f.sections{1}.open_property(pid).value_count() == 1);
132132
end
133133

@@ -144,7 +144,7 @@
144144

145145
clear p s f;
146146
f = nix.File(testFile, nix.FileMode.ReadOnly);
147-
assert(isempty(f.sections{1}.allProperties{1}.values));
147+
assert(isempty(f.sections{1}.properties{1}.values));
148148
end
149149

150150
%% Test: Compare properties

tests/TestSection.m

Lines changed: 73 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -183,110 +183,100 @@
183183
%% Test: Properties
184184
f = nix.File(fullfile(pwd, 'tests', 'test.h5'), nix.FileMode.ReadOnly);
185185
trial = f.sections{2}.sections{2}.sections{1};
186-
187-
assert(~isempty(trial.allProperties));
188-
189-
p1 = trial.allProperties{1};
190-
assert(strcmp(p1.name, 'ExperimentalCondition'));
191-
192-
disp(f.sections{3}.allProperties);
193-
194-
assert(isempty(f.sections{3}.allProperties));
186+
187+
assert(~isempty(trial.properties));
188+
assert(strcmp(trial.properties{1}.name, 'ExperimentalCondition'));
189+
assert(isempty(f.sections{3}.properties));
195190
end
196191

197192
%% Test: Create property by data type
198193
function [] = test_create_property( varargin )
199194
f = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.Overwrite);
200195
s = f.create_section('mainSection', 'nixSection');
201196

202-
tmp = s.create_property('newProperty1', nix.DataType.Double);
203-
tmp = s.create_property('newProperty2', nix.DataType.Bool);
204-
tmp = s.create_property('newProperty3', nix.DataType.String);
205-
assert(size(s.allProperties, 1) == 3);
206-
assert(strcmp(s.allProperties{1}.name, 'newProperty1'));
197+
s.create_property('newProperty1', nix.DataType.Double);
198+
s.create_property('newProperty2', nix.DataType.Bool);
199+
s.create_property('newProperty3', nix.DataType.String);
200+
assert(size(s.properties, 1) == 3);
201+
assert(strcmp(s.properties{1}.name, 'newProperty1'));
207202
end
208203

209204
%% Test: Create property with value
210205
function [] = test_create_property_with_value( varargin )
211206
f = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.Overwrite);
212207
s = f.create_section('mainSection', 'nixSection');
213208

214-
tmp = s.create_property_with_value('doubleProperty1', [5, 6, 7, 8]);
215-
assert(strcmp(s.allProperties{end}.name, 'doubleProperty1'));
216-
assert(s.allProperties{end}.values{1} == 5);
217-
assert(size(s.allProperties{end}.values, 2) == 4);
218-
assert(s.open_property(s.allProperties{end}.id).values{1}.value == 5);
219-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 4);
220-
assert(strcmpi(tmp.datatype,'double'));
221-
222-
tmp = s.create_property_with_value('doubleProperty2', {5, 6, 7, 8});
223-
assert(strcmp(s.allProperties{end}.name, 'doubleProperty2'));
224-
assert(s.open_property(s.allProperties{end}.id).values{1}.value == 5);
225-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 4);
226-
assert(strcmpi(tmp.datatype,'double'));
227-
228-
tmp = s.create_property_with_value('stringProperty1', ['a', 'string']);
229-
assert(strcmp(s.allProperties{end}.name, 'stringProperty1'));
230-
assert(strcmp(s.open_property(s.allProperties{end}.id).values{1}.value, 'a'));
231-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 7);
232-
assert(strcmpi(tmp.datatype, 'char'));
233-
234-
tmp = s.create_property_with_value('stringProperty2', {'this', 'has', 'strings'});
235-
assert(strcmp(s.allProperties{end}.name, 'stringProperty2'));
236-
assert(strcmp(s.allProperties{end}.values{1}, 'this'));
237-
assert(size(s.allProperties{end}.values, 2) == 3);
238-
assert(strcmp(s.open_property(s.allProperties{end}.id).values{1}.value, 'this'));
239-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 3);
240-
assert(strcmpi(tmp.datatype, 'char'));
241-
242-
tmp = s.create_property_with_value('booleanProperty1', [true, false, true]);
243-
assert(strcmp(s.allProperties{end}.name, 'booleanProperty1'));
244-
assert(s.allProperties{end}.values{1});
245-
assert(~s.allProperties{end}.values{2});
246-
assert(size(s.allProperties{end}.values, 2) == 3);
247-
assert(s.open_property(s.allProperties{end}.id).values{1}.value);
248-
assert(~s.open_property(s.allProperties{end}.id).values{2}.value);
249-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 3);
250-
assert(strcmpi(tmp.datatype, 'logical'));
251-
252-
tmp = s.create_property_with_value('booleanProperty2', {true, false, true});
253-
assert(strcmp(s.allProperties{end}.name, 'booleanProperty2'));
254-
assert(s.open_property(s.allProperties{end}.id).values{1}.value);
255-
assert(~s.open_property(s.allProperties{end}.id).values{2}.value);
256-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 3);
257-
assert(strcmpi(tmp.datatype, 'logical'));
258-
259-
val1 = s.open_property(s.allProperties{1}.id).values{1};
260-
val2 = s.open_property(s.allProperties{1}.id).values{2};
261-
tmp = s.create_property_with_value('doubleByStrunct1', [val1, val2]);
262-
assert(strcmp(s.allProperties{end}.name, 'doubleByStrunct1'));
263-
assert(s.open_property(s.allProperties{end}.id).values{1}.value == 5);
264-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 2);
265-
assert(strcmpi(tmp.datatype,'double'));
266-
267-
val3 = s.open_property(s.allProperties{1}.id).values{3};
268-
tmp = s.create_property_with_value('doubleByStrunct2', {val1, val2, val3});
269-
assert(strcmp(s.allProperties{end}.name, 'doubleByStrunct2'));
270-
assert(s.open_property(s.allProperties{end}.id).values{3}.value == 7);
271-
assert(size(s.open_property(s.allProperties{end}.id).values, 1) == 3);
272-
assert(strcmpi(tmp.datatype,'double'));
209+
% test create by array
210+
s.create_property_with_value('doubleProperty1', [5, 6, 7, 8]);
211+
assert(strcmp(s.properties{end}.name, 'doubleProperty1'));
212+
assert(s.properties{end}.values{1}.value == 5);
213+
assert(size(s.properties{end}.values, 1) == 4);
214+
assert(strcmpi(s.properties{end}.datatype, 'double'));
215+
216+
% test create by cell array
217+
s.create_property_with_value('doubleProperty2', {5, 6, 7, 8});
218+
assert(strcmp(s.properties{end}.name, 'doubleProperty2'));
219+
assert(s.properties{end}.values{2}.value == 6);
220+
assert(size(s.properties{end}.values, 1) == 4);
221+
assert(strcmpi(s.properties{end}.datatype, 'double'));
222+
223+
s.create_property_with_value('stringProperty1', ['a', 'string']);
224+
assert(strcmp(s.properties{end}.name, 'stringProperty1'));
225+
assert(strcmp(s.properties{end}.values{1}.value, 'a'));
226+
assert(size(s.properties{end}.values, 1) == 7);
227+
assert(strcmpi(s.properties{end}.datatype, 'char'));
228+
229+
s.create_property_with_value('stringProperty2', {'this', 'has', 'strings'});
230+
assert(strcmp(s.properties{end}.name, 'stringProperty2'));
231+
assert(strcmp(s.properties{end}.values{1}.value, 'this'));
232+
assert(size(s.properties{end}.values, 1) == 3);
233+
assert(strcmpi(s.properties{end}.datatype, 'char'));
234+
235+
s.create_property_with_value('booleanProperty1', [true, false, true]);
236+
assert(strcmp(s.properties{end}.name, 'booleanProperty1'));
237+
assert(s.properties{end}.values{1}.value);
238+
assert(~s.properties{end}.values{2}.value);
239+
assert(size(s.properties{end}.values, 1) == 3);
240+
assert(strcmpi(s.properties{end}.datatype, 'logical'));
241+
242+
s.create_property_with_value('booleanProperty2', {true, false, true});
243+
assert(strcmp(s.properties{end}.name, 'booleanProperty2'));
244+
assert(s.properties{end}.values{1}.value);
245+
assert(~s.properties{end}.values{2}.value);
246+
assert(size(s.properties{end}.values, 1) == 3);
247+
assert(strcmpi(s.properties{end}.datatype, 'logical'));
248+
249+
val1 = s.properties{1}.values{1};
250+
val2 = s.properties{1}.values{2};
251+
s.create_property_with_value('doubleByStrunct1', [val1, val2]);
252+
assert(strcmp(s.properties{end}.name, 'doubleByStrunct1'));
253+
assert(s.properties{end}.values{1}.value == 5);
254+
assert(size(s.properties{end}.values, 1) == 2);
255+
assert(strcmpi(s.properties{end}.datatype, 'double'));
256+
257+
val3 = s.properties{1}.values{3};
258+
s.create_property_with_value('doubleByStrunct2', {val1, val2, val3});
259+
assert(strcmp(s.properties{end}.name, 'doubleByStrunct2'));
260+
assert(s.properties{end}.values{3}.value == 7);
261+
assert(size(s.properties{end}.values, 1) == 3);
262+
assert(strcmpi(s.properties{end}.datatype, 'double'));
273263
end
274264

275265
%% Test: Delete property by entity, propertyStruct, ID and name
276266
function [] = test_delete_property( varargin )
277267
f = nix.File(fullfile(pwd,'tests','testRW.h5'), nix.FileMode.Overwrite);
278268
s = f.create_section('mainSection', 'nixSection');
279-
tmp = s.create_property('newProperty1', nix.DataType.Double);
280-
tmp = s.create_property('newProperty2', nix.DataType.Bool);
281-
tmp = s.create_property('newProperty3', nix.DataType.String);
282-
tmp = s.create_property('newProperty4', nix.DataType.Double);
269+
s.create_property('newProperty1', nix.DataType.Double);
270+
s.create_property('newProperty2', nix.DataType.Bool);
271+
s.create_property('newProperty3', nix.DataType.String);
272+
s.create_property('newProperty4', nix.DataType.Double);
283273

284274
assert(s.delete_property('newProperty4'));
285-
assert(s.delete_property(s.allProperties{3}.id));
286-
delProp = s.open_property(s.allProperties{2}.id);
275+
assert(s.delete_property(s.properties{3}.id));
276+
delProp = s.properties{2};
287277
assert(s.delete_property(delProp));
288-
assert(s.delete_property(s.allProperties{1}));
289-
278+
assert(s.delete_property(s.properties{1}));
279+
290280
assert(~s.delete_property('I do not exist'));
291281
end
292282

@@ -295,8 +285,8 @@
295285
f = nix.File(fullfile(pwd, 'tests', 'test.h5'), nix.FileMode.ReadOnly);
296286
trial = f.sections{2}.sections{2}.sections{1};
297287

298-
assert(~isempty(trial.open_property(trial.allProperties{1}.id)));
299-
assert(~isempty(trial.open_property(trial.allProperties{1}.name)));
288+
assert(~isempty(trial.open_property(trial.properties{1}.id)));
289+
assert(~isempty(trial.open_property(trial.properties{1}.name)));
300290
end
301291

302292
function [] = test_open_property_idx( varargin )

0 commit comments

Comments
 (0)