• Main Page
  • Related Pages
  • Classes
  • Files
  • File List

src/Bytesex.hh

00001 /*
00002  * Copyright Staffan Gimåker 2006-2008.
00003  *
00004  * Distributed under the Boost Software License, Version 1.0.
00005  * (See accompanying file LICENSE_1_0.txt or copy at
00006  * http://www.boost.org/LICENSE_1_0.txt)
00007  */
00008 
00009 #ifndef __PEEKABOT_BYTESEX_HH
00010 #define __PEEKABOT_BYTESEX_HH
00011 
00018 #include <boost/detail/endian.hpp>
00019 
00020 
00021 #define PEEKABOT_LITTLE_ENDIAN 1234
00022 #define PEEKABOT_BIG_ENDIAN 4321
00023 
00024 #if defined(BOOST_LITTLE_ENDIAN)
00025 #  define PEEKABOT_BYTE_ORDER PEEKABOT_LITTLE_ENDIAN
00026 #elif defined(BOOST_BIG_ENDIAN)
00027 #  define PEEKABOT_BYTE_ORDER PEEKABOT_BIG_ENDIAN
00028 #else
00029 #  error "Unsupported platform endianess (Middle/PDP-endian)"
00030 #endif
00031 
00032 
00033 #include "Types.hh"
00034 #include <cstdlib>
00035 
00036 namespace peekabot
00037 {   
00045     template<class T>
00046     inline T *switch_byte_order(T *p, const size_t element_count)
00047     {
00048         int8_t *pb = reinterpret_cast<int8_t *>(p);
00049         for( size_t elem = 0; elem < element_count; ++elem )
00050         {
00051             for( size_t i = 0; i < sizeof(T); i+=2 )
00052             {
00053                 int8_t tmp = pb[i];
00054                 pb[i] = pb[sizeof(T) - i - 1];
00055                 pb[sizeof(T) - i - 1] = tmp;
00056             }
00057             pb += sizeof(T);
00058         }
00059         return p;
00060     }
00061 
00062 }
00063 
00064 
00065 #endif // __PEEKABOT_BYTESEX_HH

Generated on Sun Jan 30 2011 for peekabot by  doxygen 1.7.1