X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDataEntry.cxx;h=c5be15df66e9f811214c995052b298e3c9fa9cb4;hb=c96275c8881429e3d6448fc7c16a2c324ffc4883;hp=a6d64ce4113c6c2f8999d7c140c3a2951048b3b1;hpb=5a47474d970952e2560191bd81e502e87dab0aca;p=gdcm.git diff --git a/src/gdcmDataEntry.cxx b/src/gdcmDataEntry.cxx index a6d64ce4..c5be15df 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/03 16:37:48 $ - Version: $Revision: 1.30 $ + Date: $Date: 2006/03/13 14:44:07 $ + Version: $Revision: 1.33 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -168,28 +168,31 @@ 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 ) { - gdcmErrorMacro("BinArea not set. Can't get the value"); + /// \todo warn the user there was a problem ! + gdcmErrorMacro("BinArea not set" << std::hex << GetGroup() << " " << GetElement() << " Can't get the value"); return 0.0; } 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 user is *not* informed ! gdcmDebugMacro ("Nothing was loaded, but we need to skip space on disc. " << "Length =" << l << " for " << GetKey() ); - fp->seekp(l, std::ios::cur); + fp->seekp(l, std::ios::cur); // At Write time, for unloaded elems } } // to avoid gdcm to propagate oddities // (length was already modified) if (l%2) - fp->seekp(1, std::ios::cur); + fp->seekp(1, std::ios::cur); // At Write time, for non even length elems } /**