epoc32/include/stdapis/boost/pending/lowest_bit.hpp
branchSymbian2
changeset 2 2fe1408b6811
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
       
     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