equal
deleted
inserted
replaced
|
1 // ------------------------------------- |
|
2 // lowest_bit.hpp |
|
3 // |
|
4 // Position of the lowest bit 'on' |
|
5 // |
|
6 // (C) Copyright Gennaro Prota 2003 - 2004. |
|
7 // |
|
8 // Distributed under the Boost Software License, Version 1.0. |
|
9 // (See accompanying file LICENSE_1_0.txt or copy at |
|
10 // http://www.boost.org/LICENSE_1_0.txt) |
|
11 // |
|
12 // ------------------------------------------------------ |
|
13 |
|
14 #ifndef BOOST_LOWEST_BIT_HPP_GP_20030301 |
|
15 #define BOOST_LOWEST_BIT_HPP_GP_20030301 |
|
16 |
|
17 #include <cassert> |
|
18 #include "boost/pending/integer_log2.hpp" |
|
19 |
|
20 |
|
21 namespace boost { |
|
22 |
|
23 template <typename T> |
|
24 int lowest_bit(T x) { |
|
25 |
|
26 assert(x >= 1); // PRE |
|
27 |
|
28 // clear all bits on except the rightmost one, |
|
29 // then calculate the logarithm base 2 |
|
30 // |
|
31 return boost::integer_log2<T>( x - ( x & (x-1) ) ); |
|
32 |
|
33 } |
|
34 |
|
35 |
|
36 } |
|
37 |
|
38 |
|
39 #endif // include guard |