X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmObject.cxx;h=d4527bc1449dc9e5f58601fb2adc29a91e4cf5b7;hb=0aefbe64c65acfed527a7f18b352a2621f4bc92b;hp=3f4b5101f4dc8c0e1bfda7f83661756bfe8713ad;hpb=cdc2a0e2a1e53f0efef4412a248566e076b1f4c9;p=gdcm.git diff --git a/src/gdcmObject.cxx b/src/gdcmObject.cxx index 3f4b5101..d4527bc1 100644 --- a/src/gdcmObject.cxx +++ b/src/gdcmObject.cxx @@ -1,10 +1,10 @@ // gdcmObject.cxx //----------------------------------------------------------------------------- #include "gdcmObject.h" -#include "gdcmUtil.h" +#include "gdcmGlobal.h" +#include "gdcmDebug.h" //----------------------------------------------------------------------------- -// Constructor / Destructor /** * \ingroup gdcmObject * \brief Constructor @@ -44,11 +44,10 @@ gdcmObject::~gdcmObject(void) { void gdcmObject::Print(std::ostream &os) { if(printLevel>=0) { ListTag::iterator i; - //for(ListTag::iterator i=beginObj;i!=endObj;++i) // JPR for(i=beginObj;;++i) { (*i)->SetPrintLevel(printLevel); (*i)->Print(os); - if (i == endObj) break; + if (i == endObj) break; } } } @@ -61,7 +60,6 @@ void gdcmObject::Print(std::ostream &os) { * @return */ std::string gdcmObject::GetEntryByNumber(guint16 group, guint16 element) { - //for(ListTag::iterator i=beginObj;i!=endObj;++i) // JPR for(ListTag::iterator i=beginObj;;++i) { if ( (*i)->GetGroup()==group && (*i)->GetElement()==element) return (*i)->GetValue(); @@ -85,6 +83,37 @@ std::string gdcmObject::GetEntryByName(TagName name) { return GetEntryByNumber(dictEntry->GetGroup(),dictEntry->GetElement()); } +/** + * \ingroup gdcmObject + * \brief Set the 'boundaries' gdcmObject (gdcmDicomDirPatient, + * gdcmDicomDirStudy, gdcmDicomDirSerie, gdcmDicomDirImage) + * comming for the parsing of a DICOMDIR file + * \warning NOT en user intended function + * @param flag = 0 when META to be dealt with + */ +void gdcmObject::ResetBoundaries(int flag) { + + if (flag) { // it's NOT a META + // upwards to fffe,e000 + for( i=j=debut(); + ((*i)->GetGroup() != 0xfffe) && ((*i)->GetElement() != 0xe000); + --i,j--) { + } + beginObj=j; + } + + // upwards again to fffe,e000 + if (fin()== (--(plistEntries->end())) ) // Don't try anything more when end + return; // of Chained List is reached + + for( i=j=fin(); + ((*i)->GetGroup() != 0xfffe) && ((*i)->GetElement() != 0xe000); + --i,j--) { + } + j--; + endObj=j; +} + /** * \ingroup gdcmParser * \brief Sets Entry (Dicom Element) value of an element, @@ -101,7 +130,6 @@ std::string gdcmObject::GetEntryByName(TagName name) { bool gdcmObject::SetEntryByNumber(std::string val,guint16 group, guint16 element) { - gdcmHeaderEntry *a; for(ListTag::iterator i=beginObj;;++i) { if ( (*i)->GetGroup() == 0xfffe && (*i)->GetElement() == 0xe000 ) continue; @@ -112,13 +140,15 @@ std::string gdcmObject::GetEntryByName(TagName name) { gdcmHeaderEntry *Entry; TagKey key = gdcmDictEntry::TranslateToKey(group, element); if ( ! ptagHT->count(key)) { - // we assume the element is a belongs to a Public Group (not a shadow one) // we assume a Public Dictionnary *is* loaded gdcmDict *PubDict = gdcmGlobal::GetDicts()->GetDefaultPubDict(); - // we assume the invoqued (group,elem) exists - // inside the Public Dictionary - gdcmDictEntry *DictEntry = PubDict->GetDictEntryByNumber(group, element); - // we assume the constuctor didn't fail + // 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 gdcmHeaderEntry(DictEntry); // ---- // TODO @@ -150,7 +180,6 @@ std::string gdcmObject::GetEntryByName(TagName name) { */ TagHeaderEntryHT gdcmObject::GetEntry(void) { TagHeaderEntryHT HT; - //for(ListTag::iterator i=beginObj;i!=endObj;++i) // JPR for(ListTag::iterator i=beginObj;;++i) { HT.insert( PairHT( (*i)->GetKey(),(*i)) ); if (i == endObj) break; @@ -167,7 +196,6 @@ TagHeaderEntryHT gdcmObject::GetEntry(void) { */ ListTag gdcmObject::GetListEntry(void) { ListTag list; - //for(ListTag::iterator i=beginObj;i!=endObj;++i) // JPR for(ListTag::iterator i=beginObj;;++i) { list.push_back(*i); if (i == endObj) break; @@ -178,7 +206,7 @@ ListTag gdcmObject::GetListEntry(void) { //----------------------------------------------------------------------------- // Protected -/* +/** * \ingroup gdcmObject * \brief add the 'Object' related Dicom Elements to the listEntries * of a partially created DICOMDIR @@ -199,7 +227,7 @@ void gdcmObject::FillObject(std::list elemList) { tmpEl=it->elem; dictEntry=gdcmGlobal::GetDicts()->GetDefaultPubDict()->GetDictEntryByNumber(tmpGr,tmpEl); entry=new gdcmHeaderEntry(dictEntry); - entry->SetOffset(0); // just to avoid missprinting //JPR + entry->SetOffset(0); // just to avoid further missprinting entry->SetValue(it->value); if(dictEntry->GetGroup()==0xfffe) @@ -223,7 +251,7 @@ void gdcmObject::FillObject(std::list elemList) { entry->SetLength(entry->GetValue().length()); } ptagHT->insert( PairHT(entry->GetKey(),entry) ); // add in the (multimap) H Table - plistEntries->insert(debInsertion ,entry); // en tete de liste des Patients + plistEntries->insert(debInsertion ,entry); // add at the begining of the Patient list ++finInsertion; }