codac 2.0.0
Loading...
Searching...
No Matches
codac2_CtcQInter.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <type_traits>
13#include "codac2_qinter.h"
14#include "codac2_CtcWrapper.h"
15#include "codac2_Collection.h"
17
18namespace codac2
19{
20 class CtcQInter : public Ctc<CtcQInter,IntervalVector>
21 {
22 public:
23
24 explicit CtcQInter(unsigned int q, Index n, const Collection<CtcBase<IntervalVector>>& ctcs = {})
25 : Ctc<CtcQInter,IntervalVector>(n), _q(q), _ctcs(ctcs)
26 {
27 assert_release(n > 0);
28 }
29
30 template<typename C>
31 requires (IsCtcBaseOrPtr<C,IntervalVector> && !std::is_same_v<CtcQInter,C>)
32 CtcQInter(unsigned int q, const C& c)
33 : CtcQInter(q, size_of(c), {c})
34 {
35 assert_release(q <= 1);
36 }
37
38 template<typename... C>
39 requires (IsCtcBaseOrPtr<C,IntervalVector> && ...)
40 CtcQInter(unsigned int q, const C&... c)
41 : CtcQInter(q, size_first_item(c...), {c...})
42 {
43 assert_release(all_same_size(c...));
44 assert_release(q <= sizeof...(c));
45 }
46
47 size_t nb() const;
48
49 void contract(IntervalVector& x) const;
50
51 protected:
52
53 size_t _q;
54 Collection<CtcBase<IntervalVector>> _ctcs;
55 };
56}
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