38 inline CoordRange(T lower, T upper) : lower(lower), upper(upper) {};
41 : lower(std::get<0>(range)), upper(std::get<1>(range)) {}
44 : lower(std::get<0>(range)), upper(std::get<1>(range)) {}
46 inline T delt()
const {
return upper - lower; }
48 inline CoordRange expand_all(
typename T_prop::component_type value) {
49 return CoordRange{lower - value, upper + value};
52 inline void expand_center(T tol) {
53 T center = (lower + upper) / 2;
54 T cur_delt = upper - lower;
57 lower = center - cur_delt;
58 upper = center + cur_delt;
61 inline typename T_prop::component_type get_volume() {
62 return sham::product_accumulate(upper - lower);
70 return {sham::max(lower, other.lower), sham::min(upper, other.upper)};
74 return {sham::min(lower, other.lower), sham::max(upper, other.upper)};
77 inline bool contain_pos(T pos) {
return is_in_half_open(pos, lower, upper); }
79 inline bool is_not_empty() {
return sham::vec_compare_geq(upper, lower); }
83 inline bool is_err_mode() {
85 auto tmp = max_range();
87 return sham::equals(tmp.lower, lower) && sham::equals(tmp.upper, upper);