Hi,

I took a look into "channel.hpp" and found that packed_channel_value is not very efficient in construction.
There are:

    packed_channel_value(integer_t v) { _value = static_cast< integer_t >( v % num_values ); }

    // I have no idea why this exists, seems OK to remove it
    template <typename Scalar> packed_channel_value(Scalar v) { _value = static_cast< integer_t >( v ) % num_values; }

IIUC,  "v % num_values" above could be replaced with a much cheaper "v & low_bits_mask_t<NumBits>::sig_bits_fast".
That is:

    packed_channel_value(integer_t v) : _value(v & low_bits_mask_t<NumBits>::sig_bits_fast) {}

What do you think? Am I missing some point?


Thanks.