Skip to content

Commit 4cd5743

Browse files
committed
hdf5: functions to private files
1 parent 3e33887 commit 4cd5743

File tree

4 files changed

+60
-62
lines changed

4 files changed

+60
-62
lines changed

+stdlib/+hdf5nc/h5save.m

Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -78,31 +78,8 @@ function new_file(filename, varname, A, sizeA)
7878
end
7979

8080
if isscalar(A) && ~isstring(A)
81-
dcpl = 'H5P_DEFAULT';
82-
83-
if isfile(filename)
84-
fid = H5F.open(filename, 'H5F_ACC_RDWR', dcpl);
85-
else
86-
fid = H5F.create(filename);
87-
end
88-
89-
create_hdf5_group(fid, varname);
90-
91-
space_id = H5S.create('H5S_SCALAR');
92-
t = class2h5t(A);
93-
type_id = H5T.copy(t);
94-
dset_id = H5D.create(fid, varname, type_id, space_id, dcpl);
95-
H5D.write(dset_id,'H5ML_DEFAULT','H5S_ALL','H5S_ALL', dcpl, A);
96-
97-
H5S.close(space_id);
98-
H5T.close(type_id);
99-
H5D.close(dset_id);
100-
H5F.close(fid);
101-
102-
return
103-
end
104-
105-
if isvector(A)
81+
h5_write_scalar(filename, varname, A)
82+
elseif isvector(A)
10683
h5create(filename, varname, sizeA, 'DataType', class(A))
10784
else
10885
% enable Gzip compression--remember Matlab's dim order is flipped from
@@ -117,43 +94,6 @@ function new_file(filename, varname, A, sizeA)
11794
end % function
11895

11996

120-
function t = class2h5t(A)
121-
% gets HDF5 H5T of variable A
122-
123-
switch class(A)
124-
case 'double', t = 'H5T_NATIVE_DOUBLE';
125-
case 'single', t = 'H5T_NATIVE_FLOAT';
126-
case 'int32', t = 'H5T_STD_I32LE';
127-
case 'int64', t = 'H5T_STD_I64LE';
128-
otherwise, error('h5save:class2h5t: unknown data class %s', class(A))
129-
end
130-
131-
end
132-
133-
134-
function create_hdf5_group(fid, name)
135-
136-
grps = split(name, "/");
137-
if length(grps) < 3
138-
return
139-
end
140-
141-
plist = 'H5P_DEFAULT';
142-
groot = H5G.open(fid, "/");
143-
144-
for i = 0:length(grps) - 3
145-
n = join(grps(1:i+2), "/");
146-
147-
if ~H5L.exists(groot, n, plist)
148-
gid = H5G.create(fid, n, plist, plist, plist);
149-
H5G.close(gid)
150-
end
151-
end % for
152-
153-
H5G.close(groot)
154-
end % function
155-
156-
15797
% Copyright 2020 Michael Hirsch
15898

15999
% Licensed under the Apache License, Version 2.0 (the "License");

+stdlib/+hdf5nc/private/class2h5t.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function t = class2h5t(A)
2+
% gets HDF5 H5T of variable A
3+
4+
switch class(A)
5+
case 'double', t = 'H5T_NATIVE_DOUBLE';
6+
case 'single', t = 'H5T_NATIVE_FLOAT';
7+
case 'int32', t = 'H5T_STD_I32LE';
8+
case 'int64', t = 'H5T_STD_I64LE';
9+
otherwise, error('h5save:class2h5t: unknown data class %s', class(A))
10+
end
11+
12+
end
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function create_hdf5_group(fid, name)
2+
3+
grps = split(name, "/");
4+
if length(grps) < 3
5+
return
6+
end
7+
8+
plist = 'H5P_DEFAULT';
9+
groot = H5G.open(fid, "/");
10+
11+
for i = 0:length(grps) - 3
12+
n = join(grps(1:i+2), "/");
13+
14+
if ~H5L.exists(groot, n, plist)
15+
gid = H5G.create(fid, n, plist, plist, plist);
16+
H5G.close(gid)
17+
end
18+
end % for
19+
20+
H5G.close(groot)
21+
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function h5_write_scalar(filename, varname, A)
2+
%% write HDF5 scalar as a scalar
3+
% h5create doesn't support scalars
4+
dcpl = 'H5P_DEFAULT';
5+
6+
if isfile(filename)
7+
fid = H5F.open(filename, 'H5F_ACC_RDWR', dcpl);
8+
else
9+
fid = H5F.create(filename);
10+
end
11+
12+
create_hdf5_group(fid, varname);
13+
14+
space_id = H5S.create('H5S_SCALAR');
15+
t = class2h5t(A);
16+
type_id = H5T.copy(t);
17+
dset_id = H5D.create(fid, varname, type_id, space_id, dcpl);
18+
H5D.write(dset_id,'H5ML_DEFAULT','H5S_ALL','H5S_ALL', dcpl, A);
19+
20+
H5S.close(space_id);
21+
H5T.close(type_id);
22+
H5D.close(dset_id);
23+
H5F.close(fid);
24+
25+
end

0 commit comments

Comments
 (0)