MyGUI
3.0.3
|
00001 00007 /* 00008 This file is part of MyGUI. 00009 00010 MyGUI is free software: you can redistribute it and/or modify 00011 it under the terms of the GNU Lesser General Public License as published by 00012 the Free Software Foundation, either version 3 of the License, or 00013 (at your option) any later version. 00014 00015 MyGUI is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU Lesser General Public License for more details. 00019 00020 You should have received a copy of the GNU Lesser General Public License 00021 along with MyGUI. If not, see <http://www.gnu.org/licenses/>. 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 } // namespace MyGUI 00077 00078 #endif // __MYGUI_BITWISE_H__