]> Creatis software - gdcm.git/blobdiff - src/gdcmDocument.cxx
*** empty log message ***
[gdcm.git] / src / gdcmDocument.cxx
index 0d32d8fc66d0c655e67a4dfbf2a5a0a4e3b87b4e..e561603b8384e10910d82ac1dbbc06568944339c 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocument.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/25 16:35:16 $
-  Version:   $Revision: 1.141 $
+  Date:      $Date: 2004/11/30 16:59:32 $
+  Version:   $Revision: 1.144 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -74,7 +74,7 @@ static const char *TransferSyntaxStrings[] =  {
                                                                                 
 //-----------------------------------------------------------------------------
 // Refer to Document::CheckSwap()
-const unsigned int Document::HEADER_LENGTH_TO_READ = 256;
+//const unsigned int Document::HEADER_LENGTH_TO_READ = 256;
 
 // Refer to Document::SetMaxSizeLoadEntry()
 const unsigned int Document::MAX_SIZE_LOAD_ELEMENT_VALUE = 0xfff; // 4096
@@ -101,19 +101,19 @@ Document::Document( std::string const & filename ) : ElementSet(-1)
 
    dbg.Verbose(0, "Document::Document: starting parsing of file: ",
                   Filename.c_str());
-   Fp->seekg( 0,  std::ios_base::beg);
+   Fp->seekg( 0,  std::ios::beg);
    
-   Fp->seekg(0,  std::ios_base::end);
+   Fp->seekg(0,  std::ios::end);
    long lgt = Fp->tellg();
            
-   Fp->seekg( 0,  std::ios_base::beg);
+   Fp->seekg( 0,  std::ios::beg);
    CheckSwap();
    long beg = Fp->tellg();
    lgt -= beg;
    
    ParseDES( this, beg, lgt, false); // le Load sera fait a la volee
 
-   Fp->seekg( 0,  std::ios_base::beg);
+   Fp->seekg( 0,  std::ios::beg);
    
    // Load 'non string' values
       
@@ -443,7 +443,7 @@ std::ifstream* Document::OpenFile()
    }
  
    //DICOM
-   Fp->seekg(126L, std::ios_base::cur);
+   Fp->seekg(126L, std::ios::cur);
    char dicm[4];
    Fp->read(dicm,  (size_t)4);
    if( memcmp(dicm, "DICM", 4) == 0 )
@@ -979,7 +979,7 @@ bool Document::SetEntryByNumber(uint8_t*content, int lgth,
  * @param element element number of the Entry to modify
  * @return  true on success, false otherwise.
  */
-bool Document::SetEntryLengthByNumber(uint32_t l, 
+/*bool Document::SetEntryLengthByNumber(uint32_t l, 
                                       uint16_t group, uint16_t element) 
 {
    /// \todo use map methods, instead of multimap JPR
@@ -995,7 +995,7 @@ bool Document::SetEntryLengthByNumber(uint32_t l,
    ( ((TagHT.equal_range(key)).first)->second )->SetLength(l); 
 
    return true ;
-}
+}*/
 
 /**
  * \brief   Gets (from Header) the offset  of a 'non string' element value 
@@ -1004,7 +1004,7 @@ bool Document::SetEntryLengthByNumber(uint32_t l,
  * @param elem  element number of the Entry
  * @return File Offset of the Element Value 
  */
-size_t Document::GetEntryOffsetByNumber(uint16_t group, uint16_t elem) 
+/*size_t Document::GetEntryOffsetByNumber(uint16_t group, uint16_t elem) 
 {
    DocEntry* entry = GetDocEntryByNumber(group, elem);
    if (!entry) 
@@ -1013,7 +1013,7 @@ size_t Document::GetEntryOffsetByNumber(uint16_t group, uint16_t elem)
       return 0;
    }
    return entry->GetOffset();
-}
+}*/
 
 /**
  * \brief   Gets (from Header) a 'non string' element value 
@@ -1056,30 +1056,6 @@ void Document::LoadEntryBinArea(uint16_t group, uint16_t elem)
       return;
 
    LoadEntryBinArea(binElement);
-/*   size_t o =(size_t)docElement->GetOffset();
-   Fp->seekg( o, std::ios_base::beg);
-   size_t l = docElement->GetLength();
-   uint8_t* a = new uint8_t[l];
-   if(!a)
-   {
-      dbg.Verbose(0, "Document::LoadEntryBinArea cannot allocate a");
-      return;
-   }
-
-   // Read the value
-   Fp->read((char*)a, l);
-   if( Fp->fail() || Fp->eof() )//Fp->gcount() == 1
-   {
-      delete[] a;
-      return;
-   }
-
-   // Set the value to the DocEntry
-   if( !SetEntryBinAreaByNumber( a, group, elem ) )
-   {
-      delete[] a;
-      dbg.Verbose(0, "Document::LoadEntryBinArea setting failed.");
-   }*/
 }
 
 /**
@@ -1097,7 +1073,7 @@ void Document::LoadEntryBinArea(BinEntry* element)
       OpenFile();
 
    size_t o =(size_t)element->GetOffset();
-   Fp->seekg(o, std::ios_base::beg);
+   Fp->seekg(o, std::ios::beg);
 
    size_t l = element->GetLength();
    uint8_t* a = new uint8_t[l];
@@ -1128,7 +1104,7 @@ void Document::LoadEntryBinArea(BinEntry* element)
  * @param   element Element number of the searched Dicom Element 
  * @return  
  */
-bool Document::SetEntryBinAreaByNumber(uint8_t* area,
+/*bool Document::SetEntryBinAreaByNumber(uint8_t* area,
                                        uint16_t group, uint16_t element) 
 {
    DocEntry* currentEntry = GetDocEntryByNumber(group, element);
@@ -1144,7 +1120,7 @@ bool Document::SetEntryBinAreaByNumber(uint8_t* area,
    }
 
    return false;
-}
+}*/
 
 /**
  * \brief   Update the entries with the shadow dictionary. 
@@ -1267,7 +1243,7 @@ void Document::LoadDocEntrySafe(DocEntry * entry)
    {
       long PositionOnEntry = Fp->tellg();
       LoadDocEntry(entry);
-      Fp->seekg(PositionOnEntry, std::ios_base::beg);
+      Fp->seekg(PositionOnEntry, std::ios::beg);
    }
 }
 
@@ -1447,16 +1423,16 @@ void Document::ParseDES(DocEntrySet *set, long offset,
              if ( ts == RLELossless ) 
              {
                 long PositionOnEntry = Fp->tellg();
-                Fp->seekg( newDocEntry->GetOffset(), std::ios_base::beg );
+                Fp->seekg( newDocEntry->GetOffset(), std::ios::beg );
                 ComputeRLEInfo();
-                Fp->seekg( PositionOnEntry, std::ios_base::beg );
+                Fp->seekg( PositionOnEntry, std::ios::beg );
              }
              else if ( IsJPEG() )
              {
                 long PositionOnEntry = Fp->tellg();
-                Fp->seekg( newDocEntry->GetOffset(), std::ios_base::beg );
+                Fp->seekg( newDocEntry->GetOffset(), std::ios::beg );
                 ComputeJPEGFragmentInfo();
-                Fp->seekg( PositionOnEntry, std::ios_base::beg );
+                Fp->seekg( PositionOnEntry, std::ios::beg );
              }
          }
     
@@ -1595,7 +1571,7 @@ void Document::LoadDocEntry(DocEntry* entry)
    std::string  vr = entry->GetVR();
    uint32_t length = entry->GetLength();
 
-   Fp->seekg((long)entry->GetOffset(), std::ios_base::beg);
+   Fp->seekg((long)entry->GetOffset(), std::ios::beg);
 
    // A SeQuence "contains" a set of Elements.  
    //          (fffe e000) tells us an Element is beginning
@@ -1649,7 +1625,7 @@ void Document::LoadDocEntry(DocEntry* entry)
 
       // to be sure we are at the end of the value ...
       Fp->seekg((long)entry->GetOffset()+(long)entry->GetLength(),
-                std::ios_base::beg);
+                std::ios::beg);
       return;
    }
 
@@ -1777,7 +1753,7 @@ void Document::FindDocEntryLength( DocEntry *entry )
          // The following reserved two bytes (see PS 3.5-2003, section
          // "7.1.2 Data element structure with explicit vr", p 27) must be
          // skipped before proceeding on reading the length on 4 bytes.
-         Fp->seekg( 2L, std::ios_base::cur);
+         Fp->seekg( 2L, std::ios::cur);
          uint32_t length32 = ReadInt32();
 
          if ( (vr == "OB" || vr == "OW") && length32 == 0xffffffff ) 
@@ -1797,9 +1773,9 @@ void Document::FindDocEntryLength( DocEntry *entry )
                // until the end of the file. Hence we artificially fix the
                // the length and proceed.
                long currentPosition = Fp->tellg();
-               Fp->seekg(0L,std::ios_base::end);
+               Fp->seekg(0L,std::ios::end);
                long lengthUntilEOF = (long)(Fp->tellg())-currentPosition;
-               Fp->seekg(currentPosition, std::ios_base::beg);
+               Fp->seekg(currentPosition, std::ios::beg);
                entry->SetLength(lengthUntilEOF);
                return;
             }
@@ -1917,7 +1893,7 @@ void Document::FindDocEntryVR( DocEntry *entry )
 
    if( !CheckDocEntryVR(entry, vr) )
    {
-      Fp->seekg(positionOnEntry, std::ios_base::beg);
+      Fp->seekg(positionOnEntry, std::ios::beg);
       // When this element is known in the dictionary we shall use, e.g. for
       // the semantics (see the usage of IsAnInteger), the VR proposed by the
       // dictionary entry. Still we have to flag the element as implicit since
@@ -2162,8 +2138,8 @@ void Document::SkipDocEntry(DocEntry *entry)
  */
 void Document::SkipToNextDocEntry(DocEntry *entry) 
 {
-   Fp->seekg((long)(entry->GetOffset()),     std::ios_base::beg);
-   Fp->seekg( (long)(entry->GetReadLength()), std::ios_base::cur);
+   Fp->seekg((long)(entry->GetOffset()),     std::ios::beg);
+   Fp->seekg( (long)(entry->GetReadLength()), std::ios::cur);
 }
 
 /**
@@ -2331,7 +2307,7 @@ uint32_t Document::FindDocEntryLengthOB()
       {
          dbg.Verbose(1, "Document::FindDocEntryLengthOB: neither an Item "
                         "tag nor a Sequence delimiter tag."); 
-         Fp->seekg(positionOnEntry, std::ios_base::beg);
+         Fp->seekg(positionOnEntry, std::ios::beg);
          throw FormatUnexpected("Document::FindDocEntryLengthOB()",
                                 "Neither an Item tag nor a Sequence "
                                 "delimiter tag.");
@@ -2352,7 +2328,7 @@ uint32_t Document::FindDocEntryLengthOB()
          break;
       }
    }
-   Fp->seekg( positionOnEntry, std::ios_base::beg);
+   Fp->seekg( positionOnEntry, std::ios::beg);
    return totalLength;
 }
 
@@ -2408,7 +2384,7 @@ uint32_t Document::ReadInt32()
 void Document::SkipBytes(uint32_t nBytes)
 {
    //FIXME don't dump the returned value
-   Fp->seekg((long)nBytes, std::ios_base::cur);
+   Fp->seekg((long)nBytes, std::ios::cur);
 }
 
 /**
@@ -2443,7 +2419,7 @@ bool Document::CheckSwap()
    uint32_t  s32;
    uint16_t  s16;
        
-   char deb[256]; //HEADER_LENGTH_TO_READ];
+   char deb[256];
     
    // First, compare HostByteOrder and NetworkByteOrder in order to
    // determine if we shall need to swap bytes (i.e. the Endian type).
@@ -2458,7 +2434,7 @@ bool Document::CheckSwap()
          
    // The easiest case is the one of a DICOM header, since it possesses a
    // file preamble where it suffice to look for the string "DICM".
-   Fp->read(deb, HEADER_LENGTH_TO_READ);
+   Fp->read(deb, 256);
    
    char *entCur = deb + 128;
    if( memcmp(entCur, "DICM", (size_t)4) == 0 )
@@ -2522,8 +2498,8 @@ bool Document::CheckSwap()
       
       // Position the file position indicator at first tag (i.e.
       // after the file preamble and the "DICM" string).
-      Fp->seekg(0, std::ios_base::beg);
-      Fp->seekg ( 132L, std::ios_base::beg);
+      Fp->seekg(0, std::ios::beg);
+      Fp->seekg ( 132L, std::ios::beg);
       return true;
    } // End of DicomV3
 
@@ -2531,7 +2507,7 @@ bool Document::CheckSwap()
    // preamble. We can reset the file position indicator to where the data
    // is (i.e. the beginning of the file).
    dbg.Verbose(1, "Document::CheckSwap:", "not a DICOM Version3 file");
-   Fp->seekg(0, std::ios_base::beg);
+   Fp->seekg(0, std::ios::beg);
 
    // Our next best chance would be to be considering a 'clean' ACR/NEMA file.
    // By clean we mean that the length of the first tag is written down.
@@ -2826,7 +2802,7 @@ bool Document::ReadTag(uint16_t testGroup, uint16_t testElement)
       s << "  at address: " << (unsigned)currentPosition << std::endl;
       dbg.Verbose(0, "Document::ReadItemTagLength: wrong Item Tag found:");
       dbg.Verbose(0, s.str().c_str());
-      Fp->seekg(positionOnEntry, std::ios_base::beg);
+      Fp->seekg(positionOnEntry, std::ios::beg);
 
       return false;
    }