codac 1.5.6
Loading...
Searching...
No Matches
codac2_cart_prod.h
Go to the documentation of this file.
1
9
10#pragma once
11
13#include "codac2_Matrix.h"
14#include "codac2_matrices.h"
15
16namespace codac2
17{
18 inline IntervalVector to_IntervalVector(const Interval& x)
19 {
20 return { x };
21 }
22
23 inline IntervalVector to_IntervalVector(const IntervalVector& x)
24 {
25 return x;
26 }
27
28 inline IntervalVector to_IntervalVector(const Vector& x)
29 {
30 return x.template cast<Interval>();
31 }
32
33 // Flatten some matrix into an interval vector
34 template<typename T,int R,int C>
35 requires (!Eigen::IsVectorOrRow<R,C>)
36 inline IntervalVector to_IntervalVector(const Eigen::Matrix<T,R,C>& x)
37 {
38 return Eigen::Map<const Eigen::Matrix<T,R,1>>(x.data(), x.size());
39 }
40
41 inline IntervalVector cart_prod()
42 {
43 return IntervalVector(0);
44 }
45
46 template<typename... X>
47 requires ((is_interval_based_v<X>) || ...)
48 && ((!is_ctc_v<X>) && ...) && ((!is_sep_v<X>) && ...)
49 inline IntervalVector cart_prod(const X&... x)
50 {
51 std::vector<IntervalVector> v_x;
52 ((v_x.push_back(to_IntervalVector(x))), ...);
53
54 Index n = 0;
55 for(const auto& xi : v_x)
56 n += xi.size();
57 IntervalVector x_(n);
58
59 Index i = 0;
60 for(const auto& xi : v_x)
61 {
62 x_.put(i, xi);
63 i += xi.size();
64 }
65 return x_;
66 }
67
68 template<typename... X>
69 requires ((!is_interval_based_v<X>) && ...)
70 && ((!is_ctc_v<X>) && ...) && ((!is_sep_v<X>) && ...)
71 inline Vector cart_prod(const X&... x)
72 {
73 return cart_prod(to_IntervalVector(x)...).mid();
74 }
75}
Interval class, for representing closed and connected subsets of .
Definition codac2_Interval.h:62