codac 2.0.0
Loading...
Searching...
No Matches
codac2_tube_cart_prod.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <tuple>
13#include "codac2_cart_prod.h"
14#include "codac2_SlicedTube.h"
15
16namespace codac2
17{
35 template<typename... X>
37 {
38 static_assert(sizeof...(X) > 0, "tube_cart_prod requires at least one tube");
39 Index s = 0;
40 ((s += x.size()), ...);
41
42 const auto& x0 = std::get<0>(std::forward_as_tuple(x...));
43 auto tdomain = x0.tdomain();
44 assert_release(((x.tdomain() == tdomain) && ...));
45 SlicedTube v(tdomain, IntervalVector(s));
46
47 for(auto it = tdomain->begin() ; it != tdomain->end() ; it++)
48 v.slice(it)->codomain() = cart_prod(x.slice(it)->codomain()...);
49
50 return v;
51 }
52}
Tube represented over a sliced temporal domain.
Definition codac2_SlicedTube.h:38
std::shared_ptr< Slice< T > > slice(const std::list< TSlice >::iterator &it)
Returns the slice attached to a temporal iterator.
Definition codac2_SlicedTube.h:249
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
SlicedTube< IntervalVector > tube_cart_prod(const X &... x)
Computes the Cartesian product of several sliced tubes.
Definition codac2_tube_cart_prod.h:36