// gdcmObject.cxx
//-----------------------------------------------------------------------------
#include "gdcmObject.h"
-#include "gdcmUtil.h"
+#include "gdcmGlobal.h"
+#include "gdcmDebug.h"
//-----------------------------------------------------------------------------
-// Constructor / Destructor
/**
* \ingroup gdcmObject
* \brief Constructor
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;
}
}
}
* @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();
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,
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;
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
*/
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;
*/
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;
//-----------------------------------------------------------------------------
// Protected
-/*
+/**
* \ingroup gdcmObject
* \brief add the 'Object' related Dicom Elements to the listEntries
* of a partially created DICOMDIR
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)
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;
}