25template <typename DataType, bool ReturnsIndex = true, typename ReturnType = DataType, typename StorageType = typename plBitIteratorStorage<DataType>::Type>
28 using iterator_category = std::forward_iterator_tag;
29 using value_type = DataType;
30 static_assert(
sizeof(DataType) <= 8);
38 m_uiMask =
static_cast<StorageType
>(data);
41 PL_ALWAYS_INLINE
bool IsValid()
const
46 PL_ALWAYS_INLINE ReturnType Value()
const
48 if constexpr (ReturnsIndex)
58 PL_ALWAYS_INLINE
void Next()
61 m_uiMask = m_uiMask & (m_uiMask - 1);
64 PL_ALWAYS_INLINE
bool operator==(
const plBitIterator& other)
const
66 return m_uiMask == other.m_uiMask;
69 PL_ALWAYS_INLINE
bool operator!=(
const plBitIterator& other)
const
71 return m_uiMask != other.m_uiMask;
74 PL_ALWAYS_INLINE ReturnType operator*()
const
79 PL_ALWAYS_INLINE
void operator++()
84 StorageType m_uiMask = 0;