# kio Library API Documentation

Overview | Class Hierarchy | Classes | Classes (annotated) | Members | Namespaces | Source Files

# 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 */

This file is part of the documentation for kio Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:24:04 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003