const pair<Interval,Interval> Tube::getEnclosedBounds(const Interval& intv_t) const { if(intv_t.lb() == intv_t.ub()) return make_pair(Interval((*this)[intv_t.lb()].lb()), Interval((*this)[intv_t.lb()].ub())); Interval intersection = m_intv_t & intv_t; if(intersection.is_empty()) return make_pair(Interval::EMPTY_SET, Interval::EMPTY_SET); else if(isSlice() || intv_t == m_intv_t || intv_t.is_unbounded() || intv_t.is_superset(m_intv_t)) { if(m_tree_computation_needed) computeTree(); return m_enclosed_bounds; // pre-computed } else { Interval inter_firstsubtube = m_first_subtube->getT() & intersection; Interval inter_secondsubtube = m_second_subtube->getT() & intersection; if(inter_firstsubtube.lb() == inter_firstsubtube.ub() && inter_secondsubtube.lb() == inter_secondsubtube.ub()) return make_pair((*m_first_subtube)[inter_firstsubtube.lb()] & (*m_second_subtube)[inter_secondsubtube.lb()], (*m_first_subtube)[inter_firstsubtube.ub()] & (*m_second_subtube)[inter_secondsubtube.ub()]); else if(inter_firstsubtube.is_empty() || inter_firstsubtube.lb() == inter_firstsubtube.ub()) return m_second_subtube->getEnclosedBounds(inter_secondsubtube); else if(inter_secondsubtube.is_empty() || inter_secondsubtube.lb() == inter_secondsubtube.ub()) return m_first_subtube->getEnclosedBounds(inter_firstsubtube); else { pair<Interval,Interval> ui_past = m_first_subtube->getEnclosedBounds(inter_firstsubtube); pair<Interval,Interval> ui_future = m_second_subtube->getEnclosedBounds(inter_secondsubtube); return make_pair(ui_past.first | ui_future.first, ui_past.second | ui_future.second); } } }
Affine2Main<AF_iAF>::Affine2Main(int n, int m, const Interval& itv) : _n (n), _elt (NULL,0.0) { assert((n>=0) && (m>=0) && (m<=n)); if (!(itv.is_unbounded()||itv.is_empty())) { _elt._val =new Interval[n + 1]; _elt._val[0] = itv.mid(); for (int i = 1; i <= n; i++){ _elt._val[i] = 0.0; } if (m == 0) { _elt._err = itv.rad(); } else { _elt._val[m] = itv.rad(); } } else { *this = itv; } }