]> Creatis software - gdcm.git/blobdiff - src/gdcmDocEntryArchive.cxx
* src/gdcmDocEntryArchive.[h|cxx] : bug fix and add a method to temporary
[gdcm.git] / src / gdcmDocEntryArchive.cxx
index 263f8a75a9994e07d15e80e3f49d8571aa2db277..9a5a498cee8d36921f7ae74244b29617850e8922 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocEntryArchive.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/23 11:14:13 $
-  Version:   $Revision: 1.2 $
+  Date:      $Date: 2004/11/24 10:23:47 $
+  Version:   $Revision: 1.3 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -82,9 +82,13 @@ 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;
@@ -94,6 +98,32 @@ bool DocEntryArchive::Push(DocEntry *newEntry)
    return(false);
 }
 
+/**
+ * \brief   Replace in the Header a DocEntry by the new DocEntry. The last
+ *          DocEntry is kept in archieve
+ * @param   newEntry New entry to substitute to an other entry of the Header
+ * @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);
+}
+
 /**
  * \brief   Restore in the Header the DocEntry that have the generalized key. 
  *          The old entry is destroyed.
@@ -109,13 +139,19 @@ 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);