Thrill  0.1
is_power_of_two.hpp
Go to the documentation of this file.
1 /*******************************************************************************
2  * tlx/math/is_power_of_two.hpp
3  *
4  * Part of tlx - http://panthema.net/tlx
5  *
6  * Copyright (C) 2007-2018 Timo Bingmann <[email protected]>
7  *
9  ******************************************************************************/
10
13
14 namespace tlx {
15
17 //! \{
18
19 /******************************************************************************/
20
21 template <typename Integral>
22 static inline bool is_power_of_two_template(Integral i) {
23  if (i <= 0) return false;
24  return !(i & (i - 1));
25 }
26
27 /******************************************************************************/
28 // is_power_of_two()
29
30 //! does what it says: true if i is a power of two
31 static inline bool is_power_of_two(int i) {
32  return is_power_of_two_template(i);
33 }
34
35 //! does what it says: true if i is a power of two
36 static inline bool is_power_of_two(unsigned int i) {
37  return is_power_of_two_template(i);
38 }
39
40 //! does what it says: true if i is a power of two
41 static inline bool is_power_of_two(long i) {
42  return is_power_of_two_template(i);
43 }
44
45 //! does what it says: true if i is a power of two
46 static inline bool is_power_of_two(unsigned long i) {
47  return is_power_of_two_template(i);
48 }
49
50 //! does what it says: true if i is a power of two
51 static inline bool is_power_of_two(long long i) {
52  return is_power_of_two_template(i);
53 }
54
55 //! does what it says: true if i is a power of two
56 static inline bool is_power_of_two(unsigned long long i) {
57  return is_power_of_two_template(i);
58 }
59
60 //! \}
61
62 } // namespace tlx
63