-// gdcmObject.cxx
-//-----------------------------------------------------------------------------
+/*=========================================================================
+
+ Program: gdcm
+ Module: $RCSfile: gdcmObject.cxx,v $
+ Language: C++
+ Date: $Date: 2004/06/20 18:08:48 $
+ Version: $Revision: 1.20 $
+
+ 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 Seaquence depth level
*/
-gdcmObject::gdcmObject(ListTag::iterator begin,ListTag::iterator end)
-{
- beginObj=begin;
- endObj=end;
-
- if(beginObj==endObj)
- dbg.Verbose(0, "gdcmObject::gdcmObject empty list");
+
+gdcmObject::gdcmObject(TagDocEntryHT *ptagHT, int depth)
+ : gdcmSQItem (depth) {
+ this->ptagHT = ptagHT;
}
+
/**
* \ingroup gdcmObject
* \brief Canonical destructor.
*/
-gdcmObject::~gdcmObject(void)
-{
+gdcmObject::~gdcmObject(void) {
}
-//-----------------------------------------------------------------------------
-// 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)
-{
- TagHeaderEntryHT HT;
-
- for(ListTag::iterator it=beginObj;it!=endObj;++it)
- {
- HT.insert( PairHT( (*it)->GetKey(),(*it)) );
+TagDocEntryHT gdcmObject::GetEntry(void) {
+ TagDocEntryHT HT;
+ docEntries=GetDocEntries();
+ for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i) {
+ HT[(*i)->GetKey()]=*i;
}
-
return(HT);
}
/**
* \ingroup gdcmObject
- * \brief Get all entries in a list
+ * \brief Builds a Chained List containing
+ * pointers to all Header Entries (i.e Dicom Element)
+ * related to this 'object'
* @return
- */
-ListTag gdcmObject::GetListEntry(void)
-{
- ListTag list;
-
- for(ListTag::iterator it=beginObj;it!=endObj;++it)
- {
- list.push_back(*it);
- }
-
- return(list);
+ */
+
+ // FIXME : what was it used for ?!?
+ /*
+ListTag gdcmObject::GetListEntry(void) {
+ return(GetDocEntries());
}
+*/
//-----------------------------------------------------------------------------
// Protected
+/**
+ * \ingroup gdcmObject
+ * \brief add the 'Object' related Dicom Elements to the listEntries
+ * of a partially created DICOMDIR
+ */
+void gdcmObject::FillObject(std::list<gdcmElement> elemList) {
+
+ // FillObject rempli le SQItem qui sera accroche au bon endroit
+ std::list<gdcmElement>::iterator it;
+ guint16 tmpGr,tmpEl;
+ gdcmDictEntry *dictEntry;
+ gdcmValEntry *entry;
+
+ //gdcmSQItem *s = new gdcmSQItem;
+
+ // for all the Elements found in they own part of the DicomDir dict.
+ for(it=elemList.begin();it!=elemList.end();++it)
+ {
+ 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());
+ }
+ //docEntries->insert(debInsertion ,entry); // ??? // add at the begining of the Patient list
+ AddDocEntry(entry);
+ }
+}
//-----------------------------------------------------------------------------
// Private