dune-common 2.8.0
Loading...
Searching...
No Matches
enumset.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_ENUMSET_HH
4#define DUNE_ENUMSET_HH
5
6#include <iostream>
7
8namespace Dune
9{
23 template<typename TA>
25 {
26 public:
30 typedef TA Type;
34 static bool contains(const Type& attribute);
35 };
36
40 template<typename TA>
41 class AllSet
42 {
43 public:
47 typedef TA Type;
51 static bool contains(const Type& attribute);
52 };
53
57 template<typename TA, int item>
59 {
60 public:
64 typedef TA Type;
65
70 static bool contains(const Type& attribute);
71 };
72
76 template<typename TA,int from, int end>
77 class EnumRange //: public PODSet<EnumRange<T,from,end>,T>
78 {
79 public:
83 typedef TA Type;
84 static bool contains(const Type& item);
85 };
86
92 template<typename S>
94 {
95 public:
96 typedef typename S::Type Type;
97
98 static bool contains(const Type& item)
99 {
100 return !S::contains(item);
101 }
102 };
103
107 template<class TI1, class TI2, typename TA=typename TI1::Type>
109 {
110 public:
111 static bool contains(const TA& item);
112 };
113
114 template<typename TA>
115 inline bool EmptySet<TA>::contains([[maybe_unused]] const Type& attribute)
116 {
117 return false;
118 }
119
120 template<typename TA>
121 inline bool AllSet<TA>::contains([[maybe_unused]] const Type& attribute)
122 {
123 return true;
124 }
125
126 template<typename TA,int i>
127 inline bool EnumItem<TA,i>::contains(const Type& item)
128 {
129 return item==i;
130 }
131
132 template<typename TA,int i>
134 {
135 return os<<i;
136 }
137
138 template<typename TA, int from, int to>
139 inline bool EnumRange<TA,from,to>::contains(const Type& item)
140 {
141 return from<=item && item<=to;
142 }
143
144 template<typename TA, int from, int to>
146 {
147 return os<<"["<<from<<" - "<<to<<"]";
148 }
149
150 template<class TI1, class TI2, typename TA>
151 inline bool Combine<TI1,TI2,TA>::contains(const TA& item)
152 {
153 return TI1::contains(item) ||
154 TI2::contains(item);
155 }
156
157 template<class TI1, class TI2>
158 inline Combine<TI1,TI2,typename TI1::Type> combine([[maybe_unused]] const TI1& set1,
159 [[maybe_unused]] const TI2& set2)
160 {
162 }
163
164 template<class TI1, class TI2, class T>
166 {
167 return os << TI1()<<" "<<TI2();
168 }
170}
171
172#endif
static bool contains(const Type &attribute)
Always returns true.
Definition enumset.hh:121
static bool contains(const Type &item)
Definition enumset.hh:139
static bool contains(const TA &item)
Definition enumset.hh:151
static bool contains(const Type &attribute)
Always returns false.
Definition enumset.hh:115
static bool contains(const Type &attribute)
Tests whether an item is in the set.
Definition enumset.hh:127
Combine< TI1, TI2, typename TI1::Type > combine(const TI1 &set1, const TI2 &set2)
Definition enumset.hh:158
std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
Definition bigunsignedint.hh:273
Dune namespace.
Definition alignedallocator.hh:11
An empty set.
Definition enumset.hh:25
TA Type
The POD type the set holds.
Definition enumset.hh:30
A set containing everything.
Definition enumset.hh:42
TA Type
The POD type the set holds.
Definition enumset.hh:47
A set consisting only of one item.
Definition enumset.hh:59
TA Type
The type the set holds.
Definition enumset.hh:64
A set representing a range including the borders.
Definition enumset.hh:78
TA Type
The type the set holds.
Definition enumset.hh:83
The negation of a set. An item is contained in the set if and only if it is not contained in the nega...
Definition enumset.hh:94
S::Type Type
Definition enumset.hh:96
static bool contains(const Type &item)
Definition enumset.hh:98
A set combining two other sets.
Definition enumset.hh:109