1 module dhdf5.file; 2 3 import std..string: toStringz; 4 5 import hdf5.hdf5; 6 7 struct H5File 8 { 9 enum Access 10 { 11 ReadOnly = H5F_ACC_RDONLY, /*absence of rdwr => rd-only */ 12 ReadWrite = H5F_ACC_RDWR, /*open for read and write */ 13 Trunc = H5F_ACC_TRUNC, /*overwrite existing files */ 14 Exclude = H5F_ACC_EXCL, /*fail if file already exists*/ 15 Create = H5F_ACC_CREAT, /*create non-existing files */ 16 }; 17 18 this(string filename, Access mode, hid_t fapl_id = H5P_DEFAULT, hid_t fcpl_id = H5P_DEFAULT) 19 { 20 final switch(mode) 21 { 22 case Access.Trunc: 23 case Access.Exclude: 24 { 25 _file = H5Fcreate(filename.toStringz, mode, fcpl_id, fapl_id); 26 break; 27 } 28 case Access.ReadOnly: 29 case Access.ReadWrite: 30 { 31 _file = H5Fopen(filename.toStringz, mode, fapl_id); 32 break; 33 } 34 case Access.Create: 35 assert (0, "Flag H5F_ACC_CREAT is not supported."); 36 } 37 assert(_file >= 0); 38 } 39 40 ~this() 41 { 42 if (_file != -1) 43 { 44 H5Fclose(_file); 45 _file = -1; 46 } 47 } 48 49 auto tid() const pure @safe 50 { 51 return _file; 52 } 53 54 private: 55 hid_t _file = -1; 56 }