57 GPUhdi() bool isSubsetOf(LayerMask allowed) const
noexcept {
return (*
this & ~allowed).empty(); }
58 GPUhdi() bool isAllowedHoleMask(
int maxHoles, LayerMask allowedHoleMask) const
noexcept
60 const int allowedHoles = maxHoles > 0 ? maxHoles : 0;
61 return count() <= allowedHoles && isSubsetOf(allowedHoleMask);
63 GPUhdi() bool isAllowed(
int maxHoles, LayerMask allowedHoleMask) const
noexcept
65 return holeMask().isAllowedHoleMask(maxHoles, allowedHoleMask);
70 GPUhdi()
int last() const
noexcept {
return mBits ? 31 -
static_cast<int>(o2::gpu::GPUCommonMath::Clz(mBits)) : constants::
UnusedIndex; }
73 return empty() ? LayerMask{0} : (span(
first(),
last()) & ~(*this));
81 const uint32_t lowerLayers = (uint32_t(1) <<
layer) - 1;
82 return static_cast<int>(o2::gpu::GPUCommonMath::Popcount(
static_cast<uint32_t
>(mBits) & lowerLayers));
85 static GPUhdi() LayerMask span(
int fromLayer,
int toLayer)
noexcept
87 if (fromLayer > toLayer) {
90 const uint32_t upper = (uint32_t(1) << (toLayer + 1)) - 1;
91 const uint32_t lower = (uint32_t(1) << fromLayer) - 1;
92 return static_cast<uint16_t
>(upper & ~lower);
95 static GPUhdi() LayerMask skipped(
int fromLayer,
int toLayer)
noexcept
97 return (toLayer - fromLayer <= 1) ? LayerMask{0} : span(fromLayer + 1, toLayer - 1);
101 std::string
asString()
const {
return fmt::format(
"{:016b}", mBits); }