diff --git a/src/common/bitfield.h b/src/common/bitfield.h index 44f95a264..d279e709c 100644 --- a/src/common/bitfield.h +++ b/src/common/bitfield.h @@ -112,11 +112,19 @@ struct BitField DataType GetValue() const { - // TODO: Handle signed types - if (std::is_same::value) + if constexpr (std::is_same_v) + { return static_cast(!!((data & GetMask()) >> BitIndex)); + } + else if constexpr (std::is_signed_v) + { + constexpr int shift = 8 * sizeof(DataType) - BitCount; + return (static_cast((data & GetMask()) >> BitIndex) << shift) >> shift; + } else + { return static_cast((data & GetMask()) >> BitIndex); + } } void SetValue(DataType value)