X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmUtil.cxx;h=316ab03f8a05e9dad3187a93cf93ab0bde5ad69c;hb=b3a89cd11ea30d76fac69e83e1047d7e833d2ff4;hp=10cf19e106c989e34727869761d11fa2e858b2ef;hpb=ca9727d30a3e0cd6285df6223e1eabd2ad080282;p=gdcm.git diff --git a/src/gdcmUtil.cxx b/src/gdcmUtil.cxx index 10cf19e1..316ab03f 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 10:43:53 $ - Version: $Revision: 1.140 $ + Date: $Date: 2005/02/14 16:20:30 $ + Version: $Revision: 1.145 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -880,7 +880,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) { @@ -892,6 +893,7 @@ std::ostream &binary_write(std::ostream &os, const uint8_t *val, size_t len) * \brief binary_write binary_write * @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, const uint16_t *val, size_t len) { @@ -901,9 +903,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) @@ -911,35 +912,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);