1 /*=========================================================================
4 Module: $RCSfile: gdcmDocEntryArchive.cxx,v $
6 Date: $Date: 2004/11/24 10:23:47 $
7 Version: $Revision: 1.3 $
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)
52 os << "Elements in archives :" << std::endl;
53 for(TagDocEntryHT::iterator it = Archive.begin();
58 it->second->Print(os);
62 //-----------------------------------------------------------------------------
65 * \brief Replace in the Header a DocEntry by the new DocEntry. The last
66 * DocEntry is kept in archieve
67 * @param newEntry New entry to substitute to an other entry of the Header
68 * @return FALSE when an other DocEntry is already archieved with the same
69 * generalized key, TRUE otherwise
71 bool DocEntryArchive::Push(DocEntry *newEntry)
76 uint16_t gr = newEntry->GetDictEntry()->GetGroup();
77 uint16_t elt = newEntry->GetDictEntry()->GetElement();
78 std::string key = DictEntry::TranslateToKey(gr,elt);
80 if( Archive.find(key)==Archive.end() )
82 // Save the old DocEntry if any
83 TagDocEntryHT::iterator it = HeaderHT.find(key);
84 if( it!=HeaderHT.end() )
86 Archive[key] = it->second;
93 // Set the new DocEntry
94 HeaderHT[key] = newEntry;
102 * \brief Replace in the Header a DocEntry by the new DocEntry. The last
103 * DocEntry is kept in archieve
104 * @param newEntry New entry to substitute to an other entry of the Header
105 * @return FALSE when an other DocEntry is already archieved with the same
106 * generalized key, TRUE otherwise
108 bool DocEntryArchive::Push(uint16_t group,uint16_t element)
110 std::string key = DictEntry::TranslateToKey(group,element);
112 if( Archive.find(key)==Archive.end() )
114 // Save the old DocEntry if any
115 TagDocEntryHT::iterator it = HeaderHT.find(key);
116 if( it!=HeaderHT.end() )
118 Archive[key] = it->second;
128 * \brief Restore in the Header the DocEntry that have the generalized key.
129 * The old entry is destroyed.
130 * @param key Key of the DocEntry to restore
131 * @return FALSE when the generalized key isn't in the archieve,
134 bool DocEntryArchive::Restore(uint16_t group,uint16_t element)
136 std::string key=DictEntry::TranslateToKey(group,element);
138 TagDocEntryHT::iterator restoreIt=Archive.find(key);
139 if( restoreIt!=Archive.end() )
141 TagDocEntryHT::iterator restorePos = HeaderHT.find(key);
142 if( restorePos!=HeaderHT.end() )
144 delete restorePos->second;
149 HeaderHT[key] = Archive[key];
153 HeaderHT.erase(restorePos);
156 Archive.erase(restoreIt);
164 * \brief Remove all DocEntry that are in the archive. The entries aren't
165 * restored but only destroyed.
167 void DocEntryArchive::ClearArchive(void)
169 for(TagDocEntryHT::iterator it = Archive.begin();
178 //-----------------------------------------------------------------------------
181 //-----------------------------------------------------------------------------
184 //-----------------------------------------------------------------------------
186 } // end namespace gdcm