]> Creatis software - gdcm.git/blobdiff - src/gdcmHeader.cxx
* src/gdcmDicSet.[h|cxx] : add virtual entries to have a reference of
[gdcm.git] / src / gdcmHeader.cxx
index a8ca36fbcdb4bbfbbc86e36aa6e447fd96c83f7f..e6177650215238ed2444d631227a586fc43d74b6 100644 (file)
@@ -57,6 +57,7 @@ gdcmHeader::gdcmHeader(const char *InFilename,
    if ( !OpenFile(exception_on_error))
       return;
    ParseHeader();
+   wasUpdated = 0;  // will be set to 1 if user adds an entry
    LoadHeaderEntries();
    CloseFile();
 }
@@ -1661,7 +1662,7 @@ void gdcmHeader::LoadHeaderEntrySafe(gdcmHeaderEntry * entry) {
                                                        CorrectElem);
          if (!NewTag) {
             // This correct tag is not in the dictionary. Create a new one.
-            NewTag = new gdcmDictEntry(CorrectGroup, CorrectElem);
+            NewTag = Dicts->NewVirtualDictEntry(CorrectGroup, CorrectElem);
          }
          // FIXME this can create a memory leaks on the old entry that be
          // left unreferenced.
@@ -1751,7 +1752,7 @@ void gdcmHeader::FindHeaderEntryVR( gdcmHeaderEntry *ElVal) {
       // be unwise to overwrite the VR of a dictionary (since it would
       // compromise it's next user), we need to clone the actual DictEntry
       // and change the VR for the read one.
-      gdcmDictEntry* NewTag = new gdcmDictEntry(ElVal->GetGroup(),
+      gdcmDictEntry* NewTag = Dicts->NewVirtualDictEntry(ElVal->GetGroup(),
                                  ElVal->GetElement(),
                                  vr,
                                  "FIXME",
@@ -1839,9 +1840,11 @@ void gdcmHeader::FixHeaderEntryFoundLength(gdcmHeaderEntry * ElVal, guint32 Foun
     // if we don't, we lost 28800 characters from the Header :-(
                                                  
    else if(ElVal->GetGroup() == 0xfffe){ 
-      //printf("========================= %08x %d\n",FoundLength,FoundLength);
-                         // sometimes, length seems to be wrong                                      
-      //FoundLength =0;  // some more clever checking to be done !                                                     
+                       // sometimes, length seems to be wrong                                      
+      FoundLength =0;  // some more clever checking to be done !
+                       // I give up!
+                      // only  gdcm-MR-PHILIPS-16-Multi-Seq.dcm
+                      // causes troubles :-(                                                     
    }     
     
    ElVal->SetUsableLength(FoundLength);
@@ -2313,7 +2316,7 @@ gdcmHeaderEntry* gdcmHeader::NewHeaderEntryByName(std::string Name) {
 
    gdcmDictEntry * NewTag = GetDictEntryByName(Name);
    if (!NewTag)
-      NewTag = new gdcmDictEntry(0xffff, 0xffff, "LO", "Unknown", Name);
+      NewTag = Dicts->NewVirtualDictEntry(0xffff, 0xffff, "LO", "Unknown", Name);
 
    gdcmHeaderEntry* NewElVal = new gdcmHeaderEntry(NewTag);
    if (!NewElVal) {
@@ -2336,7 +2339,7 @@ gdcmHeaderEntry* gdcmHeader::NewHeaderEntryByNumber(guint16 Group, guint16 Elem)
    // Find out if the tag we encountered is in the dictionaries:
    gdcmDictEntry * NewTag = GetDictEntryByNumber(Group, Elem);
    if (!NewTag)
-      NewTag = new gdcmDictEntry(Group, Elem);
+      NewTag = Dicts->NewVirtualDictEntry(Group, Elem);
 
    gdcmHeaderEntry* NewElVal = new gdcmHeaderEntry(NewTag);
    if (!NewElVal) {
@@ -2355,7 +2358,7 @@ gdcmHeaderEntry* gdcmHeader::NewHeaderEntryByNumber(guint16 Group, guint16 Elem)
  * \note    A fake TagKey is generated so the PubDict can keep it's coherence.
  * @param   NewTagName The name to be given to this new tag.
  * @param   VR The Value Representation to be given to this new tag.
- * @ return The newly hand crafted Element Value.
+ * @return  The newly hand crafted Element Value.
  */
 gdcmHeaderEntry* gdcmHeader::NewManualHeaderEntryToPubDict(std::string NewTagName, 
                                                            std::string VR) {
@@ -2370,7 +2373,7 @@ gdcmHeaderEntry* gdcmHeader::NewManualHeaderEntryToPubDict(std::string NewTagNam
                      "Group 0xffff in Public Dict is full");
       return (gdcmHeaderEntry*)0;
    }
-   NewEntry = new gdcmDictEntry(StuffGroup, FreeElem,
+   NewEntry = Dicts->NewVirtualDictEntry(StuffGroup, FreeElem,
                                 VR, "GDCM", NewTagName);
    NewElVal = new gdcmHeaderEntry(NewEntry);
    PubEntrySet.Add(NewElVal);