diff options
author | Yehonal <yehonal.azeroth@gmail.com> | 2017-10-12 20:00:52 +0200 |
---|---|---|
committer | Yehonal <yehonal.azeroth@gmail.com> | 2017-10-12 20:00:52 +0200 |
commit | f06f32849f1e2c72dc73287c73361174c07ed29e (patch) | |
tree | 70ace68e849cd5ca446fb36279f8125127bb8693 /src/core/Utilities/ByteConverter.h | |
parent | 4df28fd29c6978e669f9950bd38e853fabf9fc8d (diff) |
Directory Structure [step 1]: moving files
working on #672
NOTE: This commit can't be compiled!!
Diffstat (limited to 'src/core/Utilities/ByteConverter.h')
-rw-r--r-- | src/core/Utilities/ByteConverter.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/core/Utilities/ByteConverter.h b/src/core/Utilities/ByteConverter.h new file mode 100644 index 0000000000..882f10fff9 --- /dev/null +++ b/src/core/Utilities/ByteConverter.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license: http://github.com/azerothcore/azerothcore-wotlk/LICENSE-GPL2 + * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> + */ + +#ifndef TRINITY_BYTECONVERTER_H +#define TRINITY_BYTECONVERTER_H + +/** ByteConverter reverse your byte order. This is use + for cross platform where they have different endians. + */ + +#include "Define.h" +#include <algorithm> + +namespace ByteConverter +{ + template<size_t T> + inline void convert(char *val) + { + std::swap(*val, *(val + T - 1)); + convert<T - 2>(val + 1); + } + + template<> inline void convert<0>(char *) { } + template<> inline void convert<1>(char *) { } // ignore central byte + + template<typename T> inline void apply(T *val) + { + convert<sizeof(T)>((char *)(val)); + } +} + +#if TRINITY_ENDIAN == TRINITY_BIGENDIAN +template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); } +template<typename T> inline void EndianConvertReverse(T&) { } +template<typename T> inline void EndianConvertPtr(void* val) { ByteConverter::apply<T>(val); } +template<typename T> inline void EndianConvertPtrReverse(void*) { } +#else +template<typename T> inline void EndianConvert(T&) { } +template<typename T> inline void EndianConvertReverse(T& val) { ByteConverter::apply<T>(&val); } +template<typename T> inline void EndianConvertPtr(void*) { } +template<typename T> inline void EndianConvertPtrReverse(void* val) { ByteConverter::apply<T>(val); } +#endif + +template<typename T> void EndianConvert(T*); // will generate link error +template<typename T> void EndianConvertReverse(T*); // will generate link error + +inline void EndianConvert(uint8&) { } +inline void EndianConvert( int8&) { } +inline void EndianConvertReverse(uint8&) { } +inline void EndianConvertReverse( int8&) { } + +#endif + |