00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_BITWISE_H__
00024 #define __MYGUI_BITWISE_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027
00028 namespace MyGUI
00029 {
00030
00031 class Bitwise
00032 {
00033 public:
00036 template<typename Type>
00037 static MYGUI_FORCEINLINE Type firstPO2From(Type _value)
00038 {
00039 --_value;
00040 _value |= _value >> 16;
00041 _value |= _value >> 8;
00042 _value |= _value >> 4;
00043 _value |= _value >> 2;
00044 _value |= _value >> 1;
00045 ++_value;
00046 return _value;
00047 }
00048
00050 template<typename Type>
00051 static MYGUI_FORCEINLINE bool isPO2(Type _value)
00052 {
00053 return (_value & (_value-1)) == 0;
00054 }
00055
00059 template<typename Type>
00060 static MYGUI_FORCEINLINE size_t getBitShift(Type _mask)
00061 {
00062 if (_mask == 0)
00063 return 0;
00064
00065 size_t result = 0;
00066 while ((_mask & 1) == 0)
00067 {
00068 ++result;
00069 _mask >>= 1;
00070 }
00071 return result;
00072 }
00073
00074 };
00075
00076 }
00077
00078 #endif // __MYGUI_BITWISE_H__