53 template<
typename... X>
54 class CtcInter :
public Ctc<CtcInter<X...>,X...>
71 if constexpr(std::is_same_v<X...,
Interval>)
86 requires (IsCtcBaseOrPtr<C,X...> && !std::is_same_v<
CtcInter<X...>,C>)
99 template<
typename... C>
100 requires (IsCtcBaseOrPtr<C,X...> && ...)
102 : Ctc<
CtcInter<X...>,X...>(size_first_item(c...)),
_ctcs(c...)
104 assert_release(all_same_size(c...));
115 : Ctc<
CtcInter<X...>,X...>(ctcs.front()->size()),
_ctcs(ctcs)
117 for(
const auto& ci :
_ctcs)
119 assert_release(ci->size() == this->size());
131 requires IsCtcBaseOrPtr<C,X...>
133 :
CtcInter(Collection<CtcBase<X...>>(ctcs))
156 for(
const auto& ci :
_ctcs)
159 if((x.is_empty() | ...))
175 requires IsCtcBaseOrPtr<C,X...>
178 assert_release(size_of(c) == this->size());
204 template<
typename Tuple>
212 template<
typename... T>
228 template<
typename C1,
typename C2>
243 template<
typename C1,
typename C2>
258 template<
typename C1,
typename C2>
273 template<
typename C1,
typename C2>
289 template<
typename C2>
290 requires std::is_base_of_v<CtcBase<IntervalVector>,C2>
293 assert_release(c1.size() == c2.size());
307 template<
typename C1>
308 requires std::is_base_of_v<CtcBase<IntervalVector>,C1>
311 assert_release(c1.size() == c2.size());
317 CtcInter(Index) -> CtcInter<IntervalVector>;
319 template<
typename... C>
320 requires (IsCtcBaseOrPtr<C,IntervalVector> && ...)
321 CtcInter(
const C&...) -> CtcInter<IntervalVector>;
324 CtcInter(std::initializer_list<C>) -> CtcInter<IntervalVector>;
Sequential intersection of several contractors:
Definition codac2_CtcInter.h:55
size_t nb() const
Returns the number of stored contractors.
Definition codac2_CtcInter.h:141
CtcInter(const C &c)
Builds an intersection contractor from a single contractor.
Definition codac2_CtcInter.h:87
Collection< CtcBase< X... > > _ctcs
Definition codac2_CtcInter.h:186
CtcInter< X... > & operator&=(const C &c)
Appends a contractor to the current intersection.
Definition codac2_CtcInter.h:176
CtcInter(std::initializer_list< C > ctcs)
Builds an intersection contractor from a std::initializer_list of contractors.
Definition codac2_CtcInter.h:132
CtcInter(const C &... c)
Builds an intersection contractor from several contractors.
Definition codac2_CtcInter.h:101
void contract(X &... x) const
Contracts the given domain(s) by applying all stored contractors in sequence.
Definition codac2_CtcInter.h:154
CtcInter(Index n)
Builds a neutral intersection contractor with a prescribed domain size.
Definition codac2_CtcInter.h:68
CtcInter(const Collection< CtcBase< X... > > &ctcs)
Builds an intersection contractor from a collection of contractors.
Definition codac2_CtcInter.h:114
Interval class, for representing closed and connected subsets of .
Definition codac2_Interval.h:50
Definition codac2_OctaSym.h:21
Eigen::Matrix< Interval,-1, 1 > IntervalVector
Alias for a dynamic-size column vector of intervals.
Definition codac2_IntervalVector.h:25
CtcInterType< typenameC1::ContractedTypes >::Ctc operator&(const C1 &c1, const C2 &c2)
Builds an intersection contractor from two contractors.
Definition codac2_CtcInter.h:229
Helper meta-function returning the appropriate CtcInter type from a tuple.
Definition codac2_CtcInter.h:205