116# pragma GCC diagnostic push
117# pragma GCC diagnostic ignored "-Warray-bounds"
119 switch (size_hints.
type) {
122 return size * range.
size() <= threshold;
125 const std::optional<int64_t> &full_size =
127 if (full_size.has_value()) {
128 if (*full_size <= threshold) {
135 const int64_t accumulated_size =
137 .lookup_accumulated_size(range);
138 return accumulated_size <= threshold;
142# pragma GCC diagnostic pop
162 for (
const int64_t i : range.index_range()) {
163 r_sizes[i] = fn(range[i]);
#define BLI_assert_unreachable()
TaskSizeHints(const Type type)
int64_t lookup_accumulated_size(const IndexRange range) const override
TaskSizeHints_AccumulatedLookupFn(Fn fn)
TaskSizeHints_AccumulatedLookup()
virtual int64_t lookup_accumulated_size(IndexRange range) const =0
TaskSizeHints_IndividualLookupFn(Fn fn, const std::optional< int64_t > full_size)
void lookup_individual_sizes(const IndexRange range, MutableSpan< int64_t > r_sizes) const override
TaskSizeHints_IndividualLookup(std::optional< int64_t > full_size)
std::optional< int64_t > full_size
virtual void lookup_individual_sizes(IndexRange, MutableSpan< int64_t > r_sizes) const =0
TaskSizeHints_Static(const int64_t size)
auto individual_task_sizes(Fn &&fn, const std::optional< int64_t > full_size=std::nullopt)
auto accumulated_task_sizes(Fn &&fn)
bool use_single_thread(const TaskSizeHints &size_hints, const IndexRange range, const int64_t threshold)