Hi Christian, On Wed, Jun 23, 2010 at 10:42 AM, Christian Henning <chhenning@gmail.com> wrote:
The only difference between what you suggested and what I'm posting is the addition of some explicit construction calls:
I'm sorry I cannot make out your addition of some explicit constructor calls. Did you send the correct patch snippet? Could we just post the code without the patch syntax? I don't use patch.
Sorry, I could have been clearer. The original code used only explicit construction calls. Your suggested code replaced them with static_cast (which would work great if they were casting to the correct type instead of just an integral type). I found that both were necessary to suppress warnings. Here's the new code: // Both source and destination are unsigned integral channels, // the dst max value is less than (or equal to) the src max value, // and the src max value is not divisible by the dst max value template <typename SrcChannelV, typename DstChannelV, bool CannotFit> struct channel_converter_unsigned_integral_nondivisible<SrcChannelV,DstChannelV,false,CannotFit> { DstChannelV operator()(SrcChannelV src) const { typedef typename unsigned_integral_max_value<SrcChannelV>::value_type src_integer_t; typedef typename unsigned_integral_max_value<DstChannelV>::value_type dst_integer_t; static const double div = unsigned_integral_max_value<SrcChannelV>::value / double(unsigned_integral_max_value<DstChannelV>::value); static const src_integer_t div2 = static_cast<src_integer_t>(div/2); return DstChannelV(static_cast<dst_integer_t>((src + div2) / div)); } }; } // namespace detail ///////////////////////////////////////////////////// /// bits32f conversion ///////////////////////////////////////////////////// template <typename DstChannelV> struct channel_converter_unsigned<bits32f,DstChannelV> : public std::unary_function<bits32f,DstChannelV> { DstChannelV operator()(bits32f x) const { typedef typename detail::unsigned_integral_max_value<DstChannelV>::value_type dst_integer_t; return DstChannelV(static_cast<dst_integer_t>(x*channel_traits<DstChannelV>::max_value()+0.5f)); } } Thanks for your help on this, and for you work on the library. Good luck on the IO review! Nate