66 template<
typename DATATYPE>
132 template<
typename T1,
typename T2>
138 vect = (
char*)malloc(strlen(rs));
139 if( vect == NULL)
return false;
145 vect = std::string(rs);
150 std::istringstream iss(rs);
152 return !(iss.bad() || iss.fail());
156 std::istringstream iss(rs);
158 return !(iss.bad() || iss.fail());
162 std::istringstream iss(rs);
164 return !(iss.bad() || iss.fail());
168 std::istringstream iss(rs);
170 return !(iss.bad() || iss.fail());
174 std::istringstream iss(rs);
176 return !(iss.bad() || iss.fail());
180 std::istringstream iss(rs);
182 return !(iss.bad() || iss.fail());
186 std::istringstream iss(rs);
188 return !(iss.bad() || iss.fail());
192 std::istringstream iss(rs);
194 return !(iss.bad() || iss.fail());
197 std::istringstream iss(rs);
199 return !(iss.bad() || iss.fail());
203 std::istringstream iss(rs);
205 return !(iss.bad() || iss.fail());
209 std::istringstream iss(rs);
211 return !(iss.bad() || iss.fail());
215 std::istringstream iss(rs);
217 return !(iss.bad() || iss.fail());
230 template<
typename Hdf5FilePolicy>
250 unsigned int fm = H5F_ACC_RDONLY);
260 :H5::H5File(
"",H5F_ACC_RDONLY)
263 err <<
"runtime error: you must not use StDataHdf5() " 264 "constructor without arguments!";
291 return _exceptionFlag;
305 return _existsAttribute(key,
"");
319 void setValue(
const std::string& key,
const T& value);
321 void setValue(
const std::string& key,
const std::string& value);
322 void setValue(
const std::string& key,
const char* value)
324 setValue(key,std::string(value));
328 setValue(std::string(key),std::string(value));
330 void setValue(
const char* key,
const std::string& value)
332 setValue(std::string(key),std::string(value));
334 void setValue(
const std::string& key,
const unsigned int& value);
335 void setValue(
const std::string& key,
const unsigned long& value);
349 const std::string& key,
350 const std::vector<std::string>::iterator& arrBegin,
353 const std::string& key,
354 const std::vector<std::string>::const_iterator& arrBegin,
357 template<
typename ForwardIter>
358 void setArray(
const std::string& key,
359 const ForwardIter& arrBegin,
375 template<
typename ForwardIter>
376 void setFVArray(
const std::string& key,
377 const ForwardIter& arrBegin,
396 void getValue(
const std::string& key, T& value)
const;
398 void getValue(
const std::string& key, std::string& value)
const;
410 size_t getArraySize( std::string key)
const;
411 size_t getAttrArraySize( std::string key)
const;
424 size_t getFVArraySize( std::string key)
const;
448 const std::string& key,
449 const std::vector<std::string>::iterator& arrBegin,
450 int containerSize=-1)
const;
451 template<
typename ForwardIter>
452 void getArray(
const std::string& key,
const ForwardIter& arrBegin,
453 int containerSize=-1)
const;
475 template<
typename ForwardIter>
476 void getFVArray(
const std::string& key,
const ForwardIter& arrBegin,
477 int containerSize=-1)
const;
481 template<
typename DataT>
483 _writeAttribute(
const DataT& val,
484 const std::string& attName,
485 const std::string& dsName);
487 template<
typename DataT>
489 _readAttribute( DataT& val,
490 const std::string& attName,
491 const std::string& dsName)
const;
494 const std::string &dsName)
498 hid_t dataset = _getDataSet(dsName);
499 int status = H5Adelete(dataset, attName.c_str());
504 e <<
"Could not delete Attribute " 505 << attName <<
" from dataset " 512 hid_t group = _getGroup(dataSetGroup(attName));
513 int status = H5Adelete(group, dataSetName(attName).c_str());
518 e <<
"Could not delete global Attribute " << attName;
525 const std::string &dsName)
const 530 hid_t attribute = _getAttribute(attName, dsName);
545 hid_t dataset = _getDataSet(absName);
556 hid_t group = H5Gopen2(
557 this->getLocId(), groupName.c_str(), H5P_DEFAULT);
561 e <<
"Could not open group " << group;
569 hid_t dataset = H5Dopen2(
570 this->getLocId(), dsName.c_str(), H5P_DEFAULT);
574 e <<
"Could not open dataset " << dsName;
581 const std::string &dsName)
const 584 hid_t attribute = -1;
591 dataset = _getDataSet(dsName);
592 attribute = H5Aopen_name(dataset, attName.c_str());
602 e <<
"Could not retrieve attribute " 603 << attName <<
" from dataset " 604 << dsName <<
". Attribute " << attName <<
" doesn't exist!";
613 group = _getGroup(dataSetGroup(attName));
614 attribute = H5Aopen_name(group, dataSetName(attName).c_str());
624 e <<
"Could not retrieve global attribute " << attName;
634 if (dataSetDescriptor.find(
"/") == std::string::npos)
636 return std::string(
"/");
640 return dataSetDescriptor.substr(0,
641 dataSetDescriptor.rfind(
"/") + 1);
644 std::string
dataSetName(
const std::string& dataSetDescriptor)
const 647 if (dataSetDescriptor.size() == 0 ||
648 dataSetDescriptor[dataSetDescriptor.size() - 1] ==
'/')
650 return std::string(
"");
654 if (dataSetDescriptor.find(
"/") == std::string::npos)
656 return dataSetDescriptor;
660 return dataSetDescriptor.substr(dataSetDescriptor.rfind(
"/") + 1);
665 std::vector<std::string> groupHierarchy;
668 size_t delim = beginPos;
669 while(beginPos < groupName.size())
671 delim = groupName.find(
"/", beginPos);
672 std::string group = groupName.substr(0, delim + 1);
673 groupHierarchy.push_back(group);
674 beginPos = delim + 1;
678 for(std::vector<std::string>::const_iterator
679 groupIt = groupHierarchy.begin();
680 groupIt != groupHierarchy.end();
683 if(!_existsGroup(groupIt->c_str()))
685 hid_t group = H5Gcreate2(
686 this->getLocId(), groupIt->c_str(), H5P_DEFAULT,
687 H5P_DEFAULT, H5P_DEFAULT);
691 e <<
"Could not create group: '" 692 << groupIt->c_str() <<
"'.\n";
705 hid_t group = _getGroup(groupName);
715 std::valarray<double>
const &att,
bool& value,
size_t index)
717 value =
static_cast<bool>(att[index]);
721 std::valarray<double>
const &att,
char& value,
size_t index)
723 value =
static_cast<char>(att[index]);
727 std::valarray<double>
const &att,
short& value,
size_t index)
729 value =
static_cast<short>(att[index]);
733 std::valarray<double>
const &att,
int& value,
long index)
735 value =
static_cast<int>(att[index]);
739 std::valarray<double>
const &att,
unsigned int& value,
long index)
741 value =
static_cast<unsigned int>(att[index]);
745 std::valarray<double>
const &att,
float& value,
long index)
747 value =
static_cast<float>(att[index]);
751 std::valarray<double>
const &att,
double& value,
long index)
753 value =
static_cast<double>(att[index]);
762 return (hsize_t)vect.size();
788 return (hsize_t)vect.size();
792 inline void _setVecSize( std::valarray<T>& vect,
size_t size)
const 813 return (hsize_t)vect.size();
863 std::string errorMsg;
865 #if ! (defined(_WIN32) || defined(__APPLE__)) 871 stream = open_memstream( &bp, &size);
873 H5Eprint2(H5E_DEFAULT, stream);
876 while( (ch = static_cast<char>(fgetc( stream))) != EOF)
886 Buffer(
const hid_t& dataSetType,
const hsize_t size);
891 inline void castToType(std::string *dest);
894 inline void castToType( T* dest);
897 template<
typename T1,
typename T2>
898 inline void _doRealCast( T1* dest);
900 H5T_class_t _dataSetClass;
902 H5T_sign_t _isSigned;
904 size_t _sizeOfbufferType;
917 std::string _fileName;
918 std::string _varName;
927 #include "StDataHdf5.icc" const char * _getVecData(const std::string &vect) const
bool exceptionFlag() const
bool _existsGroup(const std::string &groupName) const
void setValue(const char *key, const std::string &value)
const T * _getVecData(const T &vect) const
static void getValue(std::valarray< double > const &att, double &value, long index)
hid_t _getAttribute(const std::string &attName, const std::string &dsName) const
T * _getVecData2(T &vect) const
void _setVecSize(std::vector< T > &vect, size_t size) const
const T * _getVecData(const std::valarray< T > &vect) const
std::string dataSetGroup(const std::string &dataSetDescriptor) const
void setValue(const char *key, const char *value)
void _setVecSize(T &, size_t) const
static void getValue(std::valarray< double > const &att, float &value, long index)
std::string dataSetName(const std::string &dataSetDescriptor) const
bool _setVecData(T1 &, T2)
bool _existsDataSet(const std::string &absName) const
static void getValue(std::valarray< double > const &att, char &value, size_t index)
static void getValue(std::valarray< double > const &att, int &value, long index)
const char * _getVecData(const char *&vect) const
StDataHdf5Templ()
this constructor is only for compilation of some template classes.
T * _getVecData2(std::vector< T > &vect) const
void setValue(const std::string &key, const char *value)
T * _getVecData2(std::valarray< T > &vect) const
hsize_t _getVecSize(const std::vector< T > &vect) const
hsize_t _getVecSize(const T &) const
void _createGroup(const std::string &groupName)
bool valueExists(const std::string &key) const
check wether a value exists for requested key
const T * _getVecData(const std::vector< T > &vect) const
void _setVecSize(std::string &vect, size_t size) const
bool _existsAttribute(const std::string &attName, const std::string &dsName) const
static void getValue(std::valarray< double > const &att, short &value, size_t index)
std::string _getErrorMsg()
void _deleteAttribute(const std::string &attName, const std::string &dsName)
hid_t _getGroup(const std::string &groupName) const
hid_t _getDataSet(const std::string &dsName) const
hsize_t _getVecSize(const std::string &vect) const
void setExceptionFlag(bool f)
Specify, if getValue() should throw expcetions for unknown keys.
void _setVecSize(std::valarray< T > &vect, size_t size) const
static void getValue(std::valarray< double > const &att, bool &value, size_t index)
StDataHdf5Templ< H5::H5File > StDataHdf5
static void getValue(std::valarray< double > const &att, unsigned int &value, long index)
hsize_t _getVecSize(const std::valarray< T > &vect) const