Boost logo

Boost :

Subject: Re: [boost] Boost.Integer makeover
From: Ravi (lists_ravi_at_[hidden])
Date: 2009-11-29 10:25:38

On Sunday 29 November 2009 12:38:40 John Bytheway wrote:
> I've used the compile-time log2 to determine the smallest integer type
> in which I can store any value of an enumeration. It's not easy to use,
> though; I'd prefer something that returned ceil(log2(n)) rather than
> floor(log2(n)). I can't make any sense of the existing example.

Here's what I use (if it can go into boost, that'd be one less thing I'd have
to maintain):

template <boost::static_log2_argument_type num> struct static_log2_ceil
  BOOST_STATIC_CONSTANT( boost::static_log2_result_type,
                         value = static_log2<num-1>::value+1 );

// Handle the case of static_log2 not allowing 0
template <> struct static_log2_ceil<1>
  BOOST_STATIC_CONSTANT( boost::static_log2_result_type, value = 0 );

// Asking for log2(0) is an error
template <> struct static_log2_ceil<0> {};

If this is useful to you, could you please create a trac ticket and attach the
implementation as a patch?


Boost list run by bdawes at, gregod at, cpdaniel at, john at