codac 2.0.0
Loading...
Searching...
No Matches
codac2_Domain.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <cstdio>
13#include <vector>
14#include <string>
15#include "codac2_math.h"
16
17namespace codac2
18{
19 class Domain
20 {
21 public:
22
23 virtual ~Domain() = default;
24 };
25
26 template<typename T,typename V>
27 class DomainInterface : public Domain
28 {
29 public:
30
31 DomainInterface()
32 { }
33
34 ~DomainInterface()
35 { }
36
37 virtual V lb() const = 0;
38 virtual V ub() const = 0;
39 virtual V mid() const = 0;
40 virtual V mag() const = 0;
41 virtual V mig() const = 0;
42 virtual V rad() const = 0;
43 virtual V diam() const = 0;
44 virtual double volume() const = 0;
45 virtual void set_empty() = 0;
46 virtual bool is_empty() const = 0;
47 virtual bool contains(const V& x) const = 0;
48 virtual bool interior_contains(const V& x) const = 0;
49 virtual bool is_unbounded() const = 0;
50 virtual bool is_degenerated() const = 0;
51 virtual bool intersects(const T &x) const = 0;
52 virtual bool is_disjoint(const T& x) const = 0;
53 virtual bool overlaps(const T &x) const = 0;
54 virtual bool is_subset(const T& x) const = 0;
55 virtual bool is_strict_subset(const T& x) const = 0;
56 virtual bool is_interior_subset(const T& x) const = 0;
57 virtual bool is_strict_interior_subset(const T& x) const = 0;
58 virtual bool is_superset(const T& x) const = 0;
59 virtual bool is_strict_superset(const T& x) const = 0;
60 };
61
62 template<typename... X>
63 static double total_volume(const X&... x)
64 {
65 double v = 0;
66 ((v += x.volume()), ...);
67 return v;
68 }
69}