X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDataEntry.cxx;h=e318600b245f02cd530f2854b4c410b92189823d;hb=43c19975c906980fc69239e5777feab7da9298c7;hp=1fdb47e2d7563e75b3e3212f8f3aab257961c262;hpb=af288a85afcf018ea938b95dc5c87284ee9b83d6;p=gdcm.git diff --git a/src/gdcmDataEntry.cxx b/src/gdcmDataEntry.cxx index 1fdb47e2..e318600b 100644 --- a/src/gdcmDataEntry.cxx +++ b/src/gdcmDataEntry.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDataEntry.cxx,v $ Language: C++ - Date: $Date: 2005/11/07 09:46:36 $ - Version: $Revision: 1.19 $ + Date: $Date: 2005/12/09 12:23:38 $ + Version: $Revision: 1.25 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -76,6 +76,8 @@ DataEntry::~DataEntry () // Public /** * \brief Sets the value (non string) of the current Dicom Header Entry + * @param area area + * @param self self */ void DataEntry::SetBinArea( uint8_t *area, bool self ) { @@ -88,6 +90,8 @@ void DataEntry::SetBinArea( uint8_t *area, bool self ) } /** * \brief Inserts the value (non string) into the current Dicom Header Entry + * @param area area + * @param length length */ void DataEntry::CopyBinArea( uint8_t *area, uint32_t length ) { @@ -107,6 +111,11 @@ void DataEntry::CopyBinArea( uint8_t *area, uint32_t length ) } } +/** + * \brief Inserts the value (non string) into the current Dicom Header Entry + * @param id id + * @param val val + */ void DataEntry::SetValue(const uint32_t &id, const double &val) { if( !BinArea ) @@ -151,9 +160,10 @@ 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 ! + * (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 { @@ -234,17 +244,19 @@ double DataEntry::GetValue(const uint32_t &id) const */ bool DataEntry::IsValueCountValid() const { - bool valid; uint32_t vm; const std::string &strVM = GetVM(); uint32_t vc = GetValueCount(); + bool valid = vc == 0; + if( valid ) + return true; // FIXME : what shall we do with VM = "2-n", "3-n", etc if( strVM == "1-n" ) { // make sure there is at least one ??? FIXME - valid = vc >= 1 || vc == 0; + valid = vc >= 1; } else { @@ -269,7 +281,7 @@ bool DataEntry::IsValueCountValid() const // Problem : entry type may depend on the modality and/or the Sequence // it's embedded in ! // (Get the information in the 'Conformance Statements' ...) - valid = vc == vm || vc == 0; + valid = vc == vm; } return valid; } @@ -284,14 +296,15 @@ uint32_t DataEntry::GetValueCount( ) const return GetLength()/sizeof(uint16_t); else if( vr == "UL" || vr == "SL" ) return GetLength()/sizeof(uint32_t); - else if( vr == "FL" ) - return GetLength()/sizeof(float); + else if( vr == "FL" || vr == "OF" ) + return GetLength()/4 ; // FL has a *4* length! sizeof(float); else if( vr == "FD" ) - return GetLength()/sizeof(double); + return GetLength()/8; // FD has a *8* length! sizeof(double); else if( Global::GetVR()->IsVROfStringRepresentable(vr) ) { // Some element in DICOM are allowed to be empty - if( !GetLength() ) return 0; + if( !GetLength() ) + return 0; // Don't use std::string to accelerate processing uint32_t count = 1; for(uint32_t i=0;iBinArea,entry->GetLength()); } } + /** * \brief Writes the 'value' area of a DataEntry * @param fp already open ofstream pointer @@ -519,6 +534,7 @@ void DataEntry::WriteContent(std::ofstream *fp, FileType filetype) } case 2: { +gdcmDebugMacro ("AtomicLength = 2 found; lgt =" << l); uint16_t *data16 = (uint16_t *)data; for(i=0;i 0 ) BinArea = new uint8_t[GetLength()]; SelfArea = true; } - +/// \brief Removes the BinArea, if owned by the DataEntry void DataEntry::DeleteBinArea(void) { if (BinArea && SelfArea)