- bool gdcmSQItem::SetEntryByNumber(std::string val,guint16 group,
- guint16 element) {
-
- 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() && element < (*i)->GetElement()) ){
- // instead of ReplaceOrCreateByNumber
- // that is a method of gdcmDocument :-(
- gdcmDocEntry *Entry;
- TagKey key = gdcmDictEntry::TranslateToKey(group, element);
- if ( ! ptagHT->count(key)) {
- // we assume a Public Dictionnary *is* loaded
- gdcmDict *PubDict = gdcmGlobal::GetDicts()->GetDefaultPubDict();
- // if the invoked (group,elem) doesn't exist inside the Dictionary
- // we create a VirtualDictEntry
- gdcmDictEntry *DictEntry = PubDict->GetDictEntryByNumber(group, element);
- if (DictEntry == NULL) {
- DictEntry=gdcmGlobal::GetDicts()->NewVirtualDictEntry(group,element,"UN","??","??");
- }
- // we assume the constructor didn't fail
- Entry = new gdcmDocEntry(DictEntry);
- /// \todo
- /// ----
- /// better we don't assume too much !
- /// gdcmSQItem is now used to describe any DICOMDIR related object
- ///
- } else {
- Entry = ptagHT->find(key)->second;
- }
- ((gdcmValEntry*)Entry)->SetValue(val);
- Entry->SetLength(val.length());
- docEntries.insert(i,Entry);
- return true;
- }
- if (group == (*i)->GetGroup() && element == (*i)->GetElement() ) {
- ((gdcmValEntry*)(*i))->SetValue(val);
- (*i)->SetLength(val.length());
- return true;
- }
- }
-}
-//-----------------------------------------------------------------------------
-// Protected
-
-//-----------------------------------------------------------------------------
-// Private
-
-// end-user intended : the guy *wants* to create his own SeQuence ?!?
-gdcmDocEntry *gdcmSQItem::NewDocEntryByNumber(guint16 group,
- guint16 element) {
-// TODO
- gdcmDocEntry *a;
- std::cout << " gdcmSQItem::NewDocEntryByNumber : TODO" <<std::endl;
- return a;
+bool SQItem::RemoveEntry( DocEntry *entryToRemove )
+{
+ for(ListDocEntry::iterator it = DocEntries.begin();
+ it != DocEntries.end();
+ ++it)
+ {
+ if( *it == entryToRemove )
+ {
+ DocEntries.erase(it);
+ gdcmWarningMacro( "One element erased: " << entryToRemove->GetKey() );
+ delete entryToRemove;
+ return true;
+ }
+ }
+ gdcmWarningMacro( "Entry not found: " << entryToRemove->GetKey() );
+ return false ;