diff --git a/source/blender/editors/curves/intern/curves_selection.cc b/source/blender/editors/curves/intern/curves_selection.cc index 6324741f0d1..e1c70f50ed6 100644 --- a/source/blender/editors/curves/intern/curves_selection.cc +++ b/source/blender/editors/curves/intern/curves_selection.cc @@ -173,7 +173,7 @@ static bool contains(const VArray &varray, for (const int64_t segment_i : IndexRange(sliced_mask.segments_num())) { const IndexMaskSegment segment = sliced_mask.segment(segment_i); for (const int i : segment) { - if (span[i]) { + if (span[i] == value) { return true; } } @@ -191,13 +191,15 @@ static bool contains(const VArray &varray, return init; } constexpr int64_t MaxChunkSize = 512; - for (int64_t start = range.start(); start < range.last(); start += MaxChunkSize) { - const int64_t end = std::min(start + MaxChunkSize, range.last()); + const int64_t slice_end = range.one_after_last(); + for (int64_t start = range.start(); start < slice_end; start += MaxChunkSize) { + const int64_t end = std::min(start + MaxChunkSize, slice_end); const int64_t size = end - start; const IndexMask sliced_mask = indices_to_check.slice(start, size); std::array values; + auto values_end = values.begin() + size; varray.materialize_compressed(sliced_mask, values); - if (std::find(values.begin(), values.end(), true) != values.end()) { + if (std::find(values.begin(), values_end, value) != values_end) { return true; } }