27 template <
typename It>
28 std::pair<It, It>
get_span(It begin, It end,
typename std::iterator_traits<It>::difference_type sz)
30 assert(std::distance(begin, end) >= 0);
32 auto distance = std::min(std::distance(begin, end), sz);
33 return {begin, std::next(begin, distance)};
36 template <
typename It,
typename F>
37 std::pair<It, It>
get_span_p(It begin, It end,
typename std::iterator_traits<It>::difference_type sz, F&& func)
39 auto [span_begin, span_end] =
get_span(begin, end, sz);
40 return {span_begin, std::find_if_not(span_begin, span_end, std::forward<F>(func))};
43 template <
typename It,
typename F>
46 return get_span_p(begin, end, std::numeric_limits<
typename std::iterator_traits<It>::difference_type>::max(), std::forward<F>(func));
Definition: champsim.h:24
std::pair< It, It > get_span(It begin, It end, typename std::iterator_traits< It >::difference_type sz)
Definition: span.h:28
std::pair< It, It > get_span_p(It begin, It end, typename std::iterator_traits< It >::difference_type sz, F &&func)
Definition: span.h:37