X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmDict.cxx;h=86a041c4b157188058c80bd095abd46574606f0b;hb=b8a5842638a6d29023d5440c09b08c94b0cbcc75;hp=aae1daff119699bdbade8cd48101c647211cb9ed;hpb=1d7f7845726ab0b4e4630575f629a554d5707576;p=gdcm.git diff --git a/src/gdcmDict.cxx b/src/gdcmDict.cxx index aae1daff..86a041c4 100644 --- a/src/gdcmDict.cxx +++ b/src/gdcmDict.cxx @@ -3,10 +3,17 @@ #include #include "gdcmDict.h" #include "gdcmUtil.h" +using namespace std; -gdcmDict::gdcmDict(const char* FileName) { - std::ifstream from(FileName); - dbg.Error(!from, "gdcmDict::gdcmDict: can't open dictionary", FileName); +/** + * \ingroup gdcmDict + * \brief Construtor + * @param FileName from which to build the dictionary. + */ +gdcmDict::gdcmDict(std::string & FileName) { + std::ifstream from(FileName.c_str()); + dbg.Error(!from, "gdcmDict::gdcmDict: can't open dictionary", + FileName.c_str()); guint16 group, element; // CLEANME : use defines for all those constants char buff[1024]; @@ -15,7 +22,7 @@ gdcmDict::gdcmDict(const char* FileName) { TagName fourth; TagName name; while (!from.eof()) { - from >> hex >> group >> element; + from >> std::hex >> group >> element; eatwhite(from); from.getline(buff, 256, ' '); vr = buff; @@ -26,23 +33,37 @@ gdcmDict::gdcmDict(const char* FileName) { name = buff; gdcmDictEntry * newEntry = new gdcmDictEntry(group, element, vr, fourth, name); + // FIXME: use AddNewEntry NameHt[name] = newEntry; KeyHt[gdcmDictEntry::TranslateToKey(group, element)] = newEntry; } from.close(); } -void gdcmDict::Print(ostream& os) { +gdcmDict::~gdcmDict() { + for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag) { + gdcmDictEntry* EntryToDelete = tag->second; + if ( EntryToDelete ) + delete EntryToDelete; + } + KeyHt.clear(); + // Since AddNewEntry adds symetrical in both KeyHt and NameHT we can + // assume all the pointed gdcmDictEntries are allready cleaned-up when + // we cleaned KeyHt. + NameHt.clear(); +} + +void gdcmDict::Print(std::ostream& os) { PrintByKey(os); } /** - * \ingroup gdcmHeader + * \ingroup gdcmDict * \brief Print all the dictionary entries contained in this dictionary. * Entries will be sorted by tag i.e. the couple (group, element). * @param os The output stream to be written to. */ -void gdcmDict::PrintByKey(ostream& os) { +void gdcmDict::PrintByKey(std::ostream& os) { for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag){ os << "Tag : "; os << "(" << hex << tag->second->GetGroup() << ','; @@ -54,30 +75,30 @@ void gdcmDict::PrintByKey(ostream& os) { } /** - * \ingroup gdcmHeader + * \ingroup gdcmDict * \brief Print all the dictionary entries contained in this dictionary. * Entries will be sorted by the name of the dictionary entries. * @param os The output stream to be written to. */ -void gdcmDict::PrintByName(ostream& os) { +void gdcmDict::PrintByName(std::ostream& os) { for (TagNameHT::iterator tag = NameHt.begin(); tag != NameHt.end(); ++tag){ os << "Tag : "; os << tag->second->GetName() << ","; os << tag->second->GetVR() << ", "; os << tag->second->GetFourth() << ", "; - os << "(" << hex << tag->second->GetGroup() << ','; - os << hex << tag->second->GetElement() << ") = " << dec << endl; + os << "(" << std::hex << tag->second->GetGroup() << ','; + os << std::hex << tag->second->GetElement() << ") = " << dec << std::endl; } } /** - * \ingroup gdcmHeader + * \ingroup gdcmDict * \brief Get the dictionnary entry identified by a given tag (group,element) * @param group group of the entry to be found * @param element element of the entry to be found * @return the corresponding dictionnary entry when existing, NULL otherwise */ -gdcmDictEntry * gdcmDict::GetTagByKey(guint16 group, guint16 element) { +gdcmDictEntry * gdcmDict::GetTagByNumber(guint16 group, guint16 element) { TagKey key = gdcmDictEntry::TranslateToKey(group, element); if ( ! KeyHt.count(key)) return (gdcmDictEntry*)0; @@ -85,7 +106,7 @@ gdcmDictEntry * gdcmDict::GetTagByKey(guint16 group, guint16 element) { } /** - * \ingroup gdcmHeader + * \ingroup gdcmDict * \brief Get the dictionnary entry identified by it's name. * @param name element of the ElVal to modify * @return the corresponding dictionnary entry when existing, NULL otherwise @@ -121,6 +142,9 @@ int gdcmDict::AddNewEntry(gdcmDictEntry* NewEntry) { int gdcmDict::RemoveEntry(TagKey key) { if(KeyHt.count(key) == 1) { + gdcmDictEntry* EntryToDelete = KeyHt.find(key)->second; + if ( EntryToDelete ) + delete EntryToDelete; KeyHt.erase(key); return (1); } else {