9 #ifndef H5FILE_MISC_HPP
10 #define H5FILE_MISC_HPP
14 #include <H5Fpublic.h>
16 #include "../H5Utility.hpp"
24 inline unsigned convert_open_flag(
unsigned openFlags) {
25 unsigned res_open = 0;
27 res_open |= H5F_ACC_RDONLY;
29 res_open |= H5F_ACC_RDWR;
31 res_open |= H5F_ACC_CREAT;
33 res_open |= H5F_ACC_TRUNC;
35 res_open |= H5F_ACC_EXCL;
43 : _filename(filename) {
45 openFlags = convert_open_flag(openFlags);
47 unsigned createMode = openFlags & (H5F_ACC_TRUNC | H5F_ACC_EXCL);
48 unsigned openMode = openFlags & (H5F_ACC_RDWR | H5F_ACC_RDONLY);
49 bool mustCreate = createMode > 0;
50 bool openOrCreate = (openFlags & H5F_ACC_CREAT) > 0;
56 std::unique_ptr<SilenceHDF5> silencer;
57 if (openOrCreate) silencer.reset(
new SilenceHDF5());
59 _hid = H5Fopen(_filename.c_str(), openMode, fileAccessProps.
getId());
65 createMode = H5F_ACC_EXCL;
67 HDF5ErrMapper::ToException<FileException>(
72 if ((
_hid = H5Fcreate(_filename.c_str(), createMode, H5P_DEFAULT,
73 fileAccessProps.
getId())) < 0) {
74 HDF5ErrMapper::ToException<FileException>(
84 if (H5Fflush(
_hid, H5F_SCOPE_GLOBAL) < 0) {
85 HDF5ErrMapper::ToException<FileException>(
92 #endif // H5FILE_MISC_HPP