19 class CtcCartProd :
public Ctc<CtcCartProd,IntervalVector>
23 CtcCartProd(
const Collection<CtcBase<IntervalVector>>& ctcs)
24 : Ctc<CtcCartProd,IntervalVector>([ctcs] {
26 for(
const auto& ci : ctcs)
33 requires (IsCtcBaseOrPtr<C,IntervalVector> && !std::is_same_v<CtcCartProd,C>)
34 CtcCartProd(
const C& c)
35 : Ctc<CtcCartProd,IntervalVector>(size_of(c)), _ctcs(c)
38 template<
typename... C>
39 requires (IsCtcBaseOrPtr<C,IntervalVector> && ...)
40 CtcCartProd(
const C&... c)
41 : Ctc<CtcCartProd,IntervalVector>((0 + ... + size_of(c))), _ctcs(c...)
44 void contract(IntervalVector& x)
const
46 assert_release(x.size() == this->size());
49 for(
const auto& ci : _ctcs)
51 IntervalVector xi = x.subvector(i,i+ci->size()-1);
56 assert(i == x.size());
61 Collection<CtcBase<IntervalVector>> _ctcs;
64 template<
typename... C>
65 requires ((is_ctc_v<C>) || ...) && (!(is_sep_v<C>) && ...)
66 inline CtcCartProd cart_prod(
const C&... c)
68 return CtcCartProd(c...);