X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmObject.cxx;h=d5f2848f5073881b54c00d26458b3aaad22322aa;hb=7815fe9dc3532b716dc478ca0f255263f99d296f;hp=82ff513148fd592804274be4f192f2b9d4afea78;hpb=a23d3b0e36743664f22f42269224f305ccf50fdb;p=gdcm.git diff --git a/src/gdcmObject.cxx b/src/gdcmObject.cxx index 82ff5131..d5f2848f 100644 --- a/src/gdcmObject.cxx +++ b/src/gdcmObject.cxx @@ -1,124 +1,123 @@ -// gdcmObject.cxx -//----------------------------------------------------------------------------- +/*========================================================================= + + Program: gdcm + Module: $RCSfile: gdcmObject.cxx,v $ + Language: C++ + Date: $Date: 2004/08/01 00:59:21 $ + Version: $Revision: 1.24 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + #include "gdcmObject.h" -#include "gdcmUtil.h" +#include "gdcmGlobal.h" +#include "gdcmDebug.h" +#include "gdcmValEntry.h" //----------------------------------------------------------------------------- -// Constructor / Destructor /** * \ingroup gdcmObject - * \brief - * @param begin iterator of begin for the object - * @param end iterator of end for the object + * \brief Constructor + * + * @param ptagHT pointer to the HTable (gdcmObject needs it + * to build the gdcmDocEntries) + * @param depth Sequence depth level */ -gdcmObject::gdcmObject(ListTag::iterator begin,ListTag::iterator end) + +gdcmObject::gdcmObject(TagDocEntryHT *ptagHT, int depth) + : gdcmSQItem (depth) { - beginObj=begin; - endObj=end; - - if(beginObj==endObj) - dbg.Verbose(0, "gdcmObject::gdcmObject empty list"); + PtagHT = ptagHT; } + /** * \ingroup gdcmObject * \brief Canonical destructor. */ -gdcmObject::~gdcmObject(void) +gdcmObject::~gdcmObject() { } -//----------------------------------------------------------------------------- -// Print -/** - * \ingroup gdcmObject - * \brief Prints the Object - * @return - */ -void gdcmObject::Print(std::ostream &os) -{ - if(printLevel>=0) - { - for(ListTag::iterator i=beginObj;i!=endObj;++i) - { - (*i)->SetPrintLevel(printLevel); - (*i)->Print(os); - } - } -} + //----------------------------------------------------------------------------- // Public -/** - * \ingroup gdcmObject - * \brief Get an entry by number - * @return - */ -std::string gdcmObject::GetEntryByNumber(guint16 group, guint16 element) -{ - for(ListTag::iterator i=beginObj;i!=endObj;++i) - { - if ( (*i)->GetGroup()==group && (*i)->GetElement()==element) - return (*i)->GetValue(); - } - - return GDCM_UNFOUND; -} -/** - * \ingroup gdcmObject - * \brief Get an entry by name - * @param name name of the searched element. - * @return - */ -std::string gdcmObject::GetEntryByName(TagName name) -{ - gdcmDict *PubDict=gdcmGlobal::GetDicts()->GetDefaultPubDict(); - gdcmDictEntry *dictEntry = (*PubDict).GetDictEntryByName(name); - - if( dictEntry == NULL) - return GDCM_UNFOUND; - return GetEntryByNumber(dictEntry->GetGroup(),dictEntry->GetElement()); -} /** * \ingroup gdcmObject - * \brief Get all entries in a hash table + * \brief Builds a hash table (multimap) containing + * pointers to all Header Entries (i.e Dicom Element) + * related to this 'object' * @return */ -TagHeaderEntryHT gdcmObject::GetEntry(void) +TagDocEntryHT gdcmObject::GetEntry() { - TagHeaderEntryHT HT; - - for(ListTag::iterator it=beginObj;it!=endObj;++it) + TagDocEntryHT HT; + docEntries=GetDocEntries(); + for(ListDocEntry::iterator i = docEntries.begin(); + i != docEntries.end(); ++i) { - HT.insert( PairHT( (*it)->GetKey(),(*it)) ); + HT[(*i)->GetKey()]=*i; } - - return(HT); + return HT; } +//----------------------------------------------------------------------------- +// Protected /** - * \ingroup gdcmObject - * \brief Get all entries in a list - * @return - */ -ListTag gdcmObject::GetListEntry(void) + * \brief add the 'Object' related Dicom Elements to the listEntries + * of a partially created DICOMDIR + */ +void gdcmObject::FillObject(std::list elemList) { - ListTag list; - - for(ListTag::iterator it=beginObj;it!=endObj;++it) + // FillObject rempli le SQItem qui sera accroche au bon endroit + + std::list::iterator it; + uint16_t tmpGr,tmpEl; + gdcmDictEntry *dictEntry; + gdcmValEntry *entry; + + // for all the Elements found in they own part of the DicomDir dict. + for(it = elemList.begin(); it != elemList.end(); ++it) { - list.push_back(*it); - } - - return(list); -} - -//----------------------------------------------------------------------------- -// Protected - -//----------------------------------------------------------------------------- -// Private - -//----------------------------------------------------------------------------- + tmpGr = it->group; + tmpEl = it->elem; + dictEntry = gdcmGlobal::GetDicts()->GetDefaultPubDict()->GetDictEntryByNumber(tmpGr,tmpEl); + entry = new gdcmValEntry(dictEntry); + entry->SetOffset(0); // just to avoid further missprinting + entry->SetValue(it->value); + + // dealing with value length ... + + if(dictEntry->GetGroup()==0xfffe) + { + entry->SetLength(entry->GetValue().length()); + } + else if( dictEntry->GetVR() == "UL" || dictEntry->GetVR() == "SL" ) + { + entry->SetLength(4); + } + else if( dictEntry->GetVR() == "US" || dictEntry->GetVR() == "SS" ) + { + entry->SetLength(2); + } + else if( dictEntry->GetVR() == "SQ" ) + { + entry->SetLength(0xffffffff); + } + else + { + entry->SetLength(entry->GetValue().length()); + } + AddDocEntry(entry); + } +}