1 /*=========================================================================
4 Module: $RCSfile: gdcmDocEntryArchive.cxx,v $
6 Date: $Date: 2004/11/19 18:49:39 $
7 Version: $Revision: 1.1 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
19 #include "gdcmDocEntryArchive.h"
20 #include "gdcmDebug.h"
26 //-----------------------------------------------------------------------------
30 DocEntryArchive::DocEntryArchive(Header *header):
31 HeaderHT(header->TagHT)
35 //-----------------------------------------------------------------------------
39 DocEntryArchive::~DocEntryArchive()
44 //-----------------------------------------------------------------------------
48 * @param os The output stream to be written to.
50 void DocEntryArchive::Print(std::ostream &os)
54 //-----------------------------------------------------------------------------
57 * \brief Replace in the Header a DocEntry by the new DocEntry. The last
58 * DocEntry is kept in archieve
59 * @param newEntry New entry to substitute to an other entry of the Header
60 * @return FALSE when an other DocEntry is already archieved with the same
61 * generalized key, TRUE otherwise
63 bool DocEntryArchive::Push(DocEntry *newEntry)
68 uint16_t gr = newEntry->GetDictEntry()->GetGroup();
69 uint16_t elt = newEntry->GetDictEntry()->GetElement();
70 std::string key = DictEntry::TranslateToKey(gr,elt);
72 if( Archive.find(key)==Archive.end() )
74 // Save the old DocEntry if any
75 TagDocEntryHT::iterator it = HeaderHT.find(key);
76 if( it!=HeaderHT.end() )
77 Archive[key] = it->second;
81 // Set the new DocEntry
82 HeaderHT[key] = newEntry;
90 * \brief Restore in the Header the DocEntry that have the generalized key.
91 * The old entry is destroyed.
92 * @param key Key of the DocEntry to restore
93 * @return FALSE when the generalized key isn't in the archieve,
96 bool DocEntryArchive::Restore(uint16_t group,uint16_t element)
98 std::string key=DictEntry::TranslateToKey(group,element);
100 TagDocEntryHT::iterator restoreIt=Archive.find(key);
101 if( restoreIt!=Archive.end() )
103 TagDocEntryHT::iterator restorePos = HeaderHT.find(key);
104 if( restoreIt!=HeaderHT.end() )
105 delete restorePos->second;
108 HeaderHT[key] = Archive[key];
110 HeaderHT.erase(restorePos);
112 Archive.erase(restoreIt);
120 * \brief Remove all DocEntry that are in the archive. The entries aren't
121 * restored but only destroyed.
123 void DocEntryArchive::ClearArchive(void)
125 for(TagDocEntryHT::iterator it = Archive.begin();
134 //-----------------------------------------------------------------------------
137 //-----------------------------------------------------------------------------
140 //-----------------------------------------------------------------------------
142 } // end namespace gdcm