#ifndef PRJXRAY_LIB_BIT_OPS_H
#define PRJXRAY_LIB_BIT_OPS_H

namespace prjxray {

template <typename UInt>
constexpr UInt bit_mask(const int bit) {
	return (static_cast<UInt>(1) << bit);
}

template <typename UInt>
constexpr UInt bit_sizeof() {
	return sizeof(UInt) * 8;
}

template <typename UInt>
constexpr UInt bit_all_ones() {
	return ~static_cast<UInt>(0);
}

template <typename UInt>
constexpr UInt bit_mask_range(const int top_bit, const int bottom_bit) {
	return ((bit_all_ones<UInt>() >> (bit_sizeof<UInt>() - 1 - top_bit)) &
	        (bit_all_ones<UInt>() - bit_mask<UInt>(bottom_bit) +
	         static_cast<UInt>(1)));
}

template <typename UInt>
constexpr UInt bit_field_get(UInt value,
                             const int top_bit,
                             const int bottom_bit) {
	return (value & bit_mask_range<UInt>(top_bit, bottom_bit)) >>
	       bottom_bit;
}

template <typename UInt, typename ValueType>
constexpr UInt bit_field_set(const UInt reg_value,
                             const int top_bit,
                             const int bottom_bit,
                             const ValueType field_value) {
	return ((reg_value & ~bit_mask_range<UInt>(top_bit, bottom_bit)) |
	        ((static_cast<UInt>(field_value) << bottom_bit) &
	         bit_mask_range<UInt>(top_bit, bottom_bit)));
}

}  // namespace prjxray

#endif  // PRJXRAY_LIB_BIT_OPS_H
