1#ifndef DUNE_MULTIDOMAINGRID_ARRAYBASEDSET_HH
2#define DUNE_MULTIDOMAINGRID_ARRAYBASEDSET_HH
13#include <dune/common/exceptions.hh>
19template<
typename SI, std::
size_t capacity>
23template<
typename SI, std::
size_t capacity>
28template<
typename SI, std::
size_t capacity>
33template<
typename SI, std::
size_t capacity>
45 static const std::size_t
maxSize = capacity;
47 typedef typename std::array<SubDomainIndex,maxSize>::iterator
ArrayIterator;
48 typedef typename std::array<SubDomainIndex,maxSize>::const_iterator
Iterator;
67 template<
typename MessageBufferImp>
74 template<
typename MessageBufferImp>
92 return _set.begin() + _size;
96 return std::binary_search(_set.begin(),_set.begin() + _size,domain);
99 template<
typename Set>
107 subtrahend.
begin(),subtrahend.
end(),
109 _size = res - _set.begin();
140 if (!std::binary_search(_set.begin(),_set.begin()+_size,domain)) {
142 _set[_size++] = domain;
143 std::sort(_set.begin(),_set.begin()+_size);
148 ArrayIterator it = std::lower_bound(_set.begin(),_set.begin()+_size,domain);
149 assert(*it == domain);
151 std::sort(_set.begin(),_set.end() + (_size--));
159 template<
typename Set>
165 Iterator it = std::lower_bound(_set.begin(),_set.begin()+_size,domain);
166 assert(*it == domain);
167 return it - _set.begin();
175 return _size == r._size && std::equal(_set.begin(),_set.begin()+_size,r._set.begin());
184 std::array<SubDomainIndex,maxSize> _set;
189template<
typename SubDomainIndex, std::
size_t capacity>
192 return std::includes(a._set.begin(),a._set.begin() + a._size,b._set.begin(),b._set.begin() + b._size);
195template<
typename SubDomainIndex, std::
size_t capacity>
198 std::array<SubDomainIndex,2*capacity> tmp;
199 typename std::array<SubDomainIndex,2*capacity>::iterator it = std::set_union(a._set.begin(), a._set.begin() + a._size,
200 b._set.begin(), b._set.begin() + b._size,
202 a._size = it - tmp.begin();
203 assert(a._size <= capacity);
204 std::copy(tmp.begin(),++it,a._set.begin());
Definition: multidomaingrid.hh:8
bool setContains(const ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
void setAdd(ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
Definition: arraybasedset.hh:34
Iterator begin() const
Definition: arraybasedset.hh:87
void clear()
Definition: arraybasedset.hh:135
Iterator end() const
Definition: arraybasedset.hh:91
friend void setAdd(ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
bool simple() const
Definition: arraybasedset.hh:112
std::size_t size() const
Definition: arraybasedset.hh:131
bool operator!=(const ArrayBasedSet &r) const
Definition: arraybasedset.hh:178
friend bool setContains(const ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
void set(SubDomainIndex domain)
Definition: arraybasedset.hh:154
bool contains(SubDomainIndex domain) const
Definition: arraybasedset.hh:95
std::array< SubDomainIndex, maxSize >::const_iterator Iterator
Definition: arraybasedset.hh:48
bool operator==(const ArrayBasedSet &r) const
Definition: arraybasedset.hh:174
bool empty() const
Definition: arraybasedset.hh:116
void remove(SubDomainIndex domain)
Definition: arraybasedset.hh:147
SetState state() const
Definition: arraybasedset.hh:120
void difference(const ArrayBasedSet &minuend, const ArrayBasedSet &subtrahend)
Definition: arraybasedset.hh:104
int domainOffset(SubDomainIndex domain) const
Definition: arraybasedset.hh:164
bool containsAll(const Set &set) const
Definition: arraybasedset.hh:100
SI SubDomainIndex
Definition: arraybasedset.hh:43
SetState
Definition: arraybasedset.hh:51
@ multipleSet
Definition: arraybasedset.hh:51
@ emptySet
Definition: arraybasedset.hh:51
@ simpleSet
Definition: arraybasedset.hh:51
std::array< SubDomainIndex, maxSize >::iterator ArrayIterator
Definition: arraybasedset.hh:47
static const std::size_t maxSize
Definition: arraybasedset.hh:45
ArrayBasedSet< SubDomainIndex, capacity > This
Definition: arraybasedset.hh:49
static const SubDomainIndex emptyTag
Definition: arraybasedset.hh:46
ArrayBasedSet()
Definition: arraybasedset.hh:170
void addAll(const Set &set)
Definition: arraybasedset.hh:160
void add(SubDomainIndex domain)
Definition: arraybasedset.hh:139
Definition: arraybasedset.hh:54
static void scatter(MessageBufferImp &buf, ArrayBasedSet &sds, std::size_t n)
Definition: arraybasedset.hh:75
static std::size_t size(const ArrayBasedSet &sds)
Definition: arraybasedset.hh:62
SubDomainIndex DataType
Definition: arraybasedset.hh:55
static void gather(MessageBufferImp &buf, const ArrayBasedSet &sds)
Definition: arraybasedset.hh:68
static bool fixedSize(int dim, int codim)
Definition: arraybasedset.hh:57