Some small code improvements
This commit is contained in:
parent
562eba5f68
commit
9539b5430f
1 changed files with 8 additions and 6 deletions
|
@ -99,7 +99,8 @@ namespace dhandy {
|
|||
};
|
||||
|
||||
template <typename T>
|
||||
constexpr inline T make_mask (std::size_t len) {
|
||||
[[gnu::const]]
|
||||
constexpr inline T make_mask (std::size_t len) noexcept {
|
||||
return (1 << len) - 1;
|
||||
}
|
||||
} //namespace implem
|
||||
|
@ -118,7 +119,7 @@ namespace dhandy {
|
|||
template <std::size_t Idx, typename U, std::size_t... S> friend U get (const BitfieldPack<U, S...>&);
|
||||
template <std::size_t Idx, typename U, typename V, std::size_t... S> friend void set (BitfieldPack<U, S...>&, V);
|
||||
typedef implem::BitfieldData<T, Facts::ElementCount> base_type;
|
||||
static_assert(Facts::LargestSize <= sizeof(T) * CHAR_BIT, "Bitfield size can't be larget than the data type itself");
|
||||
static_assert(Facts::LargestSize <= sizeof(T) * CHAR_BIT, "Bitfield size can't be larger than the data type itself");
|
||||
public:
|
||||
BitfieldPack (T init=T{}) : base_type(init) {}
|
||||
};
|
||||
|
@ -136,14 +137,15 @@ namespace dhandy {
|
|||
const constexpr bool bleeds_into_next = reloffs + so.size > sizeof(T) * CHAR_BIT;
|
||||
|
||||
const T bottom = static_cast<const BitfieldData<T, index + 1>&>(pack).value() >> reloffs;
|
||||
if (bleeds_into_next) {
|
||||
const std::size_t safe_index = index + 2 - not bleeds_into_next;
|
||||
if constexpr (bleeds_into_next) {
|
||||
const std::size_t safe_index = index + 2;
|
||||
const T val = static_cast<const BitfieldData<T, safe_index>&>(pack).value();
|
||||
const T top = val << (sizeof(T) * CHAR_BIT - reloffs);
|
||||
return static_cast<T>(top | bottom) & make_mask<T>(so.size);
|
||||
}
|
||||
|
||||
return bottom & make_mask<T>(so.size);
|
||||
else {
|
||||
return bottom & make_mask<T>(so.size);
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t Idx, typename T, typename V, std::size_t... Sizes>
|
||||
|
|
Loading…
Reference in a new issue