00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkEndian_DEFINED
00018 #define SkEndian_DEFINED
00019
00020 #include "SkTypes.h"
00021
00028 #if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN)
00029 #error "can't have both LENDIAN and BENDIAN defined"
00030 #endif
00031
00032 #if !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN)
00033 #error "need either LENDIAN or BENDIAN defined"
00034 #endif
00035
00039 inline uint16_t SkEndianSwap16(U16CPU value)
00040 {
00041 SkASSERT(value == (uint16_t)value);
00042 return (uint16_t)((value >> 8) | (value << 8));
00043 }
00044
00048 inline void SkEndianSwap16s(uint16_t array[], int count)
00049 {
00050 SkASSERT(count == 0 || array != NULL);
00051
00052 while (--count >= 0)
00053 {
00054 *array = SkEndianSwap16(*array);
00055 array += 1;
00056 }
00057 }
00058
00062 inline uint32_t SkEndianSwap32(uint32_t value)
00063 {
00064 return ((value & 0xFF) << 24) |
00065 ((value & 0xFF00) << 8) |
00066 ((value & 0xFF0000) >> 8) |
00067 (value >> 24);
00068 }
00069
00073 inline void SkEndianSwap32s(uint32_t array[], int count)
00074 {
00075 SkASSERT(count == 0 || array != NULL);
00076
00077 while (--count >= 0)
00078 {
00079 *array = SkEndianSwap32(*array);
00080 array += 1;
00081 }
00082 }
00083
00084 #ifdef SK_CPU_LENDIAN
00085 #define SkEndian_SwapBE16(n) SkEndianSwap16(n)
00086 #define SkEndian_SwapBE32(n) SkEndianSwap32(n)
00087 #define SkEndian_SwapLE16(n) (n)
00088 #define SkEndian_SwapLE32(n) (n)
00089 #else // SK_CPU_BENDIAN
00090 #define SkEndian_SwapBE16(n) (n)
00091 #define SkEndian_SwapBE32(n) (n)
00092 #define SkEndian_SwapLE16(n) SkEndianSwap16(n)
00093 #define SkEndian_SwapLE32(n) SkEndianSwap32(n)
00094 #endif
00095
00096
00097 #endif
00098