00001
00002
00003
00004
00005
00006
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