7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH 
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH 
   11#include <dune/common/concept.hh> 
   12#include <dune/common/reservedvector.hh> 
   23using namespace Dune::Concept;
 
   48  template<
class C, 
class I>
 
 
   60    requireType<typename N::size_type>(),
 
   61    requireConvertible<typename N::size_type>(node.size()),
 
   62    requireConvertible<typename N::size_type>(node.localIndex(std::declval<typename N::size_type>())),
 
   63    requireConvertible<typename N::size_type>(node.treeIndex()),
 
   64    requireBaseOf<BasisNodeMixin, N>()
 
 
   71template<
class Gr
idView>
 
   76    requireType<typename N::Element>(),
 
   77    requireType<typename N::FiniteElement>(),
 
   78    requireConvertible<typename N::Element>(node.element()),
 
   79    requireConvertible<const typename N::FiniteElement&>(node.finiteElement()),
 
   80    requireSameType<typename N::Element, typename GridView::template Codim<0>::Entity>(),
 
   81    requireBaseOf<Dune::Functions::LeafBasisNode, N>()
 
 
   86template<
class Gr
idView>
 
   90template<
class Gr
idView>
 
  101template<
class Gr
idView>
 
  106    requireBaseOf<Dune::Functions::DynamicPowerBasisNode<typename N::ChildType>, N>(),
 
 
  112template<
class Gr
idView>
 
  117    requireBaseOf<ExpandTuple<Dune::Functions::template CompositeBasisNode, typename N::ChildTypes>, N>(),
 
 
  124template<
class Gr
idView>
 
  127  template<
class N, 
class NodeTag = 
typename N::NodeTag>
 
  129    requireConcept<std::conditional_t<N::isLeaf, LeafBasisNode<GridView>, 
BasisNode>, N>(),
 
  130    requireConcept<std::conditional_t<std::is_same_v<NodeTag, Dune::TypeTree::PowerNodeTag>,
 
  132    requireConcept<std::conditional_t<std::is_same_v<NodeTag, Dune::TypeTree::DynamicPowerNodeTag>,
 
 
  140template<
class Gr
idView>
 
  145  using MultiIndex = Dune::ReservedVector<typename PB::size_type, PB::multiIndexBufferSize>;
 
  150    requireType<typename PB::GridView>(),
 
  151    requireType<typename PB::size_type>(),
 
  152    requireType<typename PB::Node>(),
 
  153    requireConvertible<decltype(PB::maxMultiIndexSize), typename PB::size_type>(),
 
  154    requireConvertible<decltype(PB::maxMultiIndexSize), typename PB::size_type>(),
 
  155    requireConvertible<decltype(PB::multiIndexBufferSize), typename PB::size_type>(),
 
  156    requireTrue<PB::minMultiIndexSize <= PB::maxMultiIndexSize>(),
 
  157    requireTrue<PB::maxMultiIndexSize <= PB::multiIndexBufferSize>(),
 
  158    requireSameType<typename PB::GridView, GridView>(),
 
  159    const_cast<PB&
>(preBasis).initializeIndices(),
 
  160    requireConvertible<typename PB::GridView>(preBasis.gridView()),
 
  161    requireConvertible<typename PB::Node>(preBasis.makeNode()),
 
  162    requireConvertible<typename PB::size_type>(preBasis.size()),
 
  163    requireConvertible<typename PB::size_type>(preBasis.size(std::declval<MultiIndex<PB>>())),
 
  164    requireConvertible<typename PB::size_type>(preBasis.dimension()),
 
  165    requireConvertible<typename PB::size_type>(preBasis.maxNodeSize()),
 
  166    requireSameType<decltype(const_cast<PB&>(preBasis).update(preBasis.gridView())),
void>(),
 
  167    requireConcept<BasisTree<typename PB::GridView>>(preBasis.makeNode()),
 
  168    requireConvertible<
typename std::vector<MultiIndex<PB>>::iterator>(
 
  171        std::declval<typename std::vector<MultiIndex<PB>>::iterator>()))
 
 
  178template<
class GlobalBasis>
 
  183    requireType<typename V::size_type>(),
 
  184    requireType<typename V::MultiIndex>(),
 
  185    requireType<typename V::GlobalBasis>(),
 
  186    requireType<typename V::Tree>(),
 
  187    requireType<typename V::GridView>(),
 
  188    requireType<typename V::Element>(),
 
  189    requireSameType<typename V::GlobalBasis, GlobalBasis>(),
 
  190    requireSameType<typename V::GridView, typename GlobalBasis::GridView>(),
 
  191    requireSameType<typename V::size_type, typename GlobalBasis::size_type>(),
 
  192    requireSameType<typename V::Element, typename GlobalBasis::GridView::template Codim<0>::Entity>(),
 
  193    const_cast<V&
>(localView).bind(std::declval<typename V::Element>()),
 
  194    const_cast<V&
>(localView).unbind(),
 
  195    requireConvertible<bool>(localView.bound()),
 
  196    requireConvertible<typename V::Tree>(localView.tree()),
 
  197    requireConvertible<typename V::size_type>(localView.size()),
 
  198    requireConvertible<typename V::MultiIndex>(localView.index(std::declval<typename V::size_type>())),
 
  199    requireConvertible<typename V::size_type>(localView.maxSize()),
 
  200    requireConvertible<typename V::GlobalBasis>(localView.globalBasis()),
 
  201    requireConcept<BasisTree<typename V::GridView>>(localView.tree()),
 
 
  209template<
class Gr
idView>
 
  214    requireType<typename B::GridView>(),
 
  215    requireType<typename B::size_type>(),
 
  216    requireType<typename B::MultiIndex>(),
 
  217    requireType<typename B::SizePrefix>(),
 
  218    requireType<typename B::LocalView>(),
 
  219    requireSameType<typename B::GridView, GridView>(),
 
  220    requireConvertible<typename B::GridView>(basis.gridView()),
 
  221    requireConvertible<typename B::LocalView>(basis.localView()),
 
  222    requireConvertible<typename B::size_type>(basis.size()),
 
  223    requireConvertible<typename B::size_type>(basis.size(std::declval<typename B::SizePrefix>())),
 
  224    requireConvertible<typename B::size_type>(basis.dimension()),
 
  225    requireSameType<decltype(const_cast<B&>(basis).update(basis.gridView())),
void>(),
 
  226    requireConcept<LocalView<B>>(basis.localView())
 
 
Definition polynomial.hh:17
 
Definition functionspacebases/concepts.hh:27
 
auto require(C &&c) -> decltype(c.resize(0))
 
Definition functionspacebases/concepts.hh:37
 
auto require(C &&c) -> decltype(c.size())
 
Definition functionspacebases/concepts.hh:47
 
auto require(C &&c, I &&i) -> decltype(c[i])
 
Definition functionspacebases/concepts.hh:57
 
auto require(const N &node) -> decltype(requireType< typename N::size_type >(), requireConvertible< typename N::size_type >(node.size()), requireConvertible< typename N::size_type >(node.localIndex(std::declval< typename N::size_type >())), requireConvertible< typename N::size_type >(node.treeIndex()), requireBaseOf< BasisNodeMixin, N >())
 
Definition functionspacebases/concepts.hh:73
 
auto require(const N &node) -> decltype(requireType< typename N::Element >(), requireType< typename N::FiniteElement >(), requireConvertible< typename N::Element >(node.element()), requireConvertible< const typename N::FiniteElement & >(node.finiteElement()), requireSameType< typename N::Element, typename GridView::template Codim< 0 >::Entity >(), requireBaseOf< Dune::Functions::LeafBasisNode, N >())
 
Definition functionspacebases/concepts.hh:126
 
auto require(const N &node) -> decltype(requireConcept< std::conditional_t< N::isLeaf, LeafBasisNode< GridView >, BasisNode >, N >(), requireConcept< std::conditional_t< std::is_same_v< NodeTag, Dune::TypeTree::PowerNodeTag >, PowerBasisNode< GridView >, BasisNode >, N >(), requireConcept< std::conditional_t< std::is_same_v< NodeTag, Dune::TypeTree::DynamicPowerNodeTag >, DynamicPowerBasisNode< GridView >, BasisNode >, N >(), requireConcept< std::conditional_t< N::isComposite, CompositeBasisNode< GridView >, BasisNode >, N >())
 
Definition functionspacebases/concepts.hh:92
 
auto require(const N &node) -> decltype(requireBaseOf< Dune::Functions::PowerBasisNode< typename N::ChildType, N::degree()>, N >(), requireConcept< BasisTree< GridView >, typename N::ChildType >())
 
Definition functionspacebases/concepts.hh:103
 
auto require(const N &node) -> decltype(requireBaseOf< Dune::Functions::DynamicPowerBasisNode< typename N::ChildType >, N >(), requireConcept< BasisTree< GridView >, typename N::ChildType >())
 
Definition functionspacebases/concepts.hh:114
 
auto require(const N &node) -> decltype(requireBaseOf< ExpandTuple< Dune::Functions::template CompositeBasisNode, typename N::ChildTypes >, N >(), requireConceptForTupleEntries< BasisTree< GridView >, typename N::ChildTypes >())
 
Definition functionspacebases/concepts.hh:142
 
auto require(const PB &preBasis) -> decltype(requireType< typename PB::GridView >(), requireType< typename PB::size_type >(), requireType< typename PB::Node >(), requireConvertible< decltype(PB::maxMultiIndexSize), typename PB::size_type >(), requireConvertible< decltype(PB::maxMultiIndexSize), typename PB::size_type >(), requireConvertible< decltype(PB::multiIndexBufferSize), typename PB::size_type >(), requireTrue< PB::minMultiIndexSize<=PB::maxMultiIndexSize >(), requireTrue< PB::maxMultiIndexSize<=PB::multiIndexBufferSize >(), requireSameType< typename PB::GridView, GridView >(), const_cast< PB & >(preBasis).initializeIndices(), requireConvertible< typename PB::GridView >(preBasis.gridView()), requireConvertible< typename PB::Node >(preBasis.makeNode()), requireConvertible< typename PB::size_type >(preBasis.size()), requireConvertible< typename PB::size_type >(preBasis.size(std::declval< MultiIndex< PB > >())), requireConvertible< typename PB::size_type >(preBasis.dimension()), requireConvertible< typename PB::size_type >(preBasis.maxNodeSize()), requireSameType< decltype(const_cast< PB & >(preBasis).update(preBasis.gridView())), void >(), requireConcept< BasisTree< typename PB::GridView > >(preBasis.makeNode()), requireConvertible< typename std::vector< MultiIndex< PB > >::iterator >(preBasis.indices(preBasis.makeNode(), std::declval< typename std::vector< MultiIndex< PB > >::iterator >())))
 
Definition functionspacebases/concepts.hh:180
 
auto require(const V &localView) -> decltype(requireType< typename V::size_type >(), requireType< typename V::MultiIndex >(), requireType< typename V::GlobalBasis >(), requireType< typename V::Tree >(), requireType< typename V::GridView >(), requireType< typename V::Element >(), requireSameType< typename V::GlobalBasis, GlobalBasis >(), requireSameType< typename V::GridView, typename GlobalBasis::GridView >(), requireSameType< typename V::size_type, typename GlobalBasis::size_type >(), requireSameType< typename V::Element, typename GlobalBasis::GridView::template Codim< 0 >::Entity >(), const_cast< V & >(localView).bind(std::declval< typename V::Element >()), const_cast< V & >(localView).unbind(), requireConvertible< bool >(localView.bound()), requireConvertible< typename V::Tree >(localView.tree()), requireConvertible< typename V::size_type >(localView.size()), requireConvertible< typename V::MultiIndex >(localView.index(std::declval< typename V::size_type >())), requireConvertible< typename V::size_type >(localView.maxSize()), requireConvertible< typename V::GlobalBasis >(localView.globalBasis()), requireConcept< BasisTree< typename V::GridView > >(localView.tree()), 0)
 
Definition functionspacebases/concepts.hh:211
 
auto require(const B &basis) -> decltype(requireType< typename B::GridView >(), requireType< typename B::size_type >(), requireType< typename B::MultiIndex >(), requireType< typename B::SizePrefix >(), requireType< typename B::LocalView >(), requireSameType< typename B::GridView, GridView >(), requireConvertible< typename B::GridView >(basis.gridView()), requireConvertible< typename B::LocalView >(basis.localView()), requireConvertible< typename B::size_type >(basis.size()), requireConvertible< typename B::size_type >(basis.size(std::declval< typename B::SizePrefix >())), requireConvertible< typename B::size_type >(basis.dimension()), requireSameType< decltype(const_cast< B & >(basis).update(basis.gridView())), void >(), requireConcept< LocalView< B > >(basis.localView()))