]> Creatis software - gdcm.git/blobdiff - src/gdcmDocEntry.cxx
ENH: * Huge cleanup:
[gdcm.git] / src / gdcmDocEntry.cxx
index dce3028c11a37db9e755f09601d39df20b7f836b..fcd2db28b0edb4480db26844cacab23a6f81effd 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocEntry.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/22 03:05:41 $
-  Version:   $Revision: 1.28 $
+  Date:      $Date: 2004/12/03 20:16:57 $
+  Version:   $Revision: 1.34 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -18,6 +18,7 @@
 
 #include "gdcmDocEntry.h"
 #include "gdcmTS.h"
+#include "gdcmVR.h"
 #include "gdcmGlobal.h"
 #include "gdcmUtil.h"
 
@@ -43,6 +44,11 @@ DocEntry::DocEntry(DictEntry* in)
    DicomDict  = in;
    SetKey( in->GetKey( ) );
    Offset     = 0 ; // To avoid further missprinting
+
+   // init some variables
+   ReadLength = 0;
+   UsableLength = 0;
+   PrintLevel = 0;
 }
 
 //-----------------------------------------------------------------------------
@@ -57,15 +63,12 @@ void DocEntry::Print(std::ostream& os)
    PrintLevel = 2; // FIXME
    
    size_t o;
-   unsigned short int g, e;
    std::string st;
    TSKey v;
    std::string d2, vr;
    std::ostringstream s;
    uint32_t lgth;
 
-   g  = GetGroup();
-   e  = GetElement();
    o  = GetOffset();
    vr = GetVR();
 
@@ -118,7 +121,7 @@ void DocEntry::Print(std::ostream& os)
  * @param fp already open file pointer
  * @param filetype type of the file to be written
  */
-void DocEntry::Write(std::ofstream* fp, FileType filetype)
+void DocEntry::WriteContent(std::ofstream* fp, FileType filetype)
 {
    uint32_t ffff  = 0xffffffff;
    uint16_t group = GetGroup();
@@ -137,9 +140,9 @@ void DocEntry::Write(std::ofstream* fp, FileType filetype)
    //
    // ----------- Writes the common part
    //
-   fp->write ((char*) &group,(size_t)2 );  //group
-   fp->write ( (char*)&el,   (size_t)2 );  //element
-      
+   binary_write( *fp, group);  //group
+   binary_write( *fp, el);  //element
+
    if ( filetype == ExplicitVR )
    {
       // Special case of delimiters:
@@ -155,8 +158,8 @@ void DocEntry::Write(std::ofstream* fp, FileType filetype)
 
          // TODO : verify if the Sequence Delimitor Item was forced during Parsing 
 
-         int ff = 0xffffffff;
-         fp->write ((char*)&ff,(size_t)4 );
+         uint32_t ff = 0xffffffff;
+         binary_write(*fp, ff);
          return;
       }
 
@@ -167,32 +170,32 @@ void DocEntry::Write(std::ofstream* fp, FileType filetype)
       {
          // Unknown was 'written'
          // deal with Little Endian            
-         fp->write ( (char*)&shortLgr,(size_t)2 );
-         fp->write ( (char*)&z,       (size_t)2 );
+         binary_write(*fp, shortLgr);
+         binary_write(*fp, z);
       }
       else
       {
-         fp->write (vr.c_str(),(size_t)2 ); 
-
+         binary_write(*fp, vr);
+         assert( vr.size() == 2 );
                   
          if ( (vr == "OB") || (vr == "OW") || (vr == "SQ") || (vr == "UN") )
          {
-            fp->write ( (char*)&z,  (size_t)2 );
+            binary_write(*fp, z);
             if (vr == "SQ")
             {
                // we set SQ length to ffffffff
                // and  we shall write a Sequence Delimitor Item 
                // at the end of the Sequence! 
-               fp->write ( (char*)&ffff,(size_t)4 );
+               binary_write(*fp, ffff);
             }
             else
             {
-               fp->write ( (char*)&lgr,(size_t)4 );
+               binary_write(*fp, lgr);
             }
          }
          else
          {
-            fp->write ( (char*)&shortLgr,(size_t)2 );
+            binary_write(*fp, shortLgr);
          }
       }
    } 
@@ -200,11 +203,11 @@ void DocEntry::Write(std::ofstream* fp, FileType filetype)
    { 
       if (vr == "SQ")
       {
-         fp->write ( (char*)&ffff,(size_t)4 );
+         binary_write(*fp, ffff);
       }
       else
       {
-         fp->write ( (char*)&lgr,(size_t)4 );
+         binary_write(*fp, lgr);
       }
    }
 }
@@ -244,7 +247,7 @@ uint32_t DocEntry::GetFullLength()
  */
 void DocEntry::Copy (DocEntry* e)
 {
-   DicomDict    = e->DicomDict;
+//   DicomDict    = e->DicomDict;
    UsableLength = e->UsableLength;
    ReadLength   = e->ReadLength;
    ImplicitVR   = e->ImplicitVR;