-// 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"
+//-----------------------------------------------------------------------------
+/**
+ * \ingroup gdcmObject
+ * \brief Constructor
+ *
+ * @param ptagHT pointer to the HTable (gdcmObject needs it
+ * to build the gdcmDocEntries)
+ * @param depth Sequence depth level
+ */
+
+gdcmObject::gdcmObject(TagDocEntryHT *ptagHT, int depth)
+ : gdcmSQItem (depth)
+{
+ PtagHT = ptagHT;
+}
-/*
-gdcmObject::gdcmObject() {
+/**
+ * \ingroup gdcmObject
+ * \brief Canonical destructor.
+ */
+gdcmObject::~gdcmObject()
+{
}
-gdcmObject::~gdcmObject() {
-}
-*/
+//-----------------------------------------------------------------------------
+// Public
-std::string gdcmObject::GetEntryByNumber(guint16 group, guint16 element) {
- guint16 gr, el;
- ListTag::iterator deb , fin;
- deb = beginObj;
- fin = endObj;
-
- ListTag::iterator i=deb;
-
- if (deb == fin) cout << "Big Trouble : Empty List!" <<endl;
- while ( i!= fin) {
- gr = (*(*i)).GetGroup();
- el = (*(*i)).GetElement();
- if ( gr==group && el==element)
- return (*(*i)).GetValue();;
- ++i;
- }
- return GDCM_UNFOUND;
+
+/**
+ * \ingroup gdcmObject
+ * \brief Builds a hash table (multimap) containing
+ * pointers to all Header Entries (i.e Dicom Element)
+ * related to this 'object'
+ * @return
+ */
+TagDocEntryHT gdcmObject::GetEntry()
+{
+ TagDocEntryHT HT;
+ docEntries=GetDocEntries();
+ for(ListDocEntry::iterator i = docEntries.begin();
+ i != docEntries.end(); ++i)
+ {
+ HT[(*i)->GetKey()]=*i;
+ }
+ return HT;
}
+//-----------------------------------------------------------------------------
+// Protected
+/**
+ * \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::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());
-}
+ std::list<gdcmElement>::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)
+ {
+ 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);
+ }
+}