bitwise: offset should start from least significant bits
This commit is contained in:
parent
ddc24b076b
commit
cf268a1960
@ -140,7 +140,7 @@ namespace cruft {
|
||||
///
|
||||
/// \tparam ValueT the underlying integral type
|
||||
/// \tparam OffsetV the index of the first bit of the range (where 0 is
|
||||
/// most significant)
|
||||
/// least significant)
|
||||
/// \tparam SizeV the number of bits in the range. Must be strictly
|
||||
/// positive.
|
||||
template <
|
||||
@ -148,11 +148,10 @@ namespace cruft {
|
||||
size_t OffsetV,
|
||||
size_t SizeV
|
||||
>
|
||||
class bitfield {
|
||||
class [[gnu::packed]] bitfield {
|
||||
public:
|
||||
static_assert (SizeV > 0);
|
||||
static_assert (OffsetV + SizeV <= sizeof (ValueT) * 8);
|
||||
static_assert (sizeof (ValueT) == sizeof (bitfield));
|
||||
|
||||
decltype(auto)
|
||||
operator+ () const { return +value; }
|
||||
@ -160,9 +159,7 @@ namespace cruft {
|
||||
operator auto() const
|
||||
{
|
||||
auto const MASK = (1u << SizeV) - 1u;
|
||||
auto const SHIFT = sizeof (ValueT) * 8 - OffsetV - SizeV;
|
||||
|
||||
return (value >> SHIFT) & MASK;
|
||||
return (value >> OffsetV) & MASK;
|
||||
}
|
||||
|
||||
ValueT value;
|
||||
|
Loading…
Reference in New Issue
Block a user