24 template<
typename... X>
29 using ContractedTypes = std::tuple<X...>;
37 virtual ~CtcBase() =
default;
44 virtual void contract(X&... x)
const = 0;
46 virtual void contract_tube(SlicedTube<X>&... x)
const;
49 virtual std::shared_ptr<CtcBase<X...>> copy()
const = 0;
56 template<
typename C,
typename... X>
57 class Ctc :
public CtcBase<X...>
65 virtual std::shared_ptr<CtcBase<X...>> copy()
const
67 return std::make_shared<C>(*
dynamic_cast<const C*
>(
this));
71 template<
class C,
class... X>
72 concept IsCtcBaseOrPtr = (std::is_base_of_v<CtcBase<X...>,C>
73 || std::is_same_v<std::shared_ptr<CtcBase<X...>>,C>);
75 template<
class C,
class... X>
76 concept IsCtcBase = std::is_base_of_v<CtcBase<X...>,C>;
80 requires (IsCtcBase<C,Interval>) || (IsCtcBase<C,IntervalVector>)
81 struct is_interval_based<C> : std::false_type {};
84 requires (IsCtcBase<C,Interval>) || (IsCtcBase<C,IntervalVector>)
85 struct is_ctc<C> : std::true_type {};
88 requires (IsCtcBase<C,Interval>) || (IsCtcBase<C,IntervalVector>)
89 struct is_sep<C> : std::false_type {};
92 requires IsCtcBaseOrPtr<C,IntervalVector>
93 const CtcBase<IntervalVector>& ctc(
const C& c)
95 if constexpr(std::is_base_of_v<CtcBase<IntervalVector>,C>)
Definition codac2_OctaSym.h:21