X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDocEntrySet.cxx;h=cc91b75fd8ce796120041c6886c125405292e2d8;hb=46640df1364cc8916e252b7a45087fed816c9f57;hp=0b4ff26d8456da0553535c17bd24f7cd6a48ce11;hpb=1d9ac5cec02b9daa18b16835882b531731b125ad;p=gdcm.git diff --git a/src/gdcmDocEntrySet.cxx b/src/gdcmDocEntrySet.cxx index 0b4ff26d..cc91b75f 100644 --- a/src/gdcmDocEntrySet.cxx +++ b/src/gdcmDocEntrySet.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocEntrySet.cxx,v $ Language: C++ - Date: $Date: 2005/10/18 12:58:28 $ - Version: $Revision: 1.61 $ + Date: $Date: 2005/10/24 16:00:47 $ + Version: $Revision: 1.65 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -287,7 +287,7 @@ DataEntry *DocEntrySet::InsertEntryString(std::string const &value, { gdcmWarningMacro("AddEntry failed although this is a creation."); - delete dataEntry; + dataEntry->Delete(); return NULL; } } @@ -346,7 +346,7 @@ DataEntry *DocEntrySet::InsertEntryBinArea(uint8_t *binArea, int lgth, { gdcmWarningMacro( "AddEntry failed although this is a creation."); - delete dataEntry; + dataEntry->Delete(); return NULL; } } @@ -415,7 +415,7 @@ SeqEntry *DocEntrySet::InsertSeqEntry(uint16_t group, uint16_t elem) { gdcmWarningMacro( "AddEntry failed although this is a creation."); - delete seqEntry; + seqEntry->Delete(); return NULL; } } @@ -443,14 +443,15 @@ bool DocEntrySet::CheckIfEntryExist(uint16_t group, uint16_t elem ) * @param group Group number of the new Entry * @param elem Element number of the new Entry * @param vr V(alue) R(epresentation) of the new Entry + * \remarks The user of this method must destroy the DataEntry when unused */ DataEntry *DocEntrySet::NewDataEntry(uint16_t group,uint16_t elem, VRKey const &vr) { DictEntry *dictEntry = GetDictEntry(group, elem, vr); - gdcmAssertMacro(dictEntry); - DataEntry *newEntry = new DataEntry(dictEntry); + DataEntry *newEntry = DataEntry::New(dictEntry); + dictEntry->Unregister(); // GetDictEntry register it if (!newEntry) { gdcmWarningMacro( "Failed to allocate DataEntry"); @@ -465,13 +466,14 @@ DataEntry *DocEntrySet::NewDataEntry(uint16_t group,uint16_t elem, * a default one when absent. * @param group Group number of the new Entry * @param elem Element number of the new Entry + * \remarks The user of this method must destroy the SeqEntry when unused */ SeqEntry* DocEntrySet::NewSeqEntry(uint16_t group, uint16_t elem) { DictEntry *dictEntry = GetDictEntry(group, elem, "SQ"); - gdcmAssertMacro(dictEntry); - SeqEntry *newEntry = new SeqEntry( dictEntry ); + SeqEntry *newEntry = SeqEntry::New( dictEntry ); + dictEntry->Unregister(); // GetDictEntry register it if (!newEntry) { gdcmWarningMacro( "Failed to allocate SeqEntry"); @@ -480,22 +482,6 @@ SeqEntry* DocEntrySet::NewSeqEntry(uint16_t group, uint16_t elem) return newEntry; } -/** - * \brief Request a new virtual dict entry to the dict set - * @param group Group number of the underlying DictEntry - * @param elem Element number of the underlying DictEntry - * @param vr V(alue) R(epresentation) of the underlying DictEntry - * @param vm V(alue) M(ultiplicity) of the underlying DictEntry - * @param name english name - */ -DictEntry* DocEntrySet::NewVirtualDictEntry( uint16_t group, uint16_t elem, - VRKey const &vr, - TagName const &vm, - TagName const &name ) -{ - return Global::GetDicts()->NewVirtualDictEntry(group,elem,vr,vm,name); -} - //----------------------------------------------------------------------------- // Protected /** @@ -506,6 +492,7 @@ DictEntry* DocEntrySet::NewVirtualDictEntry( uint16_t group, uint16_t elem, * @param group Group number of the searched DictEntry * @param elem Element number of the searched DictEntry * @return Corresponding DictEntry when it exists, NULL otherwise. + * \remarks The returned DictEntry is registered when existing */ DictEntry *DocEntrySet::GetDictEntry(uint16_t group,uint16_t elem) { @@ -517,7 +504,9 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group,uint16_t elem) } else { - found = pubDict->GetEntry(group, elem); + found = pubDict->GetEntry(group, elem); + if( found ) + found->Register(); } return found; } @@ -530,6 +519,7 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group,uint16_t elem) * @param elem element number of the searched DictEntry * @param vr V(alue) R(epresentation) to use, if necessary * @return Corresponding DictEntry when it exists, NULL otherwise. + * \remarks The returned DictEntry is registered */ DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem, VRKey const &vr) @@ -538,7 +528,8 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem, DictEntry *goodEntry = dictEntry; VRKey goodVR = vr; - if (elem == 0x0000) goodVR="UL"; + if (elem == 0x0000) + goodVR="UL"; if ( goodEntry ) { @@ -547,6 +538,7 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem, { goodEntry = NULL; } + dictEntry->Unregister(); } // Create a new virtual DictEntry if necessary @@ -554,14 +546,18 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem, { if (dictEntry) { - goodEntry = NewVirtualDictEntry(group, elem, goodVR, "FIXME", - dictEntry->GetName() ); + goodEntry = DictEntry::New(group, elem, goodVR, "FIXME", + dictEntry->GetName() ); } else { - goodEntry = NewVirtualDictEntry(group, elem, goodVR); + goodEntry = DictEntry::New(group, elem, goodVR); } } + else + { + goodEntry->Register(); + } return goodEntry; }