haar_lib/misc/range.rs
1use std::ops::RangeBounds;
2
3/// [`RangeBounds<usize>`]を実装した`r`を半開区間`start..end`内に含まれる半開区間として返す。
4pub fn range_bounds_to_range<R: RangeBounds<usize>>(
5 r: R,
6 start: usize,
7 end: usize,
8) -> (usize, usize) {
9 use std::ops::Bound::*;
10
11 let l = match r.start_bound() {
12 Included(&l) => l,
13 Excluded(&l) => l + 1,
14 Unbounded => start,
15 }
16 .max(start);
17
18 let r = match r.end_bound() {
19 Included(&r) => r + 1,
20 Excluded(&r) => r,
21 Unbounded => end,
22 }
23 .min(end);
24
25 (l, r)
26}