19 template<
typename... X>
20 class CtcUnion :
public Ctc<CtcUnion<X...>,X...>
24 explicit CtcUnion(Index n)
25 : Ctc<CtcUnion<X...>,X...>(n)
27 if constexpr(std::is_same_v<X...,Interval>)
28 assert_release(n == 1);
32 requires (IsCtcBaseOrPtr<C,X...> && !std::is_same_v<CtcUnion<X...>,C>)
34 : Ctc<CtcUnion<X...>,X...>(size_of(c)), _ctcs(c)
37 template<
typename... C>
38 requires (IsCtcBaseOrPtr<C,X...> && ...)
39 CtcUnion(
const C&... c)
40 : Ctc<CtcUnion<X...>,X...>(size_first_item(c...)), _ctcs(c...)
42 assert_release(all_same_size(c...));
51 void contract_impl(X_& x)
const
56 for(
const auto& ci : _ctcs)
59 ci->contract(saved_x);
66 void contract(X&... x)
const
73 requires IsCtcBaseOrPtr<C,X...>
74 CtcUnion<X...>& operator|=(
const C& c)
76 assert_release(size_of(c) == this->size());
83 Collection<CtcBase<X...>> _ctcs;
87 class CtcUnion<> :
public CtcUnion<IntervalVector>
90 template<
typename Tuple>
93 template<
typename... T>
94 struct CtcUnionType<std::tuple<T...>> {
95 using Ctc = CtcUnion<T...>;
98 template<
typename C1,
typename C2>
99 typename CtcUnionType<typename C1::ContractedTypes>::Ctc operator|(
const C1& c1,
const C2& c2)
104 template<
typename C1,
typename C2>
105 typename CtcUnionType<typename C1::ContractedTypes>::Ctc operator|(
const std::shared_ptr<C1>& c1,
const std::shared_ptr<C2>& c2)
110 template<
typename C1,
typename C2>
111 typename CtcUnionType<typename C1::ContractedTypes>::Ctc operator|(
const std::shared_ptr<C1>& c1,
const C2& c2)
116 template<
typename C1,
typename C2>
117 typename CtcUnionType<typename C1::ContractedTypes>::Ctc operator|(
const C1& c1,
const std::shared_ptr<C2>& c2)
122 template<
typename C2>
123 requires std::is_base_of_v<CtcBase<IntervalVector>,C2>
124 inline CtcUnion<IntervalVector> operator|(
const IntervalVector& c1,
const C2& c2)
126 assert_release(c1.size() == c2.size());
127 return CtcUnion<IntervalVector>(CtcWrapper(c1),c2);
130 template<
typename C1>
131 requires std::is_base_of_v<CtcBase<IntervalVector>,C1>
132 inline CtcUnion<IntervalVector> operator|(
const C1& c1,
const IntervalVector& c2)
134 assert_release(c1.size() == c2.size());
135 return CtcUnion<IntervalVector>(c1,CtcWrapper(c2));
139 CtcUnion(Index) -> CtcUnion<IntervalVector>;
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