Я узнал, как это сделать: я определил эту структуру:
struct info_t {
idtype m_ulID;
gridtype m_ulCellID;
};
Затем я создаю соответствующий тип данных HDF5:
hid_t hInfoDataType = H5Tcreate (H5T_COMPOUND, sizeof (info_t));
info_t ii;
H5Tinsert(hInfoDataType, SPOP_DT_CELL_ID, HOFFSET(info_t, m_ulCellID), H5T_NATIVE_INT);
H5Tinsert(hInfoDataType, SPOP_DT_AGENT_ID, HOFFSET(info_t, m_ulID), INT_NATIVE_LONG);
Затем, предполагая соответствующее пространство данных (hDataSpace
) был открыт, я читаю и использую данные:
hsize_t dims;
H5Sget_simple_extent_dims(hDataSpace, &dims, NULL);
info_t *pInfos = new info_t[dims];
hid_t hMemSpace = H5Screate_simple (1, &dims, NULL);
herr_t status = H5Dread(hDataSet, hAgentDataType, hMemSpace, hDataSpace, H5P_DEFAULT, pInfos);
for (int i = 0; i < 10; i++) {
printf("%d; a %ld, c %d\n", i, pInfos[i].m_ulID, pInfos[i].m_ulCellID);
}
delete[] pInfos;