Example to rewrite attributes
While it is not possible to append/extend attributes in HDF5, attributes often represent side band information with relatevily small size. In fact in previous HDF5 versions the attribute size was limited to 64kb, however Gerd Heber suggest this limitation has been lifted.
Haveing said the above it is a good strategy to break up append
operation to read old dataset
and write new dataset
operations. The implementation is straightforward, and when used properly also is performant.
#include <vector>
#include <armadillo>
#include <h5cpp/all>
int main(void) {
h5::fd_t fd = h5::create("h5cpp.h5",H5F_ACC_TRUNC);
arma::mat data(10,5);
{ //
h5::ds_t ds = h5::write(fd,"some dataset", data); // write dataset, and obtain descriptor
h5::awrite(ds, "attribute name", {1,2,3,4,5,6,7});
}
}
will give you the following layout
h5dump -a /some_dataset/attribute_name h5cpp.h5
HDF5 "h5cpp.h5" {
ATTRIBUTE "attribute_name" {
DATATYPE H5T_STD_I32LE
DATASPACE SIMPLE { ( 7 ) / ( 7 ) }
DATA {
(0): 1, 2, 3, 4, 5, 6, 7
}
}
}
h5::adelete
either! -- however by design you can interchange HDF5 C API calls with H5CPP templates, so here is the update with H5Adelete and h5::awrite
: