From: jpr Date: Wed, 1 Mar 2006 09:29:29 +0000 (+0000) Subject: add bool DataEntry::GetDSValue(std::vector &valueVector) method. X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=4c9538820452e8c3c68778df6c28ca084df6e00c;p=gdcm.git add bool DataEntry::GetDSValue(std::vector &valueVector) method. /** * \brief Gets a std::vector holding the value(s) of a DS DataEntry * @param valueVector std::vector of value(s) * \return false if VR not "DS" or DataEntry empty */ Thx to Vicent Daanen for suggesting. --- diff --git a/src/gdcmDataEntry.cxx b/src/gdcmDataEntry.cxx index d183d936..121c62c9 100644 --- a/src/gdcmDataEntry.cxx +++ b/src/gdcmDataEntry.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDataEntry.cxx,v $ Language: C++ - Date: $Date: 2006/02/07 12:37:19 $ - Version: $Revision: 1.31 $ + Date: $Date: 2006/03/01 09:29:29 $ + Version: $Revision: 1.32 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -168,13 +168,13 @@ void DataEntry::SetValue(const uint32_t &id, const double &val) * \brief returns, as a double (?!?) one of the values * (when entry is multivaluated), identified by its index. * Returns 0.0 if index is wrong - * FIXME : warn the user there was a problem ! * @param id id */ double DataEntry::GetValue(const uint32_t &id) const { if( !BinArea ) { + /// \todo warn the user there was a problem ! gdcmErrorMacro("BinArea not set. Can't get the value"); return 0.0; } @@ -182,14 +182,17 @@ double DataEntry::GetValue(const uint32_t &id) const uint32_t count = GetValueCount(); if( id > count ) { - gdcmErrorMacro("Index (" << id << ")is greater than the data size"); + gdcmErrorMacro("Index (" << id << ") is greater than the data size"); return 0.0; } - // FIX the API : user *knows* that entry contains a US - // and he receives a double ?!? + /// \todo FIX the API : user *knows* that entry contains a US + /// and he receives a double ?!? const VRKey &vr = GetVR(); + /// \todo FIX the API : user *knows* that entry contains a US, + /// the method is supposed to return a double + /// but sends a US ?!? if( vr == "US" || vr == "SS" ) return ((uint16_t *)BinArea)[id]; else if( vr == "UL" || vr == "SL" ) @@ -200,6 +203,7 @@ double DataEntry::GetValue(const uint32_t &id) const return ((double *)BinArea)[id]; else if( Global::GetVR()->IsVROfStringRepresentable(vr) ) { + // this is for VR = "DS", ... if( GetLength() ) { // Don't use std::string to accelerate processing @@ -322,6 +326,32 @@ uint32_t DataEntry::GetValueCount( ) const } return GetLength(); } + +/** + * \brief Gets a std::vector holding the value(s) of a DS DataEntry + * @param valueVector std::vector of value(s) + * \return false if VR not "DS" or DataEntry empty + */ + bool DataEntry::GetDSValue(std::vector &valueVector) + { + /// \todo rewrite the whole method, in order *not to use* std::string ! + std::vector tokens; + + if (GetVR() != "DS") // never trust a user ! + return false; + + Util::Tokenize ( GetString().c_str(), tokens, "\\" ); + + int nbValues= tokens.size(); + if (nbValues == 0) + return false; + + for (int loop=0; loop // for GetDSValue #include namespace gdcm @@ -62,7 +63,7 @@ public: void SetValue(const uint32_t &id,const double &val); double GetValue(const uint32_t &id) const; - uint32_t GetValueCount(void) const; + uint32_t GetValueCount() const; bool IsValueCountValid() const; void SetString(std::string const &value); @@ -120,14 +121,16 @@ public: static void SetMaxSizePrintEntry(const uint32_t &size) { MaxSizePrintEntry = size; } + bool GetDSValue(std::vector &valueVector); + protected: DataEntry(DictEntry *e); DataEntry(DocEntry *d); ~DataEntry(); // Methods : - void NewBinArea(void); - void DeleteBinArea(void); + void NewBinArea( ); + void DeleteBinArea( ); // Members : /// \brief memory area to hold 'non std::string' representable values