123456789101112131415161718192021222324252627282930313233343536373839 |
- // -----------------------------------------------------------
- // lowest_bit.hpp
- //
- // Position of the lowest bit 'on'
- //
- // Copyright (c) 2003-2004, 2008 Gennaro Prota
- //
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // -----------------------------------------------------------
- #ifndef BOOST_LOWEST_BIT_HPP_GP_20030301
- #define BOOST_LOWEST_BIT_HPP_GP_20030301
- #include "boost/integer/integer_log2.hpp"
- #include "boost/assert.hpp"
- namespace boost {
- namespace detail {
- template <typename T>
- int lowest_bit(T x) {
- BOOST_ASSERT(x >= 1); // PRE
- // clear all bits on except the rightmost one,
- // then calculate the logarithm base 2
- //
- return boost::integer_log2<T>( x - ( x & (x-1) ) );
- }
- }
- }
- #endif // include guard
|