kdecore Library API Documentation

kswap.h

00001 /* 00002 This file is part of the KDE libraries. 00003 Copyright (c) 2004 Szombathelyi György <gyurco@freemail.hu> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License version 2 as published by the Free Software Foundation. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef KSWAP_H 00021 #define KSWAP_H 00022 00023 #ifdef HAVE_CONFIG_H 00024 #include <config.h> 00025 #endif 00026 00027 #include <qglobal.h> 00028 00047 #ifdef HAVE_BYTESWAP_H 00048 #include <byteswap.h> 00049 00050 inline Q_UINT16 KSWAP_16( Q_UINT16 b ) { return bswap_16( b ); } 00051 inline Q_INT16 KSWAP_16( Q_INT16 b ) { return bswap_16( (Q_UINT16)b ); } 00052 inline Q_UINT32 KSWAP_32( Q_UINT32 b ) { return bswap_32( b ); } 00053 inline Q_INT32 KSWAP_32( Q_INT32 b ) { return bswap_32( (Q_UINT32)b ); } 00054 inline Q_UINT64 KSWAP_64( Q_UINT64 b ) { return bswap_64( b ); } 00055 inline Q_INT64 KSWAP_64( Q_INT64 b ) { return bswap_64( (Q_UINT64)b ); } 00056 00057 #else /* HAVE_BYTESWAP_H */ 00058 #ifdef WORDS_BIGENDIAN 00059 inline Q_UINT16 KSWAP_16( Q_UINT16 b ) 00060 { 00061 return (((b) & 0x00ff) << 8 | ((b) & 0xff00) >> 8); 00062 } 00063 00064 inline Q_INT16 KSWAP_16( Q_INT16 b ) 00065 { 00066 return ((((Q_UINT16)b) & 0x00ff) << 8 | (((Q_UINT16)b) & 0xff00) >> 8); 00067 } 00068 00069 inline Q_UINT32 KSWAP_32( Q_UINT32 b ) 00070 { 00071 return 00072 ((((b) & 0xff000000) >> 24) | (((b) & 0x00ff0000) >> 8) | \ 00073 (((b) & 0x0000ff00) << 8) | (((b) & 0x000000ff) << 24)); 00074 } 00075 00076 inline Q_INT32 KSWAP_32( Q_INT32 b ) 00077 { 00078 return 00079 (((((Q_UINT32)b) & 0xff000000) >> 24) | ((((Q_UINT32)b) & 0x00ff0000) >> 8) | \ 00080 ((((Q_UINT32)b) & 0x0000ff00) << 8) | ((((Q_UINT32)b) & 0x000000ff) << 24)); 00081 } 00082 #else /* WORDS_BIGENDIAN */ 00083 #include <sys/types.h> 00084 #include <netinet/in.h> 00085 00086 inline Q_UINT16 KSWAP_16( Q_UINT16 b ) { return htons(b); } 00087 inline Q_INT16 KSWAP_16( Q_INT16 b ) { return htons((Q_UINT16)b); } 00088 inline Q_UINT32 KSWAP_32( Q_UINT32 b ) { return htonl(b); } 00089 inline Q_INT32 KSWAP_32( Q_INT32 b ) { return htonl((Q_UINT32)b); } 00090 #endif 00091 inline Q_UINT64 KSWAP_64( Q_UINT64 b ) 00092 { 00093 union { 00094 Q_UINT64 ll; 00095 Q_UINT32 l[2]; 00096 } w, r; 00097 w.ll = b; 00098 r.l[0] = KSWAP_32( w.l[1] ); 00099 r.l[1] = KSWAP_32( w.l[0] ); 00100 return r.ll; 00101 } 00102 00103 inline Q_INT64 KSWAP_64( Q_INT64 b ) 00104 { 00105 union { 00106 Q_UINT64 ll; 00107 Q_UINT32 l[2]; 00108 } w, r; 00109 w.ll = (Q_UINT64) b; 00110 r.l[0] = KSWAP_32( w.l[1] ); 00111 r.l[1] = KSWAP_32( w.l[0] ); 00112 return r.ll; 00113 } 00114 #endif /* !HAVE_BYTESWAP_H */ 00115 00120 inline Q_UINT16 KFromToBigEndian( Q_UINT16 b ) 00121 { 00122 #ifdef WORDS_BIGENDIAN 00123 return b; 00124 #else 00125 return KSWAP_16(b); 00126 #endif 00127 } 00128 00133 inline void KFromToBigEndian( Q_UINT16 *out, Q_UINT16 *in, uint len ) 00134 { 00135 #ifdef WORDS_BIGENDIAN 00136 if ( out != in ) memcpy( out, in, len<<1 ) ; 00137 #else 00138 while ( len>0 ) { *out = KSWAP_16( *in ); out++; in++; len--; } 00139 #endif 00140 } 00141 00146 inline Q_UINT32 KFromToBigEndian( Q_UINT32 b ) 00147 { 00148 #ifdef WORDS_BIGENDIAN 00149 return b; 00150 #else 00151 return KSWAP_32(b); 00152 #endif 00153 } 00154 00159 inline void KFromToBigEndian( Q_UINT32 *out, Q_UINT32 *in, uint len ) 00160 { 00161 #ifdef WORDS_BIGENDIAN 00162 if ( out != in ) memcpy( out, in, len<<2 ) ; 00163 #else 00164 while ( len>0 ) { *out = KSWAP_32( *in ); out++; in++; len--; } 00165 #endif 00166 } 00167 00172 inline Q_UINT64 KFromToBigEndian( Q_UINT64 b ) 00173 { 00174 #ifdef WORDS_BIGENDIAN 00175 return b; 00176 #else 00177 return KSWAP_64(b); 00178 #endif 00179 } 00180 00185 inline void KFromToBigEndian( Q_UINT64 *out, Q_UINT64 *in, uint len ) 00186 { 00187 #ifdef WORDS_BIGENDIAN 00188 if ( out != in ) memcpy( out, in, len<<3 ) ; 00189 #else 00190 while ( len>0 ) { *out = KSWAP_64( *in ); out++; in++; len--; } 00191 #endif 00192 } 00193 00198 inline Q_INT16 KFromToBigEndian( Q_INT16 b ) 00199 { 00200 #ifdef WORDS_BIGENDIAN 00201 return b; 00202 #else 00203 return KSWAP_16(b); 00204 #endif 00205 } 00206 00211 inline void KFromToBigEndian( Q_INT16 *out, Q_INT16 *in, uint len ) 00212 { 00213 #ifdef WORDS_BIGENDIAN 00214 if ( out != in ) memcpy( out, in, len<<1 ) ; 00215 #else 00216 while ( len>0 ) { *out = KSWAP_16( *in ); out++; in++; len--; } 00217 #endif 00218 } 00219 00224 inline Q_INT32 KFromToBigEndian( Q_INT32 b ) 00225 { 00226 #ifdef WORDS_BIGENDIAN 00227 return b; 00228 #else 00229 return KSWAP_32(b); 00230 #endif 00231 } 00232 00237 inline void KFromToBigEndian( Q_INT32 *out, Q_INT32 *in, uint len ) 00238 { 00239 #ifdef WORDS_BIGENDIAN 00240 if ( out != in ) memcpy( out, in, len<<2 ) ; 00241 #else 00242 while ( len>0 ) { *out = KSWAP_32( *in ); out++; in++; len--; } 00243 #endif 00244 } 00245 00250 inline Q_INT64 KFromToBigEndian( Q_INT64 b ) 00251 { 00252 #ifdef WORDS_BIGENDIAN 00253 return b; 00254 #else 00255 return KSWAP_64(b); 00256 #endif 00257 } 00258 00263 inline void KFromToBigEndian( Q_INT64 *out, Q_INT64 *in, uint len ) 00264 { 00265 #ifdef WORDS_BIGENDIAN 00266 if ( out != in ) memcpy( out, in, len<<3 ) ; 00267 #else 00268 while ( len>0 ) { *out = KSWAP_64( *in ); out++; in++; len--; } 00269 #endif 00270 } 00271 00276 inline Q_UINT16 KFromToLittleEndian( Q_UINT16 b ) 00277 { 00278 #ifndef WORDS_BIGENDIAN 00279 return b; 00280 #else 00281 return KSWAP_16(b); 00282 #endif 00283 } 00284 00289 inline void KFromToLittleEndian( Q_UINT16 *out, Q_UINT16 *in, uint len ) 00290 { 00291 #ifndef WORDS_BIGENDIAN 00292 if ( out != in ) memcpy( out, in, len<<1 ) ; 00293 #else 00294 while ( len>0 ) { *out = KSWAP_16( *in ); out++; in++; len--; } 00295 #endif 00296 } 00297 00302 inline Q_UINT32 KFromToLittleEndian( Q_UINT32 b ) 00303 { 00304 #ifndef WORDS_BIGENDIAN 00305 return b; 00306 #else 00307 return KSWAP_32(b); 00308 #endif 00309 } 00310 00315 inline void KFromToLittleEndian( Q_UINT32 *out, Q_UINT32 *in, uint len ) 00316 { 00317 #ifndef WORDS_BIGENDIAN 00318 if ( out != in ) memcpy( out, in, len<<2 ) ; 00319 #else 00320 while ( len>0 ) { *out = KSWAP_32( *in ); out++; in++; len--; } 00321 #endif 00322 } 00323 00328 inline Q_UINT64 KFromToLittleEndian( Q_UINT64 b ) 00329 { 00330 #ifndef WORDS_BIGENDIAN 00331 return b; 00332 #else 00333 return KSWAP_64(b); 00334 #endif 00335 } 00336 00341 inline void KFromToLittleEndian( Q_UINT64 *out, Q_UINT64 *in, uint len ) 00342 { 00343 #ifndef WORDS_BIGENDIAN 00344 if ( out != in ) memcpy( out, in, len<<3 ) ; 00345 #else 00346 while ( len>0 ) { *out = KSWAP_64( *in ); out++; in++; len--; } 00347 #endif 00348 } 00349 00354 inline Q_INT16 KFromToLittleEndian( Q_INT16 b ) 00355 { 00356 #ifndef WORDS_BIGENDIAN 00357 return b; 00358 #else 00359 return KSWAP_16(b); 00360 #endif 00361 } 00362 00367 inline void KFromToLittleEndian( Q_INT16 *out, Q_INT16 *in, uint len ) 00368 { 00369 #ifndef WORDS_BIGENDIAN 00370 if ( out != in ) memcpy( out, in, len<<1 ) ; 00371 #else 00372 while ( len>0 ) { *out = KSWAP_16( *in ); out++; in++; len--; } 00373 #endif 00374 } 00375 00380 inline Q_INT32 KFromToLittleEndian( Q_INT32 b ) 00381 { 00382 #ifndef WORDS_BIGENDIAN 00383 return b; 00384 #else 00385 return KSWAP_32(b); 00386 #endif 00387 } 00388 00393 inline void KFromToLittleEndian( Q_INT32 *out, Q_INT32 *in, uint len ) 00394 { 00395 #ifndef WORDS_BIGENDIAN 00396 if ( out != in ) memcpy( out, in, len<<2 ) ; 00397 #else 00398 while ( len>0 ) { *out = KSWAP_32( *in ); out++; in++; len--; } 00399 #endif 00400 } 00401 00406 inline Q_INT64 KFromToLittleEndian( Q_INT64 b ) 00407 { 00408 #ifndef WORDS_BIGENDIAN 00409 return b; 00410 #else 00411 return KSWAP_64(b); 00412 #endif 00413 } 00414 00419 inline void KFromToLittleEndian( Q_INT64 *out, Q_INT64 *in, uint len ) 00420 { 00421 #ifndef WORDS_BIGENDIAN 00422 if ( out != in ) memcpy( out, in, len<<3 ) ; 00423 #else 00424 while ( len>0 ) { *out = KSWAP_64( *in ); out++; in++; len--; } 00425 #endif 00426 } 00427 00428 #endif /* KSWAP_H */
KDE Logo
This file is part of the documentation for kdecore Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Apr 14 00:03:34 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003