31template <
size_t requiredFlagBitsPerItem>
42 std::fill (flags.begin(), flags.end(), 0);
45 void set (
size_t index,
FlagType bits)
56 template <
typename Callback>
57 void ifSet (Callback&& callback)
75 std::fill (flags.begin(), flags.end(), 0);
116 static constexpr size_t divCeil (
size_t a,
size_t b)
118 return (a / b) + ((a % b) != 0);
128template <
size_t requiredFlagBitsPerItem>
138 std::fill (values.begin(), values.end(), 0.0f);
141 size_t size()
const noexcept {
return values.size(); }
146 return values[index].exchange (value, std::memory_order_relaxed);
149 void setBits (
size_t index, uint32_t bits) { flags.set (index, bits); }
157 float get (
size_t index)
const noexcept
160 return values[index].load (std::memory_order_relaxed);
166 template <
typename Callback>
167 void ifSet (Callback&& callback)
169 flags.ifSet ([
this, &callback] (
size_t groupIndex, uint32_t bits)
auto & get(ProcessorChain< Processors... > &chain) noexcept
Non-member equivalent of ProcessorChain::get which avoids awkward member template syntax.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...