codac 1.5.6
Loading...
Searching...
No Matches
codac2_SepWrapper.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include "codac2_Sep.h"
13#include "codac2_SepCtcPair.h"
14#include "codac2_CtcWrapper.h"
15#include "codac2_CtcUnion.h"
16#include "codac2_Paving.h"
17
18namespace codac2
19{
21
22 template<typename T>
23 class SepWrapper : public Sep<SepWrapper<T>>
24 {
25 public:
26
27 SepWrapper(const T& y)
28 : Sep<SepWrapper<T>>(y.size()), _y(y)
29 { }
30
31 protected:
32
33 const T _y;
34 };
35
37
38 template<>
39 class SepWrapper<IntervalVector> : public SepCtcPair
40 {
41 public:
42
43 SepWrapper(const IntervalVector& y)
44 : SepCtcPair(complementary_union(y), CtcWrapper<IntervalVector>(y))
45 { }
46
47 BoxPair separate(const IntervalVector& x) const;
48
49 protected:
50
51 CtcUnion<IntervalVector> complementary_union(const IntervalVector& y) const
52 {
53 CtcUnion<IntervalVector> cu(y.size());
54 for(const auto& complem_y : y.complementary())
55 cu |= CtcWrapper<IntervalVector>(complem_y);
56 return cu;
57 }
58 };
59
60 template<>
61 class SepWrapper<PavingInOut>: public Sep<SepWrapper<PavingInOut>>
62 {
63 public:
64
65 SepWrapper(const PavingInOut& P)
66 : Sep<SepWrapper<PavingInOut>>(P.size()), _P(P)
67 { }
68
69 BoxPair separate(const IntervalVector& x) const;
70
71 protected:
72
73 const PavingInOut _P;
74 };
75}