![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/heap/detail/ |
Upload File : |
// boost heap: integer log2 // // Copyright (C) 2010 Tim Blechmann // // 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_HEAP_DETAIL_ILOG2_HPP #define BOOST_HEAP_DETAIL_ILOG2_HPP #include <string> // std::size_t namespace boost { namespace heap { namespace detail { template <typename IntType> struct log2 { IntType operator()(IntType value) { IntType l = 0; while( (value >> l) > 1 ) ++l; return l; } }; #ifdef __GNUC__ template<> struct log2<unsigned int> { unsigned int operator()(unsigned int value) { return sizeof(unsigned int)*8 - __builtin_clz(value - 1); } }; template<> struct log2<unsigned long> { unsigned long operator()(unsigned long value) { return sizeof(unsigned long)*8 - __builtin_clzl(value - 1); } }; #endif } /* namespace detail */ template <typename IntType> IntType log2(IntType value) { detail::log2<IntType> fn; return fn(value); } } /* namespace heap */ } /* namespace boost */ #endif /* BOOST_HEAP_DETAIL_ILOG2_HPP */