• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kio

kswap.h

Go to the documentation of this file.
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., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, 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 */

kio

Skip menu "kio"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal