1
0
mirror of https://github.com/aportelli/LatAnalyze.git synced 2024-11-14 01:45:35 +00:00

Hdf5File: Added some code to sanitize group names

Currently you can pass in relative paths with slashes in, and this
upsets HDF5's createGroup function.
This commit is contained in:
Matt Spraggs 2015-10-01 22:39:22 +01:00
parent 9c52fa104b
commit 134f8245ff
2 changed files with 20 additions and 3 deletions

View File

@ -63,7 +63,7 @@ void Hdf5File::save(const DMat &m, const string &name)
DataSpace dataSpace(2, dim), attrSpace(1, &attrDim); DataSpace dataSpace(2, dim), attrSpace(1, &attrDim);
group = h5File_->createGroup(name.c_str()); group = h5File_->createGroup(name.c_str() + nameOffset(name));
attr = group.createAttribute("type", PredType::NATIVE_SHORT, attrSpace); attr = group.createAttribute("type", PredType::NATIVE_SHORT, attrSpace);
attr.write(PredType::NATIVE_SHORT, &dMatType); attr.write(PredType::NATIVE_SHORT, &dMatType);
dataset = group.createDataSet("data", PredType::NATIVE_DOUBLE, dataSpace); dataset = group.createDataSet("data", PredType::NATIVE_DOUBLE, dataSpace);
@ -82,7 +82,7 @@ void Hdf5File::save(const DMatSample &sample, const string &name)
const long int nSample = sample.size(); const long int nSample = sample.size();
string datasetName; string datasetName;
group = h5File_->createGroup(name.c_str()); group = h5File_->createGroup(name.c_str() + nameOffset(name));
attr = group.createAttribute("type", PredType::NATIVE_SHORT, attrSpace); attr = group.createAttribute("type", PredType::NATIVE_SHORT, attrSpace);
attr.write(PredType::NATIVE_SHORT, &dMatSampleType); attr.write(PredType::NATIVE_SHORT, &dMatSampleType);
attr = group.createAttribute("nSample", PredType::NATIVE_LONG, attrSpace); attr = group.createAttribute("nSample", PredType::NATIVE_LONG, attrSpace);
@ -105,7 +105,7 @@ void Hdf5File::save(const RandGenState &state, const string &name)
hsize_t attrDim = 1; hsize_t attrDim = 1;
DataSpace dataSpace(1, &dim), attrSpace(1, &attrDim); DataSpace dataSpace(1, &dim), attrSpace(1, &attrDim);
group = h5File_->createGroup(name.c_str()); group = h5File_->createGroup(name.c_str() + nameOffset(name));
attr = group.createAttribute("type", PredType::NATIVE_SHORT, attrSpace); attr = group.createAttribute("type", PredType::NATIVE_SHORT, attrSpace);
attr.write(PredType::NATIVE_SHORT, &rgStateType); attr.write(PredType::NATIVE_SHORT, &rgStateType);
dataset = group.createDataSet("data", PredType::NATIVE_DOUBLE, dataSpace); dataset = group.createDataSet("data", PredType::NATIVE_DOUBLE, dataSpace);
@ -314,3 +314,18 @@ string Hdf5File::load(const string &name)
return ""; return "";
} }
} }
size_t Hdf5File::nameOffset(const string& name)
{
size_t ret = 0;
string badChars = "/";
for (auto c : badChars) {
size_t pos = name.rfind(c);
if (pos != string::npos and pos > ret) {
ret = pos;
}
}
return ret;
}

View File

@ -62,6 +62,8 @@ private:
void load(DMat &m, const H5NS::DataSet &d); void load(DMat &m, const H5NS::DataSet &d);
void load(DMatSample &s, const H5NS::DataSet &d); void load(DMatSample &s, const H5NS::DataSet &d);
void load(RandGenState &state, const H5NS::DataSet &d); void load(RandGenState &state, const H5NS::DataSet &d);
static size_t nameOffset(const std::string& name);
private: private:
// file name // file name
std::unique_ptr<H5NS::H5File> h5File_{nullptr}; std::unique_ptr<H5NS::H5File> h5File_{nullptr};