172 const std::string& name)
const {
174 hsize_t dims[1] = {1};
175 H5::DataSpace dp(1, dims);
179 attr = loc.createAttribute(name, *dataType, dp);
180 }
catch (H5::AttributeIException&) {
181 attr = loc.openAttribute(name);
183 attr.write(*dataType, &value);
187 const std::string& name)
const {
188 hsize_t dims[1] = {1};
189 H5::DataSpace dp(1, dims);
195 attr = loc.createAttribute(name, *strType, dp);
196 }
catch (H5::AttributeIException&) {
197 attr = loc.openAttribute(name);
200 const char* c_str_copy = value.c_str();
201 attr.write(*strType, &c_str_copy);
206 const std::string& name)
const {
208 hsize_t matRows = hsize_t(matrix.rows());
209 hsize_t matCols = hsize_t(matrix.cols());
211 hsize_t dims[2] = {matRows, matCols};
217 H5::DataSpace dp(2, dims);
219 const H5::DataType* memType =
221 const H5::DataType* fileType =
226 dataset = loc.createDataSet(name.c_str(), *fileType, dp);
227 }
catch (H5::GroupIException&) {
228 dataset = loc.openDataSet(name.c_str());
231 hsize_t matColSize = matrix.derived().outerStride();
233 hsize_t fileRows = matCols;
235 hsize_t fStride[2] = {1, fileRows};
236 hsize_t fCount[2] = {1, 1};
237 hsize_t fBlock[2] = {1, fileRows};
239 hsize_t mStride[2] = {matColSize, 1};
240 hsize_t mCount[2] = {1, 1};
241 hsize_t mBlock[2] = {matCols, 1};
243 hsize_t mDim[2] = {matCols, matColSize};
244 H5::DataSpace mspace(2, mDim);
246 for (hsize_t i = 0; i < matRows; i++) {
247 hsize_t fStart[2] = {i, 0};
248 hsize_t mStart[2] = {0, i};
249 dp.selectHyperslab(H5S_SELECT_SET, fCount, fStart, fStride, fBlock);
250 mspace.selectHyperslab(H5S_SELECT_SET, mCount, mStart, mStride, mBlock);
251 dataset.write(matrix.derived().data(), *memType, mspace, dp);
256 typename std::enable_if<std::is_fundamental<T>::value>::type
WriteData(
257 const CptLoc& loc,
const std::vector<T> v,
258 const std::string& name)
const {
259 hsize_t dims[2] = {(hsize_t)v.size(), 1};
265 H5::DataSpace dp(2, dims);
267 dataset = loc.createDataSet(name.c_str(), *fileType, dp);
268 }
catch (H5::GroupIException&) {
269 dataset = loc.openDataSet(name.c_str());
271 dataset.write(v.data(), *memType);
275 const std::string& name)
const {
277 hsize_t dims[1] = {(hsize_t)v.size()};
279 std::vector<const char*> c_str_copy;
280 c_str_copy.reserve(v.size());
281 for (
const std::string& s : v) {
282 c_str_copy.push_back(s.c_str());
286 H5::DataSpace dp(1, dims);
288 dataset = loc.createDataSet(name.c_str(), *dataType, dp);
289 }
catch (H5::GroupIException&) {
290 dataset = loc.openDataSet(name.c_str());
292 dataset.write(c_str_copy.data(), *dataType);