From: regrain Date: Tue, 25 Jan 2005 11:11:57 +0000 (+0000) Subject: * src/gdcmDocument.cxx : bug fix on potential memory leak X-Git-Tag: Version1.0.bp~198 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=48266ecf995a124f3d76edb1826ff9e858b5ee40;p=gdcm.git * src/gdcmDocument.cxx : bug fix on potential memory leak * src/gdcmSQItem.cxx : initialize the SQItemNumber value in the constructor * src/gdcmSQItem.[h|cxx], gdcmElementSet.[h|cxx], gdcmDicomDir*.[h|cxx] : Add ClearXxx methods to remove all the content of the list or map * gdcmDocEntrySet.h : add GetFirst/NextEntry in pure virtual -- BeNours --- diff --git a/ChangeLog b/ChangeLog index d77b19c6..f7c038a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-01-25 Benoit Regrain + * src/gdcmDocument.cxx : bug fix on potential memory leak + * src/gdcmSQItem.cxx : initialize the SQItemNumber value in the constructor + * src/gdcmSQItem.[h|cxx], gdcmElementSet.[h|cxx], gdcmDicomDir*.[h|cxx] : + Add ClearXxx methods to remove all the content of the list or map + * gdcmDocEntrySet.h : add GetFirst/NextEntry in pure virtual + 2005-01-24 Mathieu Malaterre * Grealty simplify the JPEg decompression, no need to differenciate based on the JPEG possible type (with/without fragment, with/without multiple frame). diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index 568223b8..01fb17ce 100644 --- a/src/gdcmDicomDir.cxx +++ b/src/gdcmDicomDir.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDir.cxx,v $ Language: C++ - Date: $Date: 2005/01/24 16:10:52 $ - Version: $Revision: 1.116 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.117 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -146,12 +146,7 @@ DicomDir::~DicomDir() SetProgressMethod(NULL); SetEndMethod(NULL); - for(ListDicomDirPatient::iterator cc = Patients.begin(); - cc!= Patients.end(); - ++cc) - { - delete *cc; - } + ClearPatient(); if ( MetaElems ) { delete MetaElems; @@ -476,14 +471,24 @@ DicomDirMeta *DicomDir::NewMeta() // friend class hunting : we miss GetLastEntry and GetPreviousEntry // to be able to remove any direct reference to TagHT - - DocEntry *e = GetFirstEntry(); - if (e) + DocEntry *entry = GetFirstEntry(); + if( entry ) //if ( TagHT.begin() != TagHT.end() ) // after Document Parsing { MetaElems = new DicomDirMeta(true); - TagDocEntryHT::iterator lastOneButSequence = TagHT.end(); + entry = GetFirstEntry(); + while( entry ) + { + if( dynamic_cast(entry) ) + break; + + RemoveEntryNoDestroy(entry); + MetaElems->AddEntry(entry); + + entry = GetFirstEntry(); + } + /*TagDocEntryHT::iterator lastOneButSequence = TagHT.end(); lastOneButSequence --; // ALL the 'out of Sequence' Tags belong to Meta Elems // (we skip 0004|1220 [Directory record sequence] ) @@ -492,7 +497,7 @@ DicomDirMeta *DicomDir::NewMeta() ++cc) { MetaElems->AddEntry( cc->second ); - } + }*/ } else // after root directory parsing { @@ -503,7 +508,8 @@ DicomDirMeta *DicomDir::NewMeta() } /** - * \brief adds a new Patient (with the basic elements) to a partially created DICOMDIR + * \brief adds a new Patient (with the basic elements) to a partially created + * DICOMDIR */ DicomDirPatient *DicomDir::NewPatient() { @@ -512,6 +518,20 @@ DicomDirPatient *DicomDir::NewPatient() return p; } +/** + * \brief Remove all Patients + */ +void DicomDir::ClearPatient() +{ + for(ListDicomDirPatient::iterator cc = Patients.begin(); + cc!= Patients.end(); + ++cc) + { + delete *cc; + } + Patients.clear(); +} + /** * \brief adds to the HTable * the Entries (Dicom Elements) corresponding to the given type @@ -812,12 +832,12 @@ void DicomDir::CreateDicomDir() continue; } - if( si ) - MoveSQItem(si,tmpSI); + //if( si ) + //MoveSQItem(si,tmpSI); tmpSI=s->GetNextSQItem(); } // friend hunting : this one will be difficult to remove ! - TagHT.clear(); + ClearEntry(); } /** @@ -863,14 +883,6 @@ bool DicomDir::AddSerieToEnd(DicomDirSerie *dd) study->AddSerie(dd); return true; } -/* if( (*itp)->GetDicomDirStudies().size() > 0 ) - { - ListDicomDirStudy::const_iterator itst = - (*itp)->GetDicomDirStudies().end(); - itst--; - (*itst)->AddSerie(dd); - return true; - }*/ } return false; } @@ -896,20 +908,6 @@ bool DicomDir::AddImageToEnd(DicomDirImage *dd) return true; } } -/* if( (*itp)->GetDicomDirStudies().size() > 0 ) - { - ListDicomDirStudy::const_iterator itst = - (*itp)->GetDicomDirStudies().end(); - itst--; - - if( (*itst)->GetDicomDirSeries().size() > 0 ) - { - ListDicomDirSerie::const_iterator its = (*itst)->GetDicomDirSeries().end(); - its--; - (*its)->AddImage(dd); - return true; - } - }*/ } return false; } @@ -921,8 +919,8 @@ bool DicomDir::AddImageToEnd(DicomDirImage *dd) */ void DicomDir::SetElements(std::string const & path, VectDocument const &list) { - TagHT.clear(); - Patients.clear(); + ClearEntry(); + ClearPatient(); std::string patPrevName = "", patPrevID = ""; std::string studPrevInstanceUID = "", studPrevID = ""; @@ -985,7 +983,7 @@ void DicomDir::SetElements(std::string const & path, VectDocument const &list) * @param dst destination SQItem * @param src source SQItem */ -void DicomDir::MoveSQItem(SQItem *dst,SQItem *src) +void DicomDir::MoveSQItem(DocEntrySet *dst,DocEntrySet *src) { DocEntry *entry; diff --git a/src/gdcmDicomDir.h b/src/gdcmDicomDir.h index f3f9b073..39c703b8 100644 --- a/src/gdcmDicomDir.h +++ b/src/gdcmDicomDir.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDir.h,v $ Language: C++ - Date: $Date: 2005/01/20 11:09:23 $ - Version: $Revision: 1.49 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.50 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -100,6 +100,9 @@ public: DicomDirMeta *NewMeta(); DicomDirPatient *NewPatient(); + /// Removing + void ClearPatient(); + /// Write bool WriteDicomDir(std::string const &fileName); @@ -132,7 +135,7 @@ private: void SetElements(std::string const &path, VectDocument const &list); void SetElement (std::string const &path, DicomDirType type, Document *header); - void MoveSQItem(SQItem *dst,SQItem *src); + void MoveSQItem(DocEntrySet *dst,DocEntrySet *src); static bool HeaderLessThan(Document *header1, Document *header2); diff --git a/src/gdcmDicomDirPatient.cxx b/src/gdcmDicomDirPatient.cxx index ceeea5b4..9a339e21 100644 --- a/src/gdcmDicomDirPatient.cxx +++ b/src/gdcmDicomDirPatient.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirPatient.cxx,v $ Language: C++ - Date: $Date: 2005/01/23 10:12:33 $ - Version: $Revision: 1.31 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.32 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -47,12 +47,7 @@ DicomDirPatient::DicomDirPatient(bool empty): */ DicomDirPatient::~DicomDirPatient() { - for(ListDicomDirStudy::const_iterator cc = Studies.begin(); - cc != Studies.end(); - ++cc ) - { - delete *cc; - } + ClearStudy(); } //----------------------------------------------------------------------------- @@ -106,6 +101,20 @@ DicomDirStudy* DicomDirPatient::NewStudy() return st; } +/** + * \brief Remove all studies in the patient + */ +void DicomDirPatient::ClearStudy() +{ + for(ListDicomDirStudy::const_iterator cc = Studies.begin(); + cc != Studies.end(); + ++cc ) + { + delete *cc; + } + Studies.clear(); +} + /** * \brief Get the first entry while visiting the DicomDirStudy * \return The first DicomDirStudy if found, otherwhise NULL diff --git a/src/gdcmDicomDirPatient.h b/src/gdcmDicomDirPatient.h index d1f9ebfe..5ef17805 100644 --- a/src/gdcmDicomDirPatient.h +++ b/src/gdcmDicomDirPatient.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirPatient.h,v $ Language: C++ - Date: $Date: 2005/01/20 16:16:42 $ - Version: $Revision: 1.22 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.23 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -49,8 +49,9 @@ public: /// adds the passed STUDY to the STUDY chained List for this PATIENT. void AddStudy(DicomDirStudy *obj) { Studies.push_back(obj); }; - DicomDirStudy *NewStudy(); + + void ClearStudy(); private: diff --git a/src/gdcmDicomDirSerie.cxx b/src/gdcmDicomDirSerie.cxx index 5b0b3179..a03c6480 100644 --- a/src/gdcmDicomDirSerie.cxx +++ b/src/gdcmDicomDirSerie.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirSerie.cxx,v $ Language: C++ - Date: $Date: 2005/01/23 10:12:33 $ - Version: $Revision: 1.33 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.34 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -46,12 +46,7 @@ DicomDirSerie::DicomDirSerie(bool empty): */ DicomDirSerie::~DicomDirSerie() { - for(ListDicomDirImage::iterator cc = Images.begin(); - cc != Images.end(); - ++cc) - { - delete *cc; - } + ClearImage(); } //----------------------------------------------------------------------------- @@ -95,7 +90,8 @@ void DicomDirSerie::WriteContent(std::ofstream *fp, FileType t) } /** - * \brief adds a new Image (with the basic elements) to a partially created DICOMDIR + * \brief adds a new Image (with the basic elements) to a partially created + * DICOMDIR */ DicomDirImage *DicomDirSerie::NewImage() { @@ -104,6 +100,20 @@ DicomDirImage *DicomDirSerie::NewImage() return st; } +/** + * \brief Remove all images in the serie + */ +void DicomDirSerie::ClearImage() +{ + for(ListDicomDirImage::iterator cc = Images.begin(); + cc != Images.end(); + ++cc) + { + delete *cc; + } + Images.clear(); +} + /** * \brief Get the first entry while visiting the DicomDirImage * \return The first DicomDirImage if found, otherwhise NULL diff --git a/src/gdcmDicomDirSerie.h b/src/gdcmDicomDirSerie.h index c87f0037..97b67cb9 100644 --- a/src/gdcmDicomDirSerie.h +++ b/src/gdcmDicomDirSerie.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirSerie.h,v $ Language: C++ - Date: $Date: 2005/01/20 16:16:42 $ - Version: $Revision: 1.23 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.24 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -48,9 +48,10 @@ public: /// adds the passed IMAGE to the IMAGE chained List for this SERIE. void AddImage(DicomDirImage *obj) { Images.push_back(obj); }; - DicomDirImage *NewImage(); + void ClearImage(); + private: ///chained list of DicomDirImages (to be exploited recursively) diff --git a/src/gdcmDicomDirStudy.cxx b/src/gdcmDicomDirStudy.cxx index b2ef7523..058879ee 100644 --- a/src/gdcmDicomDirStudy.cxx +++ b/src/gdcmDicomDirStudy.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirStudy.cxx,v $ Language: C++ - Date: $Date: 2005/01/23 10:12:33 $ - Version: $Revision: 1.30 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.31 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -45,12 +45,7 @@ DicomDirStudy::DicomDirStudy(bool empty): */ DicomDirStudy::~DicomDirStudy() { - for(ListDicomDirSerie::iterator cc = Series.begin(); - cc != Series.end(); - ++cc ) - { - delete *cc; - } + ClearSerie(); } //----------------------------------------------------------------------------- @@ -106,6 +101,20 @@ DicomDirSerie *DicomDirStudy::NewSerie() return st; } +/** + * \brief Remove all series in the study + */ +void DicomDirStudy::ClearSerie() +{ + for(ListDicomDirSerie::iterator cc = Series.begin(); + cc != Series.end(); + ++cc ) + { + delete *cc; + } + Series.clear(); +} + /** * \brief Get the first entry while visiting the DicomDirSeries * \return The first DicomDirSerie if found, otherwhise NULL diff --git a/src/gdcmDicomDirStudy.h b/src/gdcmDicomDirStudy.h index ae743881..0e38bf5c 100644 --- a/src/gdcmDicomDirStudy.h +++ b/src/gdcmDicomDirStudy.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirStudy.h,v $ Language: C++ - Date: $Date: 2005/01/20 16:16:42 $ - Version: $Revision: 1.21 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.22 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -48,8 +48,9 @@ public: /// adds the passed SERIE to the SERIE chained List for this STUDY. void AddSerie(DicomDirSerie *obj) { Series.push_back(obj); }; - DicomDirSerie* NewSerie(); + + void ClearSerie(); private: diff --git a/src/gdcmDocEntrySet.h b/src/gdcmDocEntrySet.h index 16cc0e99..e1b94f2a 100644 --- a/src/gdcmDocEntrySet.h +++ b/src/gdcmDocEntrySet.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocEntrySet.h,v $ Language: C++ - Date: $Date: 2005/01/24 16:10:52 $ - Version: $Revision: 1.42 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.43 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -64,6 +64,9 @@ public: // ------- '... =0;' stands for 'Pure Virtual' + /// \brief Remove all Entry in the entry set + virtual void ClearEntry() = 0; + /// \brief adds any type of entry to the entry set virtual bool AddEntry(DocEntry *Entry) = 0; @@ -96,6 +99,9 @@ public: /// identified by its (group,elem) - Sorry for the name !...- virtual std::string GetEntryValue(uint16_t group, uint16_t elem) = 0; + virtual DocEntry *GetFirstEntry()=0; + virtual DocEntry *GetNextEntry()=0; + DictEntry *NewVirtualDictEntry(uint16_t group, uint16_t elem, TagName const &vr = GDCM_UNKNOWN, diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index 1065a2ed..1acf58f1 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocument.cxx,v $ Language: C++ - Date: $Date: 2005/01/24 16:43:06 $ - Version: $Revision: 1.207 $ + Date: $Date: 2005/01/25 11:11:58 $ + Version: $Revision: 1.208 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -1030,7 +1030,8 @@ void Document::ParseDES(DocEntrySet *set, long offset, { if ( newBinEntry ) { - if ( Filetype == ExplicitVR && ! Global::GetVR()->IsVROfBinaryRepresentable(vr) ) + if ( Filetype == ExplicitVR && + !Global::GetVR()->IsVROfBinaryRepresentable(vr) ) { ////// Neither ValEntry NOR BinEntry: should mean UNKOWN VR gdcmVerboseMacro( std::hex << newDocEntry->GetGroup() @@ -1171,14 +1172,19 @@ void Document::ParseDES(DocEntrySet *set, long offset, newDocEntry->GetOffset(), l, delim_mode); } - set->AddEntry( newSeqEntry ); + if( !set->AddEntry( newSeqEntry ) ) + { + used = false; + } if ( !delim_mode && ((long)(Fp->tellg())-offset) >= l_max) { + if( !used ) + delete newDocEntry; break; } } - if(!used) + if( !used ) delete newDocEntry; } } diff --git a/src/gdcmElementSet.cxx b/src/gdcmElementSet.cxx index f419aed9..0b634fa7 100644 --- a/src/gdcmElementSet.cxx +++ b/src/gdcmElementSet.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmElementSet.cxx,v $ Language: C++ - Date: $Date: 2005/01/24 16:10:52 $ - Version: $Revision: 1.49 $ + Date: $Date: 2005/01/25 11:11:59 $ + Version: $Revision: 1.50 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -42,14 +42,7 @@ ElementSet::ElementSet(int depthLevel) */ ElementSet::~ElementSet() { - for(TagDocEntryHT::iterator cc = TagHT.begin();cc != TagHT.end(); ++cc) - { - if ( cc->second ) - { - delete cc->second; - } - } - TagHT.clear(); + ClearEntry(); } //----------------------------------------------------------------------------- @@ -183,10 +176,6 @@ SeqEntry *ElementSet::GetSeqEntry(uint16_t group, uint16_t elem) return 0; } - -//----------------------------------------------------------------------------- -// Protected - /** * \brief Checks if a given Dicom Element exists within the H table * @param group Group number of the searched Dicom Element @@ -217,9 +206,20 @@ std::string ElementSet::GetEntryValue(uint16_t group, uint16_t elem) return ((ValEntry *)TagHT.find(key)->second)->GetValue(); } - -//----------------------------------------------------------------------------- -// Private +/** + * \brief delete all entries in the ElementSet + */ +void ElementSet::ClearEntry() +{ + for(TagDocEntryHT::iterator cc = TagHT.begin();cc != TagHT.end(); ++cc) + { + if ( cc->second ) + { + delete cc->second; + } + } + TagHT.clear(); +} /** * \brief add a new Dicom Element pointer to the H Table @@ -305,7 +305,6 @@ DocEntry *ElementSet::GetNextEntry() return NULL; } - /** * \brief Get the larst entry while visiting the DocEntrySet * \return The last DocEntry if found, otherwhise NULL @@ -333,6 +332,11 @@ DocEntry *ElementSet::GetPreviousEntry() return NULL; } +//----------------------------------------------------------------------------- +// Protected + +//----------------------------------------------------------------------------- +// Private //----------------------------------------------------------------------------- } // end namespace gdcm diff --git a/src/gdcmElementSet.h b/src/gdcmElementSet.h index 0bb3ac64..0f6e5d50 100644 --- a/src/gdcmElementSet.h +++ b/src/gdcmElementSet.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmElementSet.h,v $ Language: C++ - Date: $Date: 2005/01/24 16:10:52 $ - Version: $Revision: 1.36 $ + Date: $Date: 2005/01/25 11:11:59 $ + Version: $Revision: 1.37 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -49,6 +49,7 @@ public: virtual void Print(std::ostream &os = std::cout, std::string const &indent = "" ); + void ClearEntry(); bool AddEntry(DocEntry *Entry); bool RemoveEntry(DocEntry *EntryToRemove); bool RemoveEntryNoDestroy(DocEntry *EntryToRemove); diff --git a/src/gdcmSQItem.cxx b/src/gdcmSQItem.cxx index b63b376a..0c1cb641 100644 --- a/src/gdcmSQItem.cxx +++ b/src/gdcmSQItem.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmSQItem.cxx,v $ Language: C++ - Date: $Date: 2005/01/24 16:44:54 $ - Version: $Revision: 1.58 $ + Date: $Date: 2005/01/25 11:11:59 $ + Version: $Revision: 1.59 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -38,6 +38,7 @@ SQItem::SQItem(int depthLevel ) : DocEntrySet( ) { SQDepthLevel = depthLevel; + SQItemNumber = 0; } /** @@ -45,13 +46,7 @@ SQItem::SQItem(int depthLevel ) */ SQItem::~SQItem() { - for(ListDocEntry::iterator cc = DocEntries.begin(); - cc != DocEntries.end(); - ++cc) - { - delete *cc; - } - DocEntries.clear(); + ClearEntry(); } //----------------------------------------------------------------------------- @@ -145,6 +140,20 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype) //----------------------------------------------------------------------------- // Public +/** + * \brief Remove all entry in the Sequence Item + */ +void SQItem::ClearEntry() +{ + for(ListDocEntry::iterator cc = DocEntries.begin(); + cc != DocEntries.end(); + ++cc) + { + delete *cc; + } + DocEntries.clear(); +} + /** * \brief adds any Entry (Dicom Element) to the Sequence Item * @param entry Entry to add diff --git a/src/gdcmSQItem.h b/src/gdcmSQItem.h index ea09143e..de9fa1f0 100644 --- a/src/gdcmSQItem.h +++ b/src/gdcmSQItem.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmSQItem.h,v $ Language: C++ - Date: $Date: 2005/01/24 16:10:53 $ - Version: $Revision: 1.35 $ + Date: $Date: 2005/01/25 11:11:59 $ + Version: $Revision: 1.36 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -49,8 +49,7 @@ public: /// \brief returns the DocEntry chained List for this SQ Item. ListDocEntry const &GetDocEntries() const { return DocEntries; }; - /// \brief adds the passed DocEntry to the DocEntry chained List for - /// this SQ Item. + void ClearEntry(); bool AddEntry(DocEntry *Entry); // add to the List bool RemoveEntry(DocEntry *EntryToRemove); bool RemoveEntryNoDestroy(DocEntry *EntryToRemove);