codac 1.5.6
Loading...
Searching...
No Matches
codac2_Sep.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <memory>
14
15namespace codac2
16{
17 class BoxPair
18 {
19 public:
20
21 BoxPair(const BoxPair& x)
22 : _bp { x._bp }, inner(_bp[0]), outer(_bp[1])
23 { }
24
25 BoxPair(const IntervalVector& inner_, const IntervalVector& outer_)
26 : _bp { inner_, outer_ }, inner(_bp[0]), outer(_bp[1])
27 { }
28
29 BoxPair& operator=(const BoxPair& x)
30 {
31 _bp = x._bp;
32 return *this;
33 }
34
35 // Pybind11 needs iterators for __iter__ method, that are provided
36 // by std::array. References 'inner' and 'outer' are aliases for ease of use.
37 std::array<IntervalVector,2> _bp;
38
39 IntervalVector& inner;
40 IntervalVector& outer;
41 };
42
43 inline std::ostream& operator<<(std::ostream& os, const BoxPair& x)
44 {
45 os << "(" << x.inner << "," << x.outer << ")";
46 return os;
47 }
48
49 class SepBase
50 {
51 public:
52
53 SepBase(Index n)
54 : _n(n)
55 {
56 assert(n > 0);
57 }
58
59 virtual ~SepBase() = default;
60
61 Index size() const
62 {
63 return _n;
64 }
65
66 virtual std::shared_ptr<SepBase> copy() const = 0;
67 virtual BoxPair separate(const IntervalVector& x) const = 0;
68
69 protected:
70
71 const Index _n;
72 };
73
74 template<typename S>
75 class Sep : public SepBase
76 {
77 public:
78
79 Sep(Index n)
80 : SepBase(n)
81 { }
82
83 virtual std::shared_ptr<SepBase> copy() const
84 {
85 return std::make_shared<S>(*dynamic_cast<const S*>(this));
86 }
87 };
88
89 template<class S>
90 concept IsSepBaseOrPtr = (std::is_base_of_v<SepBase,S>
91 || std::is_base_of_v<S,std::shared_ptr<SepBase>>);
92
93
94 template<typename S>
95 requires (IsSepBaseOrPtr<S>)
96 struct is_interval_based<S> : std::false_type {};
97
98 template<typename S>
99 requires (IsSepBaseOrPtr<S>)
100 struct is_ctc<S> : std::false_type {};
101
102 template<typename S>
103 requires (IsSepBaseOrPtr<S>)
104 struct is_sep<S> : std::true_type {};
105}
std::ostream & operator<<(std::ostream &os, const BoolInterval &x)
Streams out a BoolInterval.
Definition codac2_BoolInterval.h:45