MyGUI  3.2.1
MyGUI_Bitwise.h
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #ifndef __MYGUI_BITWISE_H__
8 #define __MYGUI_BITWISE_H__
9 
10 #include "MyGUI_Prerequest.h"
11 
12 namespace MyGUI
13 {
14 
15  class Bitwise
16  {
17  public:
20  template<typename Type>
21  static MYGUI_FORCEINLINE Type firstPO2From(Type _value)
22  {
23  --_value;
24  _value |= _value >> 16;
25  _value |= _value >> 8;
26  _value |= _value >> 4;
27  _value |= _value >> 2;
28  _value |= _value >> 1;
29  ++_value;
30  return _value;
31  }
32 
34  template<typename Type>
35  static MYGUI_FORCEINLINE bool isPO2(Type _value)
36  {
37  return (_value & (_value - 1)) == 0;
38  }
39 
43  template<typename Type>
44  static MYGUI_FORCEINLINE size_t getBitShift(Type _mask)
45  {
46  if (_mask == 0)
47  return 0;
48 
49  size_t result = 0;
50  while ((_mask & 1) == 0)
51  {
52  ++result;
53  _mask >>= 1;
54  }
55  return result;
56  }
57  };
58 
59 } // namespace MyGUI
60 
61 #endif // __MYGUI_BITWISE_H__