dune-multidomaingrid 2.12-git
Loading...
Searching...
No Matches
singlevalueset.hh
Go to the documentation of this file.
1#ifndef DUNE_MULTIDOMAINGRID_SINGLEVALUESET_HH
2#define DUNE_MULTIDOMAINGRID_SINGLEVALUESET_HH
3
4#include <limits>
5#include <cstddef>
6#include <cstdint>
9#include <type_traits>
10#include <cassert>
11
12namespace Dune {
13
14namespace mdgrid {
15
16template<typename SI>
17class SingleValueSet;
18
19
20template<typename SI>
22 const SingleValueSet<SI>& b);
23
24
25template<typename SI>
27 const SingleValueSet<SI>& b);
28
29
30template<typename SI>
32
33 friend bool setContains<>(const SingleValueSet<SI>& a,
34 const SingleValueSet<SI>& b);
35
36 friend void setAdd<>(SingleValueSet<SI>& a,
37 const SingleValueSet<SI>& b);
38
39public:
40
42
43 static const std::size_t maxSize = 1;
45 typedef const SubDomainIndex* Iterator;
47
49
51 {
53
54 static bool fixedSize(int dim, int codim)
55 {
56 return true;
57 }
58
60 {
61 return 1;
62 }
63
64 template<typename MessageBufferImp>
66 {
67 buf.write(sds._set);
68 }
69
70 template<typename MessageBufferImp>
72 {
74 buf.read(i);
75 assert(sds._set == emptyTag || sds._set == i);
76 sds._set = i;
77 }
78
79 };
80
81 Iterator begin() const {
82 return &_set;
83 }
84
85 Iterator end() const {
86 return &_set + (_set != emptyTag ? 1 : 0);
87 }
88
89 bool contains(SubDomainIndex domain) const {
90 return _set == domain;
91 }
92
93 template<typename Set>
94 bool containsAll(const Set& set) const {
95 return setContains(*this,set);
96 }
97
98 bool simple() const {
99 return _set != emptyTag;
100 }
101
102 bool empty() const {
103 return _set == emptyTag;
104 }
105
106 SetState state() const {
107 return _set == emptyTag ? emptySet : simpleSet;
108 }
109
111 return _set == emptyTag ? 0 : 1;
112 }
113
114 void clear() {
115 _set = emptyTag;
116 }
117
118 void add(SubDomainIndex domain) {
119 assert(_set == emptyTag || _set == domain);
120 _set = domain;
121 }
122
123 void remove(SubDomainIndex domain) {
124 assert(_set == domain);
125 _set = emptyTag;
126 }
127
128 void set(SubDomainIndex domain) {
129 _set = domain;
130 }
131
132 template<typename Set>
133 void addAll(const Set& set) {
134 setAdd(*this,set);
135 }
136
137 int domainOffset(SubDomainIndex domain) const {
138 assert(_set == domain);
139 return 0;
140 }
141
143 _set(emptyTag)
144 {}
145
146private:
147 SubDomainIndex _set;
148
149};
150
151
152template<typename SI>
153inline bool setContains(const SingleValueSet<SI>& a,
154 const SingleValueSet<SI>& b) {
155 return a._set == b._set;
156}
157
158template<typename SI>
160 const SingleValueSet<SI>& b) {
161 assert(a._set == SingleValueSet<SI>::emptyTag || a._set == b._set);
162 a._set = b._set;
163}
164
165} // namespace mdgrid
166
167} // namespace Dune
168
169#endif // DUNE_MULTIDOMAINGRID_SINGLEVALUESET_HH
bool setContains(const ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
void setAdd(ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
size_type dim() const
Definition singlevalueset.hh:31
SingleValueSet< SubDomainIndex > This
Definition singlevalueset.hh:46
std::size_t size() const
Definition singlevalueset.hh:110
friend bool setContains(const SingleValueSet< SI > &a, const SingleValueSet< SI > &b)
Definition singlevalueset.hh:153
SetState state() const
Definition singlevalueset.hh:106
SI SubDomainIndex
Definition singlevalueset.hh:41
bool simple() const
Definition singlevalueset.hh:98
const SubDomainIndex * Iterator
Definition singlevalueset.hh:45
void addAll(const Set &set)
Definition singlevalueset.hh:133
bool containsAll(const Set &set) const
Definition singlevalueset.hh:94
int domainOffset(SubDomainIndex domain) const
Definition singlevalueset.hh:137
Iterator end() const
Definition singlevalueset.hh:85
static const SubDomainIndex emptyTag
Definition singlevalueset.hh:44
SingleValueSet()
Definition singlevalueset.hh:142
void remove(SubDomainIndex domain)
Definition singlevalueset.hh:123
bool contains(SubDomainIndex domain) const
Definition singlevalueset.hh:89
bool empty() const
Definition singlevalueset.hh:102
Iterator begin() const
Definition singlevalueset.hh:81
SetState
Definition singlevalueset.hh:48
@ multipleSet
Definition singlevalueset.hh:48
@ simpleSet
Definition singlevalueset.hh:48
@ emptySet
Definition singlevalueset.hh:48
void clear()
Definition singlevalueset.hh:114
void set(SubDomainIndex domain)
Definition singlevalueset.hh:128
static const std::size_t maxSize
Definition singlevalueset.hh:43
void add(SubDomainIndex domain)
Definition singlevalueset.hh:118
friend void setAdd(SingleValueSet< SI > &a, const SingleValueSet< SI > &b)
Definition singlevalueset.hh:159
Definition singlevalueset.hh:51
static void gather(MessageBufferImp &buf, const SingleValueSet &sds)
Definition singlevalueset.hh:65
static void scatter(MessageBufferImp &buf, SingleValueSet &sds, std::size_t n)
Definition singlevalueset.hh:71
static bool fixedSize(int dim, int codim)
Definition singlevalueset.hh:54
static std::size_t size(const SingleValueSet &sds)
Definition singlevalueset.hh:59
SubDomainIndex DataType
Definition singlevalueset.hh:52