10 #ifndef BIT_FIELD_H_INCLUDED
11 #define BIT_FIELD_H_INCLUDED
13 #include <Pb/compiler.h>
29 template <
class OwnerT,
36 static_assert(CountT <= (
sizeof(T)* 8),
37 "The number of bits in the BitField cannot exceed the size of the host type T.");
44 enum { k_offset = OffsetT };
45 enum { k_size = CountT };
64 value_type operator=(
const value_type& rhs)
66 value_type& base_value = value();
67 base_value &= ~k_mask;
68 base_value |= k_mask & (rhs << k_offset);
76 value_type value = rhs.value() & k_mask;
77 value_type& base_value = value() & ~k_mask;
78 base_value |= value & k_mask;
83 value_type mask_value()
85 return (value() & k_mask) >> k_offset;
92 return owner()->value();
98 return reinterpret_cast<OwnerT*
>(
reinterpret_cast<char*
>(
this)