193 const std::string& name)
const {
197 H5::DataSet dataset = loc.openDataSet(name);
199 H5::DataSpace dp = dataset.getSpace();
202 dp.getSimpleExtentDims(dims,
nullptr);
204 hsize_t matRows = dims[0];
205 hsize_t matCols = dims[1];
207 matrix.derived().resize(matRows, matCols);
208 if (matrix.size() == 0) {
212 hsize_t matColSize = matrix.derived().outerStride();
214 hsize_t fileRows = matCols;
216 hsize_t fStride[2] = {1, fileRows};
217 hsize_t fCount[2] = {1, 1};
218 hsize_t fBlock[2] = {1, fileRows};
220 hsize_t mStride[2] = {matColSize, 1};
221 hsize_t mCount[2] = {1, 1};
222 hsize_t mBlock[2] = {matCols, 1};
224 hsize_t mDim[2] = {matCols, matColSize};
225 H5::DataSpace mspace(2, mDim);
227 for (hsize_t i = 0; i < matRows; i++) {
228 hsize_t fStart[2] = {i, 0};
229 hsize_t mStart[2] = {0, i};
230 dp.selectHyperslab(H5S_SELECT_SET, fCount, fStart, fStride, fBlock);
231 mspace.selectHyperslab(H5S_SELECT_SET, mCount, mStart, mStride, mBlock);
232 dataset.read(matrix.derived().data(), *dataType, mspace, dp);
237 typename std::enable_if<std::is_fundamental<T>::value>::type
ReadData(
238 const CptLoc& loc, std::vector<T>& v,
const std::string& name)
const {
240 H5::DataSet dataset = loc.openDataSet(name);
241 H5::DataSpace dp = dataset.getSpace();
246 dp.getSimpleExtentDims(dims,
nullptr);
253 dataset.read(&(v[0]), *dataType);
254 }
catch (H5::Exception&) {
255 std::stringstream message;
256 message <<
"Could not read " << name <<
" from " <<
loc_.getFileName()
257 <<
":" <<
path_ << std::endl;
258 throw std::runtime_error(message.str());
263 const std::string& name)
const {
265 H5::DataSet dataset = loc.openDataSet(name);
266 H5::DataSpace dp = dataset.getSpace();
271 dp.getSimpleExtentDims(dims,
nullptr);
273 std::vector<char*> temp(dims[0]);
278 dataset.read(temp.data(), *dataType);
279 }
catch (H5::Exception&) {
280 std::stringstream message;
281 message <<
"Could not read " << name <<
" from " <<
loc_.getFileName()
282 <<
":" <<
path_ << std::endl;
283 throw std::runtime_error(message.str());
286 for (
char* s : temp) {
287 v.push_back(std::string(s));