X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDocEntryArchive.cxx;h=0e9b2d5366c51b29dcfb816edc2581f824ed8bb3;hb=9f28ad122dd01f096e4e5ca18d46aa7a8a0a07fc;hp=eb27dff0b66d7b3e40208e56b2e10807c661feda;hpb=a4cff04fcd2023f798a9f1ef6bc9307269abd185;p=gdcm.git diff --git a/src/gdcmDocEntryArchive.cxx b/src/gdcmDocEntryArchive.cxx index eb27dff0..0e9b2d53 100644 --- a/src/gdcmDocEntryArchive.cxx +++ b/src/gdcmDocEntryArchive.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocEntryArchive.cxx,v $ Language: C++ - Date: $Date: 2005/01/26 11:42:02 $ - Version: $Revision: 1.10 $ + Date: $Date: 2005/07/11 14:40:40 $ + Version: $Revision: 1.16 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -25,6 +25,7 @@ namespace gdcm { //----------------------------------------------------------------------------- +// Constructor / Destructor /** * \brief Constructor */ @@ -33,7 +34,6 @@ DocEntryArchive::DocEntryArchive(File *file) ArchFile = file; } -//----------------------------------------------------------------------------- /** * \brief Destructor */ @@ -42,146 +42,89 @@ DocEntryArchive::~DocEntryArchive() ClearArchive(); } -//----------------------------------------------------------------------------- -// Print -/** - * \brief Print all - * @param os The output stream to be written to. - */ -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); - } -} - //----------------------------------------------------------------------------- // Public /** - * \brief Replace in the Header a DocEntry by the new DocEntry. The last - * DocEntry is kept in archive + * \brief Replaces in the Header a DocEntry by the new DocEntry. + * The initial DocEntry is kept in archive. * @param newEntry New entry to substitute to an other entry of the Header - * @return FALSE when an other DocEntry is already archived with the same - * generalized key, TRUE otherwise + * @return FALSE when an other DocEntry is already archived with the same key + * TRUE otherwise */ bool DocEntryArchive::Push(DocEntry *newEntry) { - if(!newEntry) + if ( !newEntry ) return false; uint16_t group = newEntry->GetDictEntry()->GetGroup(); - uint16_t elem = newEntry->GetDictEntry()->GetElement(); - std::string key = DictEntry::TranslateToKey(group,elem); + uint16_t elem = newEntry->GetDictEntry()->GetElement(); + TagKey key = DictEntry::TranslateToKey(group,elem); - if( Archive.find(key)==Archive.end() ) + if ( Archive.find(key) == Archive.end() ) { // Save the old DocEntry if any - DocEntry *old = ArchFile->GetDocEntry(group,elem); - Archive[key] = old; - if( old ) + DocEntry *old = ArchFile->GetDocEntry(group, elem); + Archive[key] = old; + if ( old ) ArchFile->RemoveEntryNoDestroy(old); // Set the new DocEntry ArchFile->AddEntry(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 false; } /** - * \brief Replace in the Header a DocEntry by the new DocEntry. The last - * DocEntry is kept in archive - * @param group Group number of the Entry - * @param elem Element number of the Entry - * @return FALSE when an other DocEntry is already archived with the same - * generalized key, TRUE otherwise + * \brief Removes out of the Header a DocEntry. + * (it's kept in archive). + * @param group Group number of the Entry to remove + * @param elem Element number of the Entry to remove + * @return FALSE when an other DocEntry is already archived with the same key + * TRUE otherwise */ -bool DocEntryArchive::Push(uint16_t group,uint16_t elem) +bool DocEntryArchive::Push(uint16_t group, uint16_t elem) { - std::string key = DictEntry::TranslateToKey(group,elem); + TagKey key = DictEntry::TranslateToKey(group, elem); - if( Archive.find(key)==Archive.end() ) + if ( Archive.find(key)==Archive.end() ) { // Save the old DocEntry if any - DocEntry *old = ArchFile->GetDocEntry(group,elem); + DocEntry *old = ArchFile->GetDocEntry(group, elem); Archive[key] = old; - if( old ) + if ( old ) ArchFile->RemoveEntryNoDestroy(old); -/* // 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. - * @param group Group number of the Entry - * @param elem Element number of the Entry - * @return FALSE when the generalized key isn't in the archive, + * \brief Restore in the Header the DocEntry specified by (group,element). + * The archive entry is destroyed. + * @param group Group number of the Entry to restore + * @param elem Element number of the Entry to restore + * @return FALSE when the key isn't in the archive, * TRUE otherwise */ -bool DocEntryArchive::Restore(uint16_t group,uint16_t elem) +bool DocEntryArchive::Restore(uint16_t group, uint16_t elem) { - std::string key=DictEntry::TranslateToKey(group,elem); + TagKey key=DictEntry::TranslateToKey(group, elem); TagDocEntryHT::iterator restoreIt=Archive.find(key); - if( restoreIt!=Archive.end() ) + if ( restoreIt!=Archive.end() ) { // Delete the new value - DocEntry *rem = ArchFile->GetDocEntry(group,elem); - if( rem ) + DocEntry *rem = ArchFile->GetDocEntry(group, elem); + if ( rem ) ArchFile->RemoveEntry(rem); // Restore the old value - if( Archive[key] ) + if ( Archive[key] ) ArchFile->AddEntry(Archive[key]); -/* // Delete the new value - TagDocEntryHT::iterator restorePos = HeaderHT.find(key); - if( restorePos!=HeaderHT.end() ) - { - delete restorePos->second; - } - - // Restore the old value - if( Archive[key] ) - { - HeaderHT[key] = Archive[key]; - } - else - { - HeaderHT.erase(restorePos); - }*/ - Archive.erase(restoreIt); return true; @@ -190,8 +133,8 @@ bool DocEntryArchive::Restore(uint16_t group,uint16_t elem) } /** - * \brief Remove all DocEntry that are in the archive. - * The entries aren't restored but only destroyed. + * \brief Removes all DocEntry from the archive, and destroy them. + * The archives entries aren't restored. */ void DocEntryArchive::ClearArchive( ) { @@ -211,5 +154,22 @@ void DocEntryArchive::ClearArchive( ) // Private //----------------------------------------------------------------------------- +// Print +/** + * \brief Print all + * @param os The output stream to be written to. + */ +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); + } +} +//----------------------------------------------------------------------------- } // end namespace gdcm