Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
ByteConverter.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRE_BYTECONVERTER_H
7#define SKYFIRE_BYTECONVERTER_H
8
12
13#include "Define.h"
14#include <algorithm>
15
17{
18 template<size_t T>
19 inline void convert(char* val)
20 {
21 std::swap(*val, *(val + T - 1));
22 convert<T - 2>(val + 1);
23 }
24
25 template<> inline void convert<0>(char*) { }
26 template<> inline void convert<1>(char*) { } // ignore central byte
27
28 template<typename T> inline void apply(T* val)
29 {
30 convert<sizeof(T)>((char*)(val));
31 }
32}
33
34#if SKYFIRE_ENDIAN == SKYFIRE_BIGENDIAN
35template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); }
36template<typename T> inline void EndianConvertReverse(T&) { }
37template<typename T> inline void EndianConvertPtr(void* val) { ByteConverter::apply<T>(val); }
38template<typename T> inline void EndianConvertPtrReverse(void*) { }
39#else
40template<typename T> inline void EndianConvert(T&) { }
41template<typename T> inline void EndianConvertReverse(T& val) { ByteConverter::apply<T>(&val); }
42template<typename T> inline void EndianConvertPtr(void*) { }
43template<typename T> inline void EndianConvertPtrReverse(void* val) { ByteConverter::apply<T>(val); }
44#endif
45
46template<typename T> void EndianConvert(T*); // will generate link error
47template<typename T> void EndianConvertReverse(T*); // will generate link error
48
49inline void EndianConvert(uint8&) { }
50inline void EndianConvert(int8&) { }
51inline void EndianConvertReverse(uint8&) { }
52inline void EndianConvertReverse(int8&) { }
53
54#endif
55
void EndianConvertReverse(T &val)
void EndianConvertPtr(void *)
void EndianConvert(T &)
void EndianConvertPtrReverse(void *val)
std::uint8_t uint8
Definition Define.h:79
std::int8_t int8
Definition Define.h:75
void convert< 1 >(char *)
void convert(char *val)
void apply(T *val)
void convert< 0 >(char *)