| 3562 | } |
| 3563 | |
| 3564 | int VTKHDF_Recorder::extendOffsetDataset(hid_t group_id, |
| 3565 | const char* dataset_name, |
| 3566 | const void* new_value, |
| 3567 | hid_t datatype, |
| 3568 | size_t extra_rows) { |
| 3569 | // Open dataset |
| 3570 | hid_t dset_id = H5Dopen(group_id, dataset_name, H5P_DEFAULT); |
| 3571 | if (dset_id < 0) { |
| 3572 | opserr << "Error opening dataset '" << dataset_name << "'\n"; |
| 3573 | return -1; |
| 3574 | } |
| 3575 | |
| 3576 | // Get current dataspace and dimensions |
| 3577 | hid_t space_id = H5Dget_space(dset_id); |
| 3578 | if (space_id < 0) { |
| 3579 | opserr << "Error getting dataspace for '" << dataset_name << "'\n"; |
| 3580 | H5Dclose(dset_id); |
| 3581 | return -1; |
| 3582 | } |
| 3583 | |
| 3584 | // Get current dimensions |
| 3585 | hsize_t current_dims[1]; |
| 3586 | if (H5Sget_simple_extent_dims(space_id, current_dims, NULL) < 0) { |
| 3587 | opserr << "Error getting current dimensions\n"; |
| 3588 | H5Sclose(space_id); |
| 3589 | H5Dclose(dset_id); |
| 3590 | return -1; |
| 3591 | } |
| 3592 | |
| 3593 | // Calculate new dimensions |
| 3594 | hsize_t new_dims[1] = {current_dims[0] + static_cast<hsize_t>(extra_rows)}; |
| 3595 | |
| 3596 | // Extend dataset |
| 3597 | if (H5Dset_extent(dset_id, new_dims) < 0) { |
| 3598 | opserr << "Error setting new extent for '" << dataset_name << "'\n"; |
| 3599 | H5Sclose(space_id); |
| 3600 | H5Dclose(dset_id); |
| 3601 | return -1; |
| 3602 | } |
| 3603 | |
| 3604 | // Get new dataspace |
| 3605 | hid_t new_space_id = H5Dget_space(dset_id); |
| 3606 | if (new_space_id < 0) { |
| 3607 | opserr << "Error getting new dataspace for '" << dataset_name << "'\n"; |
| 3608 | H5Sclose(space_id); |
| 3609 | H5Dclose(dset_id); |
| 3610 | return -1; |
| 3611 | } |
| 3612 | |
| 3613 | // Select hyperslab for new data |
| 3614 | hsize_t offset[1] = {current_dims[0]}; |
| 3615 | hsize_t count[1] = {1}; |
| 3616 | if (H5Sselect_hyperslab(new_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) { |
| 3617 | opserr << "Error selecting hyperslab\n"; |
| 3618 | H5Sclose(new_space_id); |
| 3619 | H5Sclose(space_id); |
| 3620 | H5Dclose(dset_id); |
| 3621 | return -1; |
no outgoing calls
no test coverage detected