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);
221 dataset = loc.createDataSet(name.c_str(), *dataType, dp);
222 }
catch (H5::GroupIException&) {
223 dataset = loc.openDataSet(name.c_str());
226 hsize_t matColSize = matrix.derived().outerStride();
228 hsize_t fileRows = matCols;
230 hsize_t fStride[2] = {1, fileRows};
231 hsize_t fCount[2] = {1, 1};
232 hsize_t fBlock[2] = {1, fileRows};
234 hsize_t mStride[2] = {matColSize, 1};
235 hsize_t mCount[2] = {1, 1};
236 hsize_t mBlock[2] = {matCols, 1};
238 hsize_t mDim[2] = {matCols, matColSize};
239 H5::DataSpace mspace(2, mDim);
241 for (hsize_t i = 0; i < matRows; i++) {
242 hsize_t fStart[2] = {i, 0};
243 hsize_t mStart[2] = {0, i};
244 dp.selectHyperslab(H5S_SELECT_SET, fCount, fStart, fStride, fBlock);
245 mspace.selectHyperslab(H5S_SELECT_SET, mCount, mStart, mStride, mBlock);
246 dataset.write(matrix.derived().data(), *dataType, mspace, dp);
251 typename std::enable_if<std::is_fundamental<T>::value>::type
WriteData(
252 const CptLoc& loc,
const std::vector<T> v,
253 const std::string& name)
const {
254 hsize_t dims[2] = {(hsize_t)v.size(), 1};
258 H5::DataSpace dp(2, dims);
260 dataset = loc.createDataSet(name.c_str(), *dataType, dp);
261 }
catch (H5::GroupIException&) {
262 dataset = loc.openDataSet(name.c_str());
264 dataset.write(v.data(), *dataType);
268 const std::string& name)
const {
270 hsize_t dims[1] = {(hsize_t)v.size()};
272 std::vector<const char*> c_str_copy;
273 c_str_copy.reserve(v.size());
274 for (
const std::string& s : v) {
275 c_str_copy.push_back(s.c_str());
279 H5::DataSpace dp(1, dims);
281 dataset = loc.createDataSet(name.c_str(), *dataType, dp);
282 }
catch (H5::GroupIException&) {
283 dataset = loc.openDataSet(name.c_str());
285 dataset.write(c_str_copy.data(), *dataType);