3 #ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH 4 #define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH 7 #include <dune/common/concept.hh> 24 auto require(C&& c) -> decltype(
34 auto require(C&& c) -> decltype(
43 template<
class C,
class I>
44 auto require(C&& c, I&& i) -> decltype(
54 auto require(
const N& node) -> decltype(
55 requireType<typename N::size_type>(),
56 requireType<typename N::TreePath>(),
57 requireConvertible<typename N::size_type>(node.size()),
58 requireConvertible<typename N::size_type>(node.offset()),
59 requireConvertible<typename N::size_type>(node.localIndex(std::declval<typename N::size_type>())),
60 requireConvertible<typename N::size_type>(node.treeIndex()),
61 requireConvertible<typename N::TreePath>(node.treePath()),
69 template<
class Gr
idView>
73 auto require(
const N& node) -> decltype(
74 requireType<typename N::Element>(),
75 requireType<typename N::FiniteElement>(),
76 requireConvertible<typename N::Element>(node.element()),
77 requireConvertible<const typename N::FiniteElement&>(node.finiteElement()),
78 requireConvertible<typename N::Element>(*(std::declval<GridView>().
template begin<0>())),
84 template<
class Gr
idView>
88 template<
class Gr
idView>
92 auto require(
const N& node) -> decltype(
100 template<
class Gr
idView>
103 template<
class ST,
class TP>
111 auto require(
const N& node) -> decltype(
119 template<
class Gr
idView>
123 auto require(
const N& node) -> decltype(
132 template<
class PreBasis>
136 auto require(
const I& indexSet) -> decltype(
137 requireType<typename I::size_type>(),
138 requireType<typename I::MultiIndex>(),
139 requireType<typename I::PreBasis>(),
140 requireType<typename I::Node>(),
141 requireSameType<typename I::PreBasis, PreBasis>(),
142 const_cast<I&>(indexSet).bind(std::declval<typename I::Node>()),
143 const_cast<I&>(indexSet).unbind(),
144 requireConvertible<typename I::size_type>(indexSet.size()),
145 requireConvertible<
typename std::vector<typename I::MultiIndex>::iterator>(
146 indexSet.indices(std::declval<
typename std::vector<typename I::MultiIndex>::iterator>()))
152 template<
class Gr
idView>
158 auto require(
const PB& preBasis) -> decltype(
159 requireType<typename PB::GridView>(),
160 requireType<typename PB::size_type>(),
161 requireType<typename PB::MultiIndex>(),
162 requireType<typename PB::SizePrefix>(),
163 requireType<
typename PB::template Node<RootTreePath>>(),
164 requireType<
typename PB::template IndexSet<RootTreePath>>(),
165 requireSameType<typename PB::GridView, GridView>(),
166 const_cast<PB&>(preBasis).initializeIndices(),
167 requireConvertible<typename PB::GridView>(preBasis.gridView()),
168 requireConvertible<
typename PB::template Node<RootTreePath>>(preBasis.node(
RootTreePath())),
169 requireConvertible<
typename PB::template IndexSet<RootTreePath>>(preBasis.template indexSet<RootTreePath>()),
170 requireConvertible<typename PB::size_type>(preBasis.size()),
171 requireConvertible<typename PB::size_type>(preBasis.size(std::declval<typename PB::SizePrefix>())),
172 requireConvertible<typename PB::size_type>(preBasis.dimension()),
173 requireConvertible<typename PB::size_type>(preBasis.maxNodeSize()),
175 requireConcept<
NodeIndexSet<PB>>(preBasis.template indexSet<RootTreePath>())
182 template<
class GlobalBasis>
186 auto require(
const V& localView) -> decltype(
187 requireType<typename V::size_type>(),
188 requireType<typename V::GlobalBasis>(),
189 requireType<typename V::Tree>(),
190 requireType<typename V::GridView>(),
191 requireType<typename V::Element>(),
192 requireSameType<typename V::GlobalBasis, GlobalBasis>(),
193 requireSameType<typename V::GridView, typename GlobalBasis::GridView>(),
194 requireSameType<typename V::size_type, typename GlobalBasis::size_type>(),
195 requireSameType<
typename V::Element,
typename GlobalBasis::GridView::template Codim<0>::Entity>(),
196 const_cast<V&>(localView).bind(std::declval<typename V::Element>()),
197 const_cast<V&>(localView).unbind(),
198 requireConvertible<typename V::Tree>(localView.tree()),
199 requireConvertible<typename V::size_type>(localView.size()),
200 requireConvertible<typename V::size_type>(localView.maxSize()),
201 requireConvertible<typename V::GlobalBasis>(localView.globalBasis()),
210 template<
class LocalView>
214 auto require(
const I& indexSet) -> decltype(
215 requireType<typename I::size_type>(),
216 requireType<typename I::MultiIndex>(),
217 requireType<typename I::LocalView>(),
218 requireSameType<typename I::LocalView, LocalView>(),
219 const_cast<I&>(indexSet).bind(std::declval<typename I::LocalView>()),
220 const_cast<I&>(indexSet).unbind(),
221 requireConvertible<typename I::size_type>(indexSet.size()),
222 requireConvertible<typename I::MultiIndex>(indexSet.index(std::declval<typename I::size_type>())),
223 requireConvertible<typename I::LocalView>(indexSet.localView())
230 template<
class Gr
idView>
234 auto require(
const B& basis) -> decltype(
235 requireType<typename B::GridView>(),
236 requireType<typename B::size_type>(),
237 requireType<typename B::MultiIndex>(),
238 requireType<typename B::SizePrefix>(),
239 requireType<typename B::LocalIndexSet>(),
240 requireType<typename B::LocalView>(),
241 requireSameType<typename B::GridView, GridView>(),
242 requireConvertible<typename B::GridView>(basis.gridView()),
243 requireConvertible<typename B::LocalIndexSet>(basis.localIndexSet()),
244 requireConvertible<typename B::LocalView>(basis.localView()),
245 requireConvertible<typename B::size_type>(basis.size()),
246 requireConvertible<typename B::size_type>(basis.size(std::declval<typename B::SizePrefix>())),
247 requireConvertible<typename B::size_type>(basis.dimension()),
258 #endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH Definition: concepts.hh:101
Definition: concepts.hh:211
Definition: concepts.hh:70
Definition: concepts.hh:31
Definition: concepts.hh:133
Definition: concepts.hh:89
Definition: concepts.hh:51
Definition: concepts.hh:21
decltype(TypeTree::hybridTreePath()) RootTreePath
Definition: concepts.hh:155
Definition: concepts.hh:183
Definition: concepts.hh:104
Definition: concepts.hh:85
Definition: concepts.hh:231
Definition: concepts.hh:153
typename Dune::Functions::CompositeBasisNode< ST, TP, T... > CompositeBasisNode
Definition: concepts.hh:107
Definition: polynomial.hh:7
typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
Expand tuple arguments as template arguments.
Definition: utility.hh:91
Definition: concepts.hh:41