Skip to content

fix(find): support sentinel ranges in find_if/find_if_not (#534) - #808

Open
soniafergusonship wants to merge 3 commits into
taskflow:masterfrom
soniafergusonship:fix/find-if-sentinel-range-534
Open

fix(find): support sentinel ranges in find_if/find_if_not (#534)#808
soniafergusonship wants to merge 3 commits into
taskflow:masterfrom
soniafergusonship:fix/find-if-sentinel-range-534

Conversation

@soniafergusonship

Copy link
Copy Markdown

Fixes #534

tf::find_if / tf::find_if_not called std::distance before checking whether the range is sentinel-based (e.g. std::views::iota(0) with std::unreachable_sentinel), which is undefined for infinite ranges.

Changes

  • Detect sentinel ranges via !std::is_same_v<E_t, B_t> and fall back to sequential std::find_if / std::find_if_not.
  • Keep existing parallel path for finite ranges.
  • Add unit tests for sentinel-based iota ranges.

Test plan

  • unittests/test_find.cppfind_if.SentinelRange, find_if_not.SentinelRange

Signed-off-by: soniafergusonship <soniafergusonship@users.noreply.github.com>
Signed-off-by: soniafergusonship <soniafergusonship@users.noreply.github.com>
Signed-off-by: soniafergusonship <soniafergusonship@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

taskflow find_if doesn't work with infinite ranges because std::distance is used

1 participant