12#include "detray/definitions/detail/qualifiers.hpp"
13#include "detray/utils/ranges.hpp"
18namespace detray::detail {
23template <std::forward_iterator iterator_t,
typename T>
24DETRAY_HOST_DEVICE
constexpr iterator_t upper_bound(iterator_t first,
27 using difference_t = std::iter_difference_t<iterator_t>;
29 difference_t len{detray::ranges::distance(first, last)};
33 difference_t half{len >> 1};
34 iterator_t middle{
first};
35 detray::ranges::advance(middle, half);
36 if (value < *middle) {
50template <std::forward_iterator iterator_t,
typename T>
51DETRAY_HOST_DEVICE
constexpr iterator_t lower_bound(iterator_t first,
54 using difference_t = std::iter_difference_t<iterator_t>;
56 difference_t len{detray::ranges::distance(first, last)};
60 difference_t half{len >> 1};
61 iterator_t middle{
first};
62 detray::ranges::advance(middle, half);
63 if (*middle < value) {
@ first
Use the first track state to reach target surface.
Definition TrackHelpers.hpp:39