source: NonGTP/Boost/boost/pending/lowest_bit.hpp @ 857

Revision 857, 892 bytes checked in by igarcia, 18 years ago (diff)
Line 
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
21namespace 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
Note: See TracBrowser for help on using the repository browser.