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 NodeFactory>
136 auto require(
const I& indexSet) -> decltype(
137 requireType<typename I::size_type>(),
138 requireType<typename I::MultiIndex>(),
139 requireType<typename I::NodeFactory>(),
140 requireType<typename I::Node>(),
141 requireSameType<typename I::NodeFactory, NodeFactory>(),
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 I::MultiIndex>(indexSet.index(std::declval<typename I::size_type>()))
151 template<
class Gr
idView>
157 auto require(
const F& factory) -> decltype(
158 requireType<typename F::GridView>(),
159 requireType<typename F::size_type>(),
160 requireType<typename F::MultiIndex>(),
161 requireType<typename F::SizePrefix>(),
162 requireType<
typename F::template Node<RootTreePath>>(),
163 requireType<
typename F::template IndexSet<RootTreePath>>(),
164 requireSameType<typename F::GridView, GridView>(),
165 const_cast<F&>(factory).initializeIndices(),
166 requireConvertible<typename F::GridView>(factory.gridView()),
167 requireConvertible<
typename F::template Node<RootTreePath>>(factory.node(
RootTreePath())),
168 requireConvertible<
typename F::template IndexSet<RootTreePath>>(factory.template indexSet<RootTreePath>()),
169 requireConvertible<typename F::size_type>(factory.size()),
170 requireConvertible<typename F::size_type>(factory.size(std::declval<typename F::SizePrefix>())),
171 requireConvertible<typename F::size_type>(factory.dimension()),
172 requireConvertible<typename F::size_type>(factory.maxNodeSize()),
174 requireConcept<
NodeIndexSet<F>>(factory.template indexSet<RootTreePath>())
181 template<
class GlobalBasis>
185 auto require(
const V& localView) -> decltype(
186 requireType<typename V::size_type>(),
187 requireType<typename V::GlobalBasis>(),
188 requireType<typename V::Tree>(),
189 requireType<typename V::GridView>(),
190 requireType<typename V::Element>(),
191 requireSameType<typename V::GlobalBasis, GlobalBasis>(),
192 requireSameType<typename V::GridView, typename GlobalBasis::GridView>(),
193 requireSameType<typename V::size_type, typename GlobalBasis::size_type>(),
194 requireSameType<
typename V::Element,
typename GlobalBasis::GridView::template Codim<0>::Entity>(),
195 const_cast<V&>(localView).bind(std::declval<typename V::Element>()),
196 const_cast<V&>(localView).unbind(),
197 requireConvertible<typename V::Tree>(localView.tree()),
198 requireConvertible<typename V::size_type>(localView.size()),
199 requireConvertible<typename V::size_type>(localView.maxSize()),
200 requireConvertible<typename V::GlobalBasis>(localView.globalBasis()),
209 template<
class LocalView>
213 auto require(
const I& indexSet) -> decltype(
214 requireType<typename I::size_type>(),
215 requireType<typename I::MultiIndex>(),
216 requireType<typename I::LocalView>(),
217 requireSameType<typename I::LocalView, LocalView>(),
218 const_cast<I&>(indexSet).bind(std::declval<typename I::LocalView>()),
219 const_cast<I&>(indexSet).unbind(),
220 requireConvertible<typename I::size_type>(indexSet.size()),
221 requireConvertible<typename I::MultiIndex>(indexSet.index(std::declval<typename I::size_type>())),
222 requireConvertible<typename I::LocalView>(indexSet.localView())
229 template<
class Gr
idView>
233 auto require(
const B& basis) -> decltype(
234 requireType<typename B::GridView>(),
235 requireType<typename B::size_type>(),
236 requireType<typename B::MultiIndex>(),
237 requireType<typename B::SizePrefix>(),
238 requireType<typename B::LocalIndexSet>(),
239 requireType<typename B::LocalView>(),
240 requireSameType<typename B::GridView, GridView>(),
241 requireConvertible<typename B::GridView>(basis.gridView()),
242 requireConvertible<typename B::LocalIndexSet>(basis.localIndexSet()),
243 requireConvertible<typename B::LocalView>(basis.localView()),
244 requireConvertible<typename B::size_type>(basis.size()),
245 requireConvertible<typename B::size_type>(basis.size(std::declval<typename B::SizePrefix>())),
246 requireConvertible<typename B::size_type>(basis.dimension()),
257 #endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
Definition: concepts.hh:210
Definition: concepts.hh:70
Definition: concepts.hh:31
decltype(TypeTree::hybridTreePath()) RootTreePath
Definition: concepts.hh:154
Definition: concepts.hh:133
Definition: concepts.hh:89
Definition: concepts.hh:51
Definition: polynomial.hh:7
Definition: concepts.hh:182
Definition: concepts.hh:104
Definition: concepts.hh:230
typename Dune::Functions::CompositeBasisNode< ST, TP, T... > CompositeBasisNode
Definition: concepts.hh:107
typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
Expand tuple arguments as template arguments.
Definition: utility.hh:91
Definition: concepts.hh:21
Definition: concepts.hh:85
Definition: concepts.hh:41
Definition: concepts.hh:152
Definition: concepts.hh:101