21  class Slice : 
public SliceBase,
 
   28      explicit Slice(
const SlicedTubeBase& tube, 
const std::list<TSlice>::iterator& it_tslice, 
const T& codomain)
 
   29        : SliceBase(tube, it_tslice), T(codomain)
 
   32      Slice(
const Slice& s, 
const SlicedTubeBase& tube)
 
   33        : SliceBase(tube, s._it_tslice), T(s.codomain())
 
   38      Slice(
const Slice& s) = 
delete;
 
   39      Slice& operator=(
const Slice&) = 
delete;
 
   40      Slice(Slice&&) = 
delete;
 
   41      Slice& operator=(Slice&&) = 
delete;
 
   43      inline const SlicedTube<T>& tube()
 const 
   45        return static_cast<const SlicedTube<T>&
>(_tube);
 
   48      inline virtual std::shared_ptr<SliceBase> copy()
 const 
   50        return std::make_shared<Slice>(*
this, this->_tube);
 
   53      inline Index size()
 const 
   55        return this->T::size();
 
   63      inline const T& codomain()
 const 
   65        return (
const T&)(*this);
 
   68      inline bool is_gate()
 const 
   70        return t0_tf().is_degenerated();
 
   73      inline std::shared_ptr<const Slice<T>> prev_slice()
 const 
   75        return std::static_pointer_cast<const Slice<T>>(
 
   76          this->SliceBase::prev_slice());
 
   79      inline std::shared_ptr<Slice<T>> prev_slice()
 
   81        return std::const_pointer_cast<Slice<T>>(
 
   82          static_cast<const Slice<T>&
>(*this).prev_slice());
 
   85      inline std::shared_ptr<const Slice<T>> next_slice()
 const 
   87        return std::static_pointer_cast<const Slice<T>>(
 
   88          this->SliceBase::next_slice());
 
   91      inline std::shared_ptr<Slice<T>> next_slice()
 
   93        return std::const_pointer_cast<Slice<T>>(
 
   94          static_cast<const Slice<T>&
>(*this).next_slice());
 
   97      inline T input_gate()
 const 
  104          if(prev_slice()->is_gate())
 
  105            return prev_slice()->codomain();
 
  107            return codomain() & prev_slice()->codomain();
 
  111      inline T output_gate()
 const 
  118          if(next_slice()->is_gate())
 
  119            return next_slice()->codomain();
 
  121            return codomain() & next_slice()->codomain();
 
  125      inline std::pair<T,T> enclosed_bounds(
const Interval& t)
 const 
  127        T x = *
this; x.set_empty(); 
 
  128        auto bounds = std::make_pair(x,x);
 
  130        if(t.lb() < t0_tf().
lb() || t.ub() > t0_tf().
ub())
 
  132          x.init(Interval(-oo,0));
 
  134          x.init(Interval(0,oo));
 
  138        if(t.contains(t0_tf().
lb()))
 
  140          bounds.first |= input_gate().lb();
 
  141          bounds.second |= input_gate().ub();
 
  144        if(t.contains(t0_tf().
ub()))
 
  146          bounds.first |= output_gate().lb();
 
  147          bounds.second |= output_gate().ub();
 
  150        if(t.is_subset(t0_tf()) && t != t0_tf().
lb() && t != t0_tf().
ub())
 
  152          bounds.first |= this->
lb();
 
  153          bounds.second |= this->
ub();
 
  159      inline void set(
const T& x, 
bool propagate = 
true)
 
  161        assert_release(x.size() == this->size());
 
  164          update_adjacent_codomains();
 
  173      inline void set_empty()
 
  178      inline bool operator==(
const Slice& x)
 const 
  180        return codomain() == x.codomain();
 
  183      inline ConvexPolygon polygon_slice(
const Slice<T>& v) 
const 
  184        requires std::is_same_v<T,Interval>;
 
  187      friend inline std::ostream& operator<<(std::ostream& os, 
const Slice& x)
 
  190           << 
"↦" << x.codomain()
 
  197      template<
typename T_>
 
  198      friend class SlicedTube;
 
  202        this->T::set_empty();
 
  204          update_adjacent_codomains();
 
  207      inline void update_adjacent_codomains()
 
  211          assert(prev_slice()->size() == this->size());
 
  213            codomain() &= prev_slice()->codomain();
 
  214          else if(prev_slice()->is_gate())
 
  215            prev_slice()->codomain() &= codomain();
 
  220          assert(next_slice()->size() == this->size());
 
  222            codomain() &= next_slice()->codomain();
 
  223          else if(next_slice()->is_gate())
 
  224            next_slice()->codomain() &= codomain();
 
void set_empty()
Marks the interval matrix as empty.
Definition codac2_Matrix_addons_IntervalMatrixBase.h:299
 
auto lb() const
Returns a matrix containing the lower bounds of each interval element.
Definition codac2_MatrixBase_addons_IntervalMatrixBase.h:91
 
auto ub() const
Returns a matrix containing the upper bounds of each interval element.
Definition codac2_MatrixBase_addons_IntervalMatrixBase.h:103
 
Definition codac2_OctaSym.h:21