]> Creatis software - gdcm.git/blobdiff - src/gdcmDocEntryArchive.cxx
STYLE: minor clean up
[gdcm.git] / src / gdcmDocEntryArchive.cxx
index 8ee463398abba97780b6b38f22213bbc5f2e93aa..c47596ef4975526423c1f9d3effba1912fd0be7b 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocEntryArchive.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/19 18:49:39 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2005/01/11 00:21:48 $
+  Version:   $Revision: 1.6 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -18,6 +18,7 @@
 
 #include "gdcmDocEntryArchive.h"
 #include "gdcmDebug.h"
+#include "gdcmDocEntry.h"
 
 #include <string>
 
@@ -49,6 +50,14 @@ DocEntryArchive::~DocEntryArchive()
  */
 void DocEntryArchive::Print(std::ostream &os) 
 {
+   os << "Elements in archives :" << std::endl;
+   for(TagDocEntryHT::iterator it = Archive.begin();
+       it!=Archive.end();
+       ++it)
+   {
+      if(it->second)
+         it->second->Print(os);
+   }
 }
 
 //-----------------------------------------------------------------------------
@@ -63,7 +72,7 @@ void DocEntryArchive::Print(std::ostream &os)
 bool DocEntryArchive::Push(DocEntry *newEntry)
 {
    if(!newEntry)
-      return(false);
+      return false;
 
    uint16_t gr = newEntry->GetDictEntry()->GetGroup();
    uint16_t elt = newEntry->GetDictEntry()->GetElement();
@@ -74,22 +83,54 @@ bool DocEntryArchive::Push(DocEntry *newEntry)
       // Save the old DocEntry if any
       TagDocEntryHT::iterator it = HeaderHT.find(key);
       if( it!=HeaderHT.end() )
+      {
          Archive[key] = it->second;
+      }
       else
+      {
          Archive[key] = NULL;
+      }
 
       // Set the new DocEntry
       HeaderHT[key] = newEntry;
 
-      return(true);
+      return true;
+   }
+   return false;
+}
+
+/**
+ * \brief   Replace in the Header a DocEntry by the new DocEntry. The last
+ *          DocEntry is kept in archieve
+ * @param   group   Group number of the Entry 
+ * @param   element  Element number of the Entry
+ * @return  FALSE when an other DocEntry is already archieved with the same
+ *          generalized key, TRUE otherwise
+ */
+bool DocEntryArchive::Push(uint16_t group,uint16_t element)
+{
+   std::string key = DictEntry::TranslateToKey(group,element);
+
+   if( Archive.find(key)==Archive.end() )
+   {
+      // Save the old DocEntry if any
+      TagDocEntryHT::iterator it = HeaderHT.find(key);
+      if( it!=HeaderHT.end() )
+      {
+         Archive[key] = it->second;
+         HeaderHT.erase(it);
+      }
+
+      return true;
    }
-   return(false);
+   return false;
 }
 
 /**
  * \brief   Restore in the Header the DocEntry that have the generalized key. 
  *          The old entry is destroyed.
- * @param   key Key of the DocEntry to restore
+ * @param   group   Group number of the Entry 
+ * @param   element  Element number of the Entry
  * @return  FALSE when the generalized key isn't in the archieve, 
  *          TRUE otherwise
  */
@@ -101,19 +142,25 @@ bool DocEntryArchive::Restore(uint16_t group,uint16_t element)
    if( restoreIt!=Archive.end() )
    {
       TagDocEntryHT::iterator restorePos = HeaderHT.find(key);
-      if( restoreIt!=HeaderHT.end() )
+      if( restorePos!=HeaderHT.end() )
+      {
          delete restorePos->second;
+      }
 
       if( Archive[key] )
+      {
          HeaderHT[key] = Archive[key];
+      }
       else
+      {
          HeaderHT.erase(restorePos);
+      }
 
       Archive.erase(restoreIt);
 
-      return(true);
+      return true;
    }
-   return(false);
+   return false;
 }
 
 /**