Program: gdcm
Module: $RCSfile: gdcmSQItem.cxx,v $
Language: C++
- Date: $Date: 2004/06/23 02:13:14 $
- Version: $Revision: 1.15 $
+ Date: $Date: 2004/07/17 22:47:01 $
+ Version: $Revision: 1.21 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
void gdcmSQItem::Print(std::ostream & os) {
std::ostringstream s;
- if (SQDepthLevel>0) {
+ if (SQDepthLevel>0)
+ {
for (int i=0;i<SQDepthLevel;i++)
s << " | " ;
}
std::cout << s.str() << " --- SQItem number " << SQItemNumber << std::endl;
- for (ListDocEntry::iterator i = docEntries.begin();
- i != docEntries.end();
- ++i)
+ for (ListDocEntry::iterator i = docEntries.begin();
+ i != docEntries.end();
+ ++i)
{
- os << s.str();
- //(*i)->SetPrintLevel(printLevel); //self->GetPrintLevel() ?
- (*i)->SetPrintLevel(2);
- (*i)->Print(os);
+ gdcmDocEntry* Entry = *i;
+ bool PrintEndLine = true;
+
+ os << s.str();
+ Entry->SetPrintLevel(2);
+ Entry->Print(os);
+ if ( gdcmSeqEntry* SeqEntry = dynamic_cast<gdcmSeqEntry*>(Entry) )
+ {
+ (void)SeqEntry; //not used
+ PrintEndLine = false;
+ }
+ if (PrintEndLine)
+ os << std::endl;
}
}
-
/*
* \ingroup gdcmSQItem
* \brief canonical Writer
*/
- void gdcmSQItem::Write(FILE *fp,FileType filetype) {
- gdcmDocEntry *Entry;
+void gdcmSQItem::Write(FILE *fp,FileType filetype)
+{
for (ListDocEntry::iterator i = docEntries.begin();
i != docEntries.end();
++i)
{
- Entry=*i;
- (Entry)->WriteCommonPart(fp, filetype);
-
- if (gdcmBinEntry* BinEntry = dynamic_cast< gdcmBinEntry* >(Entry) ) {
- BinEntry->Write(fp);
- return;
- }
- if (gdcmValEntry* ValEntry = dynamic_cast< gdcmValEntry* >(Entry) ) {
- ValEntry->Write(fp);
- return;
- }
- if (gdcmSeqEntry* SeqEntry = dynamic_cast< gdcmSeqEntry* >(Entry) ) {
- SeqEntry->Write(fp,filetype);
- return;
- }
+ // Item Delimitor Item IS the last one of a 'no length' SQItem
+ // (when it exists) we don't write it right now
+ // It will be written outside, because ALL the SQItems are written
+ // as 'no length'
+ if ( (*i)->isItemDelimitor() )
+ break;
+
+ // Fix in order to make some MR PHILIPS images e-film readable
+ // see gdcmData/gdcm-MR-PHILIPS-16-Multi-Seq.dcm:
+ // we just *always* ignore spurious fffe|0000 tag !
+ if ( ((*i)->GetGroup() == 0xfffe) && ((*i)->GetElement() == 0x0000) )
+ break;
+
+ // It's up to the gdcmDocEntry Writter to write the SQItem begin element
+ // (fffe|e000) as a 'no length' one
+ (*i)->Write(fp, filetype);
}
}
-
//-----------------------------------------------------------------------------
// Public
/**
* @return true if element was found or created successfully
*/
-bool gdcmSQItem::SetEntryByNumber(std::string val,guint16 group,
- guint16 element)
+bool gdcmSQItem::SetEntryByNumber(std::string val,uint16_t group,
+ uint16_t element)
{
for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i)
{
// instead of ReplaceOrCreateByNumber
// that is a method of gdcmDocument :-(
gdcmValEntry* Entry = (gdcmValEntry*)0;
- TagKey key = gdcmDictEntry::TranslateToKey(group, element);
+ gdcmTagKey key = gdcmDictEntry::TranslateToKey(group, element);
if ( ! ptagHT->count(key))
{
* \brief Gets a Dicom Element inside a SQ Item Entry, by number
* @return
*/
-gdcmDocEntry *gdcmSQItem::GetDocEntryByNumber(guint16 group, guint16 element) {
- for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i) {
+gdcmDocEntry *gdcmSQItem::GetDocEntryByNumber(uint16_t group, uint16_t element)
+{
+ for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i)
+ {
if ( (*i)->GetGroup()==group && (*i)->GetElement()==element)
+ {
return (*i);
+ }
}
return NULL;
}
* @return
*/
-std::string gdcmSQItem::GetEntryByNumber(guint16 group, guint16 element) {
- for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i) {
- if ( (*i)->GetGroup()==group && (*i)->GetElement()==element) {
+std::string gdcmSQItem::GetEntryByNumber(uint16_t group, uint16_t element)
+{
+ for(ListDocEntry::iterator i=docEntries.begin();i!=docEntries.end();++i)
+ {
+ if ( (*i)->GetGroup()==group && (*i)->GetElement()==element)
+ {
return ((gdcmValEntry *)(*i))->GetValue();
}
}