]> Creatis software - gdcm.git/blobdiff - src/gdcmDocEntry.cxx
BUG: There was two bombs at the same time. Guess what what I found them all
[gdcm.git] / src / gdcmDocEntry.cxx
index 6dff08d1c4454a73f1ecd14c8557926bfc65209e..5b1a9f3bc530d230a319e6d6645b58f300d57e3b 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocEntry.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/06/22 13:47:33 $
-  Version:   $Revision: 1.8 $
+  Date:      $Date: 2004/07/02 13:55:27 $
+  Version:   $Revision: 1.13 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -38,25 +38,14 @@ gdcmDocEntry::gdcmDocEntry(gdcmDictEntry* in) {
    entry = in;
 }
 
-/**
- * \ingroup gdcmDocEntry
- * \brief   Canonical Printer
- * @param   os ostream we want to print in
- */
-void gdcmDocEntry::Print(std::ostream & os) {
-   std::ostringstream s;
-   s << std::endl;
-   PrintCommonPart(os);
-   os << s.str();
-}
-
 //-----------------------------------------------------------------------------
 // Print
 /**
  * \ingroup gdcmDocEntry
  * \brief   Prints the common part of gdcmValEntry, gdcmBinEntry, gdcmSeqEntry
+ * @param   os ostream we want to print in
  */
-void gdcmDocEntry::PrintCommonPart(std::ostream & os) {
+void gdcmDocEntry::Print(std::ostream & os) {
 
    printLevel=2; // FIXME
    
@@ -66,7 +55,7 @@ void gdcmDocEntry::PrintCommonPart(std::ostream & os) {
    TSKey v;
    std::string d2, vr;
    std::ostringstream s;
-   guint32 lgth;
+   uint32_t lgth;
    char greltag[10];  //group element tag
 
    g  = GetGroup();
@@ -117,20 +106,12 @@ void gdcmDocEntry::PrintCommonPart(std::ostream & os) {
  * \brief   Writes the common part of any gdcmValEntry, gdcmBinEntry, gdcmSeqEntry
  */
 void gdcmDocEntry::Write(FILE *fp, FileType filetype) {
-   std::cout << "gdcmDocEntry::Write : Is that what you wanted to do ? " << std::endl;
-   WriteCommonPart(fp, filetype);
-}
 
-/**
- * \ingroup gdcmDocEntry
- * \brief   Writes the common part of any gdcmValEntry, gdcmBinEntry, gdcmSeqEntry
- */
-void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype) {
-
-   guint16 group  = GetGroup();
-   VRKey   vr     = GetVR();
-   guint16 el     = GetElement();
-   guint32 lgr    = GetReadLength();
+   uint32_t FFFF  = 0xffffffff;
+   uint16_t group = GetGroup();
+   gdcmVRKey vr   = GetVR();
+   uint16_t el    = GetElement();
+   uint32_t lgr   = GetReadLength();
 
    if ( (group == 0xfffe) && (el == 0x0000) ) 
      // Fix in order to make some MR PHILIPS images e-film readable
@@ -163,21 +144,27 @@ void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype) {
          return;
       }
 
-      guint16 z=0;
-      guint16 shortLgr = lgr;
+      uint16_t z=0;
+      uint16_t shortLgr = lgr;
+
       if (vr == "unkn") {     // Unknown was 'written'
          // deal with Little Endian            
          fwrite ( &shortLgr,(size_t)2 ,(size_t)1 ,fp);
          fwrite ( &z,  (size_t)2 ,(size_t)1 ,fp);
       } else {
          fwrite (vr.c_str(),(size_t)2 ,(size_t)1 ,fp); 
-
-// TODO : better we set SQ length to ffffffff
-//      and write a Sequence Delimitor Item at the end of the Sequence!                    
-         if ( (vr == "OB") || (vr == "OW") || (vr == "SQ") )
+                  
+         if ( (vr == "OB") || (vr == "OW") || (vr == "SQ") || (vr == "UN") )
          {
             fwrite ( &z,  (size_t)2 ,(size_t)1 ,fp);
-            fwrite ( &lgr,(size_t)4 ,(size_t)1 ,fp);
+            if (vr == "SQ") {
+            // we set SQ length to ffffffff
+            // and  we shall write a Sequence Delimitor Item 
+            // at the end of the Sequence! 
+               fwrite ( &FFFF,(size_t)4 ,(size_t)1 ,fp);
+            } else {
+               fwrite ( &lgr,(size_t)4 ,(size_t)1 ,fp);
+            }
          } else {
             fwrite ( &shortLgr,(size_t)2 ,(size_t)1 ,fp);
          }
@@ -185,7 +172,11 @@ void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype) {
    } 
    else // IMPLICIT VR 
    { 
-      fwrite ( &lgr,(size_t)4 ,(size_t)1 ,fp);
+      if (vr == "SQ") {
+          fwrite ( &FFFF,(size_t)4 ,(size_t)1 ,fp);
+       } else {
+          fwrite ( &lgr,(size_t)4 ,(size_t)1 ,fp);
+       }
    }
 }
 
@@ -196,8 +187,8 @@ void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype) {
  * \ingroup gdcmDocEntry
  * \brief   Gets the full length of the elementary DocEntry (not only value length)
  */
-guint32 gdcmDocEntry::GetFullLength(void) {
-   guint32 l;
+uint32_t gdcmDocEntry::GetFullLength(void) {
+   uint32_t l;
    l = GetReadLength();
    if ( IsImplicitVR() ) 
       l = l + 8;  // 2 (gr) + 2 (el) + 4 (lgth) 
@@ -225,7 +216,8 @@ void gdcmDocEntry::Copy (gdcmDocEntry* e) {
 
 /**
  * \ingroup gdcmDocEntry
- * \brief   tells us if entry is the first one of a Sequence Item (fffe,e00d) 
+ * \brief   tells us if entry is the last one of a 'no length' SequenceItem 
+ *          (fffe,e00d) 
  */
 bool gdcmDocEntry::isItemDelimitor() {
    if ( (GetGroup() == 0xfffe) && (GetElement() == 0xe00d) )
@@ -235,7 +227,8 @@ bool gdcmDocEntry::isItemDelimitor() {
 }
 /**
  * \ingroup gdcmDocEntry
- * \brief   tells us if entry is the last one of a 'no length' Sequence fffe,e0dd) 
+ * \brief   tells us if entry is the last one of a 'no length' Sequence 
+ *          (fffe,e0dd) 
  */
 bool gdcmDocEntry::isSequenceDelimitor() {
    if (GetGroup() == 0xfffe && GetElement() == 0xe0dd)