]> Creatis software - gdcm.git/blobdiff - src/gdcmObject.cxx
ENH: Fix a shadow variable
[gdcm.git] / src / gdcmObject.cxx
index 82ff513148fd592804274be4f192f2b9d4afea78..d5f2848f5073881b54c00d26458b3aaad22322aa 100644 (file)
-// 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<gdcmElement> elemList)
 {
-   ListTag list;
-
-   for(ListTag::iterator it=beginObj;it!=endObj;++it)
+  // FillObject rempli le SQItem qui sera accroche au bon endroit
+
+   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)
    {
-      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);
+   }   
+}