X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDocument.cxx;h=0b907069e0465b3684389aeb0dd4747898ee550d;hb=dbf4b38fdf1a64f49d550b28240806729632f2c0;hp=9c12f0ce8a8aa4f97e5210cd1c9dfec6311580ac;hpb=25c9af365d9221bd45f3fbe27275ff0f66a265b1;p=gdcm.git diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index 9c12f0ce..0b907069 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocument.cxx,v $ Language: C++ - Date: $Date: 2005/02/07 09:51:03 $ - Version: $Revision: 1.225 $ + Date: $Date: 2005/02/14 10:45:04 $ + Version: $Revision: 1.230 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -32,15 +32,6 @@ #include #include -// For nthos: -#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) - #include -#endif - -#ifdef CMAKE_HAVE_NETINET_IN_H - #include -#endif - namespace gdcm { //----------------------------------------------------------------------------- @@ -74,8 +65,7 @@ Document::Document( std::string const &filename ) Group0002Parsed = false; gdcmWarningMacro( "Starting parsing of file: " << Filename.c_str()); - // Fp->seekg( 0, std::ios::beg); - + Fp->seekg(0, std::ios::end); long lgt = Fp->tellg(); @@ -353,7 +343,9 @@ uint16_t Document::SwapShort(uint16_t a) { if ( SwapCode == 4321 || SwapCode == 2143 ) { - a = ((( a << 8 ) & 0xff00 ) | (( a >> 8 ) & 0x00ff ) ); + //a = ((( a << 8 ) & 0xff00 ) | (( a >> 8 ) & 0x00ff ) ); + // Save CPU time + a = ( a << 8 ) | ( a >> 8 ); } return a; } @@ -370,11 +362,15 @@ uint32_t Document::SwapLong(uint32_t a) case 1234 : break; case 4321 : - a=( ((a<<24) & 0xff000000) | ((a<<8) & 0x00ff0000) | - ((a>>8) & 0x0000ff00) | ((a>>24) & 0x000000ff) ); +// a=( ((a<<24) & 0xff000000) | ((a<<8) & 0x00ff0000) | +// ((a>>8) & 0x0000ff00) | ((a>>24) & 0x000000ff) ); +// save CPU time + a=( ( a<<24) | ((a<<8) & 0x00ff0000) | + ((a>>8) & 0x0000ff00) | (a>>24) ); break; case 3412 : - a=( ((a<<16) & 0xffff0000) | ((a>>16) & 0x0000ffff) ); +// a=( ((a<<16) & 0xffff0000) | ((a>>16) & 0x0000ffff) ); + a=( (a<<16) | (a>>16) ); break; case 2143 : a=( ((a<< 8) & 0xff00ff00) | ((a>>8) & 0x00ff00ff) ); @@ -470,7 +466,7 @@ bool Document::CloseFile() delete Fp; Fp = 0; } - return true; //FIXME how do we detect a non-closed ifstream ? + return true; } /** @@ -559,7 +555,6 @@ void Document::LoadEntryBinArea(BinEntry *elem) return; } - /// \todo check the result Fp->read((char*)a, l); if( Fp->fail() || Fp->eof()) { @@ -998,12 +993,6 @@ void Document::ParseSQ( SeqEntry *seqEntry, { dlm_mod = false; } - // FIXME, TODO - // when we're here, element fffe,e000 is already passed. - // it's lost for the SQItem we're going to process !! - - //ParseDES(itemSQ, newDocEntry->GetOffset(), l, dlm_mod); - //delete newDocEntry; // FIXME well ... it's too late to use it ! // Let's try :------------ // remove fff0,e000, created out of the SQItem @@ -1101,7 +1090,6 @@ void Document::LoadDocEntry(DocEntry *entry) return; } - /// \todo Any compacter code suggested (?) if ( IsDocEntryAnInteger(entry) ) { uint32_t NewInt; @@ -1634,7 +1622,7 @@ void Document::FixDocEntryFoundLength(DocEntry *entry, if ( gr != 0x0008 || ( elem != 0x0070 && elem != 0x0080 ) ) { foundLength = 10; - entry->SetReadLength(10); /// \todo a bug is to be fixed !? + entry->SetReadLength(10); // a bug is to be fixed !? } } @@ -1645,7 +1633,7 @@ void Document::FixDocEntryFoundLength(DocEntry *entry, else if ( gr == 0x0009 && ( elem == 0x1113 || elem == 0x1114 ) ) { foundLength = 4; - entry->SetReadLength(4); /// \todo a bug is to be fixed !? + entry->SetReadLength(4); // a bug is to be fixed !? } else if ( entry->GetVR() == "SQ" ) @@ -1730,8 +1718,6 @@ bool Document::CheckSwap() // 0x00000004. Finding the swap code in then straigthforward. Trouble // occurs when we can't find such group... - uint32_t x = 4; // x : for ntohs - bool net2host; // true when HostByteOrder is the same as NetworkByteOrder uint32_t s32; uint16_t s16; @@ -1739,14 +1725,7 @@ bool Document::CheckSwap() // First, compare HostByteOrder and NetworkByteOrder in order to // determine if we shall need to swap bytes (i.e. the Endian type). - if ( x == ntohs(x) ) - { - net2host = true; - } - else - { - net2host = false; - } + bool net2host = Util::IsCurrentProcessorBigEndian(); // The easiest case is the one of a 'true' DICOM header, we just have // to look for the string "DICM" inside the file preamble. @@ -1925,7 +1904,7 @@ void Document::SwitchByteSwapCode() /** * \brief during parsing, Header Elements too long are not loaded in memory - * @param newSize + * @param newSize new size */ void Document::SetMaxSizeLoadEntry(long newSize) { @@ -1943,8 +1922,8 @@ void Document::SetMaxSizeLoadEntry(long newSize) /** * \brief Header Elements too long will not be printed - * \todo See comments of \ref Document::MAX_SIZE_PRINT_ELEMENT_VALUE - * @param newSize + * See comments of \ref Document::MAX_SIZE_PRINT_ELEMENT_VALUE + * @param newSize new size */ void Document::SetMaxSizePrintEntry(long newSize) {