X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmSQItem.cxx;h=945ad0b2db8ec6d223fb04e5bc8e620eaf3df961;hb=95dcce2c32665bcba9aa2d20c13390271a204e23;hp=b63b376a44d153d512b895742fd5cb6f9be9c9b6;hpb=be54aab0103af7dee1a3bb5b8b3ee93b59ca9073;p=gdcm.git diff --git a/src/gdcmSQItem.cxx b/src/gdcmSQItem.cxx index b63b376a..945ad0b2 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/30 17:30:57 $ + Version: $Revision: 1.62 $ 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 @@ -152,82 +161,15 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype) bool SQItem::AddEntry(DocEntry *entry) { DocEntries.push_back(entry); - //TODO : check if it worked return true; } -/** - * \brief Sets Entry (Dicom Element) value of an element, - * specified by it's tag (Group, Number) - * and the length, too ... inside a SQ Item - * If the Element is not found, it's just created ! - * \warning we suppose, right now, the element belongs to a Public Group - * (NOT a shadow one) - * @param val string value to set - * @param group Group number of the searched tag. - * @param elem Element number of the searched tag. - * @return true if element was found or created successfully - */ - -bool SQItem::SetEntryValue(std::string const &val, uint16_t group, - uint16_t elem) -{ - for(ListDocEntry::iterator i = DocEntries.begin(); - i != DocEntries.end(); - ++i) - { - if ( (*i)->GetGroup() == 0xfffe && (*i)->GetElement() == 0xe000 ) - { - continue; - } - - if ( ( group < (*i)->GetGroup() ) - ||( group == (*i)->GetGroup() && elem < (*i)->GetElement()) ) - { - // instead of Insert, that is a method of Document :-( - ValEntry* entry = 0; - TagKey key = DictEntry::TranslateToKey(group, elem); - - // we assume a Public Dictionary *is* loaded - Dict *pubDict = Global::GetDicts()->GetDefaultPubDict(); - // if the invoked (group,elem) doesn't exist inside the Dictionary - // we create a VirtualDictEntry - DictEntry *dictEntry = pubDict->GetEntry(group, elem); - if (dictEntry == NULL) - { - dictEntry = - Global::GetDicts()->NewVirtualDictEntry(group, elem, - "UN", GDCM_UNKNOWN, - GDCM_UNKNOWN); - } - // we assume the constructor didn't fail - entry = new ValEntry(dictEntry); - if (entry) - { - entry->SetValue(val); - } - DocEntries.insert(i,entry); - - return true; - } - if (group == (*i)->GetGroup() && elem == (*i)->GetElement() ) - { - if ( ValEntry *entry = dynamic_cast(*i) ) - { - entry->SetValue(val); - } - return true; - } - } - return false; -} - /** * \brief Clear the std::list from given entry AND delete the entry. * @param entryToRemove Entry to remove AND delete. * @return true if the entry was found and removed; false otherwise */ -bool SQItem::RemoveEntry( DocEntry* entryToRemove) +bool SQItem::RemoveEntry( DocEntry *entryToRemove) { for(ListDocEntry::iterator it = DocEntries.begin(); it != DocEntries.end(); @@ -250,7 +192,7 @@ bool SQItem::RemoveEntry( DocEntry* entryToRemove) * @param entryToRemove Entry to remove. * @return true if the entry was found and removed; false otherwise */ -bool SQItem::RemoveEntryNoDestroy(DocEntry* entryToRemove) +bool SQItem::RemoveEntryNoDestroy(DocEntry *entryToRemove) { for(ListDocEntry::iterator it = DocEntries.begin(); it != DocEntries.end(); @@ -273,7 +215,7 @@ bool SQItem::RemoveEntryNoDestroy(DocEntry* entryToRemove) * \brief Get the first Dicom entry while visiting the SQItem * \return The first DocEntry if found, otherwhise 0 */ -DocEntry * SQItem::GetFirstEntry() +DocEntry *SQItem::GetFirstEntry() { ItDocEntries = DocEntries.begin(); if (ItDocEntries != DocEntries.end()) @@ -287,17 +229,12 @@ DocEntry * SQItem::GetFirstEntry() */ DocEntry *SQItem::GetNextEntry() { - // gdcmAssertMacro (ItDocEntries != DocEntries.end()); - { - ++ItDocEntries; - if (ItDocEntries != DocEntries.end()) - return *ItDocEntries; - return NULL; - } + ++ItDocEntries; + if (ItDocEntries != DocEntries.end()) + return *ItDocEntries; + return NULL; } -//----------------------------------------------------------------------------- -// Protected /** * \brief Gets a Dicom Element inside a SQ Item Entry * @param group Group number of the Entry @@ -310,93 +247,14 @@ DocEntry *SQItem::GetDocEntry(uint16_t group, uint16_t elem) i != DocEntries.end(); ++i) { if ( (*i)->GetGroup() == group && (*i)->GetElement() == elem ) - { return *i; - } } - return 0; + return NULL; } -/** - * \brief Gets a Dicom Element inside a SQ Item Entry - * @param group Group number of the Entry - * @param elem Element number of the Entry - * @return Entry whose (group,elem) was passed. 0 if not found - */ -ValEntry* SQItem::GetValEntry(uint16_t group, uint16_t elem) -{ - DocEntry *d = GetDocEntry(group, elem); - if ( ValEntry *e = dynamic_cast(d) ) - return e; - return 0; -} - -/** - * \brief Gets a Dicom Element inside a SQ Item Entry - * @param group Group number of the Entry - * @param elem Element number of the Entry - * @return Entry whose (group,elem) was passed. 0 if not found - */ -BinEntry* SQItem::GetBinEntry(uint16_t group, uint16_t elem) -{ - DocEntry *d = GetDocEntry(group, elem); - if ( BinEntry *e = dynamic_cast(d) ) - return e; - return 0; -} - -/** - * \brief Gets a Dicom Element inside a SQ Item Entry - * @param group Group number of the Entry - * @param elem Element number of the Entry - * @return Entry whose (group,elem) was passed. 0 if not found - */ -SeqEntry* SQItem::GetSeqEntry(uint16_t group, uint16_t elem) -{ - DocEntry *d = GetDocEntry(group, elem); - if ( SeqEntry *e = dynamic_cast(d) ) - return e; - return 0; -} - - -/** - * \brief Get the value of a Dicom Element inside a SQ Item Entry - * \note : meaningfull only if the required entry is NEITHER a SeqEntry - * NOR a BinEntry - * @param group Group number of the Entry - * @param elem Element number of the Entry - * @return 'string value' of the entry whose (group,elem) was passed. - * GDCM_UNFOUND if not found - */ - -std::string SQItem::GetEntryValue(uint16_t group, uint16_t elem) -{ - -/* - DocEntry *e = GetFirstEntry(); - while (e) - { - if ( e->GetGroup() == group && e->GetElement() == elem) - { +//----------------------------------------------------------------------------- +// Protected - if (ValEntry *ve = dynamic_cast(e)) - return ve->GetValue(); - } - e = GetNextEntry(); - } -*/ - for(ListDocEntry::iterator i = DocEntries.begin(); - i != DocEntries.end(); ++i) - { - if ( (*i)->GetGroup() == group && (*i)->GetElement() == elem) - { - if (ValEntry *ve = dynamic_cast(*i)) - return ve->GetValue(); - } - } - return GDCM_UNFOUND; -} //----------------------------------------------------------------------------- // Private