X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmUtil.cxx;h=6ddba792fd5bcda525715a689687fa3d3d9bb7ff;hb=8d704be3e460a26db22f2d41dbaf02811bc71a45;hp=fcaf873afc2f330b5c2b9f6c2757756915e7ddae;hpb=3a295a448c7579e6ad5d574d4a28614588d5f05c;p=gdcm.git diff --git a/src/gdcmUtil.cxx b/src/gdcmUtil.cxx index fcaf873a..6ddba792 100644 --- a/src/gdcmUtil.cxx +++ b/src/gdcmUtil.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmUtil.cxx,v $ Language: C++ - Date: $Date: 2005/02/14 14:34:27 $ - Version: $Revision: 1.141 $ + Date: $Date: 2005/05/11 14:40:57 $ + Version: $Revision: 1.149 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -92,6 +92,8 @@ namespace gdcm //------------------------------------------------------------------------- const std::string Util::GDCM_UID = "1.2.826.0.1.3680043.2.1143"; std::string Util::RootUID = GDCM_UID; +const uint16_t Util::FMIV = 0x0001; +uint8_t *Util::FileMetaInformationVersion = (uint8_t *)&FMIV; //------------------------------------------------------------------------- // Public @@ -329,18 +331,20 @@ unsigned int Util::GetCurrentThreadID() // FIXME the implementation is far from complete #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) return (unsigned int)GetCurrentThreadId(); -#endif +#else #ifdef __linux__ return 0; // Doesn't work on fedora, but is in the man page... //return (unsigned int)gettid(); -#endif +#else #ifdef __sun return (unsigned int)thr_self(); #else //default implementation return 0; -#endif +#endif // __sun +#endif // __linux__ +#endif // Win32 } unsigned int Util::GetCurrentProcessID() @@ -446,11 +450,12 @@ bool Util::DicomStringEqual(const std::string &s1, const char *s2) #endif //_WIN32 /// \brief gets current M.A.C adress (for internal use only) +int GetMacAddrSys ( unsigned char *addr ); int GetMacAddrSys ( unsigned char *addr ) { #ifdef _WIN32 WSADATA WinsockData; - if (WSAStartup(MAKEWORD(2, 0), &WinsockData) != 0) + if ( (WSAStartup(MAKEWORD(2, 0), &WinsockData)) != 0) { std::cerr << "This program requires Winsock 2.x!" << std::endl; return -1; @@ -575,7 +580,7 @@ int GetMacAddrSys ( unsigned char *addr ) // implementation for POSIX system -#ifdef __sun +#if defined(CMAKE_HAVE_NET_IF_ARP_H) && defined(__sun) //The POSIX version is broken anyway on Solaris, plus would require full //root power struct arpreq parpreq; @@ -871,7 +876,6 @@ std::ostream &binary_write(std::ostream &os, const char *val) * \brief * @param os ostream to write to * @param val val - * @param len length of the 'value' to be written */ std::ostream &binary_write(std::ostream &os, std::string const &val) { @@ -881,7 +885,8 @@ std::ostream &binary_write(std::ostream &os, std::string const &val) /** * \brief binary_write binary_write * @param os ostream to write to - * @param val val + * @param val value + * @param len length of the 'value' to be written */ std::ostream &binary_write(std::ostream &os, const uint8_t *val, size_t len) { @@ -903,9 +908,8 @@ std::ostream &binary_write(std::ostream &os, const uint16_t *val, size_t len) // intermediate result before writting it. #if defined(GDCM_WORDS_BIGENDIAN) || defined(GDCM_FORCE_BIGENDIAN_EMULATION) const int BUFFER_SIZE = 4096; - uint16_t *binArea16 = (uint16_t*)val; - uint16_t *buffer = new uint16_t[BUFFER_SIZE/2]; - uint16_t *pbuffer = buffer; + static char buffer[BUFFER_SIZE]; + uint16_t *binArea16 = (uint16_t*)val; //for the const // how many BUFFER_SIZE long pieces in binArea ? int nbPieces = len/BUFFER_SIZE; //(16 bits = 2 Bytes) @@ -913,35 +917,26 @@ std::ostream &binary_write(std::ostream &os, const uint16_t *val, size_t len) for (int j=0;j> 8 ) & 0x00ff ) ); - // save CPU time : - // 1) Save 1 affectation and 2 AND operations - // buffer[i] = (binArea16[i] >> 8) | (binArea16[i] << 8); - // 2) Replace * operations by + operations using pointers - *pbuffer = *binArea16 >> 8 | *binArea16 >> 8; + *pbuffer = *binArea16 >> 8 | *binArea16 << 8; pbuffer++; binArea16++; } - os.write ( (char*)buffer, BUFFER_SIZE ); - binArea16 += BUFFER_SIZE/2; + os.write ( buffer, BUFFER_SIZE ); } if ( remainingSize > 0) { + uint16_t *pbuffer = (uint16_t*)buffer; //reinitialize pbuffer for (int i = 0; i < remainingSize/2; i++) { - //uint16_t val16 = binArea16[i]; - //buffer[i] = ((( val16 << 8 ) & 0xff00 ) | (( val16 >> 8 ) & 0x00ff) ); - *pbuffer = *binArea16 >> 8 | *binArea16 >> 8; + *pbuffer = *binArea16 >> 8 | *binArea16 << 8; pbuffer++; binArea16++; } - os.write ( (char*)buffer, remainingSize ); + os.write ( buffer, remainingSize ); } - delete[] buffer; return os; #else return os.write(reinterpret_cast(val), len);