40 #define COLA_BYTE_ORDER_ENDIAN_LITTLE
51 memcpy(&r, ptr,
sizeof(T));
58 template <
typename TAlias,
typename T>
69 return byteswapAlias<uint8_t>(val);
73 return byteswapAlias<uint8_t>(val);
80 return ((val << 8) & 0xFF00) | ((val >> 8) & 0x00FF);
84 return byteswapAlias<uint16_t>(val);
88 return byteswapAlias<uint16_t>(val);
95 val = ((val << 8) & 0xFF00FF00) | ((val >> 8) & 0x00FF00FF);
96 return ((val << 16) & 0xFFFF0000) | ((val >> 16) & 0x0000FFFF);
100 return byteswapAlias<uint32_t>(val);
119 val = ((val << 8) & 0xFF00FF00FF00FF00) | ((val >> 8) & 0x00FF00FF00FF00FF);
120 val = ((val << 16) & 0xFFFF0000FFFF0000) | ((val >> 16) & 0x0000FFFF0000FFFF);
121 return ((val << 32) & 0xFFFFFFFF00000000) | ((val >> 32) & 0x00000000FFFFFFFF);
125 return byteswapAlias<uint64_t>(val);
142 template <
typename TAlias,
typename T>
145 return static_cast<T
>(
byteswap(
static_cast<TAlias
>(val)));
150 #if defined ENDIAN_LITTLE
151 template <
typename T>
157 template <
typename T>
163 template <
typename T>
169 template <
typename T>
174 #elif defined ENDIAN_BIG
175 template <
typename T>
181 template <
typename T>
187 template <
typename T>
193 template <
typename T>
199 #error Endianess is not defined, please define either LITTLE_ENDIAN or BIG_ENDIAN depending on the platform.
204 template <
typename T>
207 return bigEndianToNative<T>(readUnaligned<T>(ptr));
210 template <
typename T>
213 return littleEndianToNative<T>(readUnaligned<T>(ptr));
216 #if defined COLA_BYTE_ORDER_ENDIAN_LITTLE
217 template <
typename T>
220 return nativeToLittleEndian<T>(x);
222 template <
typename T>
225 return littleEndianToNative<T>(readUnaligned<T>(ptr));
227 #elif defined COLA_BYTE_ORDER_ENDIAN_BIG
228 template <
typename T>
231 return nativeToBigEndian<T>(x);
233 template <
typename T>
236 return bigEndianToNative<T>(readUnaligned<T>(ptr));
239 #error Endianess for CoLa byte order is not defined, please define either COLA_BYTE_ORDER_ENDIAN_LITTLE or COLA_BYTE_ORDER_ENDIAN_BIG depending on the target device.