]> Creatis software - gdcm.git/blobdiff - src/gdcmObject.cxx
Forget this one
[gdcm.git] / src / gdcmObject.cxx
index 93942bdd8b0f314b59579259938326082ddd993c..25cba3b529467488347a2d931d5401dbc93eed43 100644 (file)
 // gdcmObject.cxx
 //-----------------------------------------------------------------------------
 #include "gdcmObject.h"
-#include "gdcmUtil.h"
+#include "gdcmGlobal.h"
+#include "gdcmDebug.h"
+#include "gdcmValEntry.h"
 
 //-----------------------------------------------------------------------------
-// Constructor / Destructor
-gdcmObject::gdcmObject(ListTag::iterator begin,ListTag::iterator end) 
-{
-   beginObj=begin;
-   endObj=end;
-
-   if(beginObj==endObj)
-      dbg.Verbose(0, "gdcmObject::gdcmObject empty list");
+/**
+ * \ingroup gdcmObject
+ * \brief  Constructor 
+ *          
+ * @param ptagHT pointer to the HTable (gdcmObject needs it 
+ *               to build the gdcmDocEntries)
+ * @param depth Seaquence depth level
+ */
+  
+gdcmObject::gdcmObject(TagDocEntryHT *ptagHT, int depth) 
+          : gdcmSQItem (depth) {
+   this->ptagHT = ptagHT;
 }
 
-gdcmObject::~gdcmObject(void) 
-{
-}
 
-//-----------------------------------------------------------------------------
-// Print
-void gdcmObject::Print(std::ostream &os)
-{
-   if(printLevel>=0)
-   {
-      for(ListTag::iterator i=beginObj;i!=endObj;++i)
-      {
-         (*i)->SetPrintLevel(printLevel);
-         (*i)->Print(os);
-      }
-   }
+/**
+ * \ingroup gdcmObject
+ * \brief   Canonical destructor.
+ */
+gdcmObject::~gdcmObject(void) {
 }
 
+
+
 //-----------------------------------------------------------------------------
 // Public
-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;
-}
 
 
-std::string gdcmObject::GetEntryByName(TagName name) 
-{
-   gdcmDict *PubDict=gdcmGlobal::GetDicts()->GetDefaultPubDict();
-   gdcmDictEntry *dictEntry = (*PubDict).GetDictEntryByName(name); 
+/**
+ * \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(void) {
+   TagDocEntryHT HT;
+   docEntries=GetDocEntries();   
+   for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i) {
+      HT[(*i)->GetKey()]=*i;
+   }
+   return(HT);
+}
 
-   if( dictEntry == NULL)
-      return GDCM_UNFOUND;
-   return GetEntryByNumber(dictEntry->GetGroup(),dictEntry->GetElement()); 
+/**
+ * \ingroup gdcmObject
+ * \brief   Builds a Chained List containing 
+ *          pointers to all Header Entries (i.e Dicom Element)
+ *          related to this 'object'
+ * @return
+ */
+ // 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