Select Git revision
concepts.hh
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
concepts.hh 8.72 KiB
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
#include <dune/common/concept.hh>
#include <dune/functions/common/utility.hh>
#include <dune/functions/functionspacebases/nodes.hh>
namespace Dune {
namespace Functions {
namespace Concept {
using namespace Dune::Concept;
struct HasResize
{
template<class C>
auto require(C&& c) -> decltype(
c.resize(0)
);
};
struct HasSizeMethod
{
template<class C>
auto require(C&& c) -> decltype(
c.size()
);
};
struct HasIndexAccess
{
template<class C, class I>
auto require(C&& c, I&& i) -> decltype(
c[i]
);
};
// Concept for a BasisNode in a local ansatz tree
struct BasisNode
{
template<class N>
auto require(const N& node) -> decltype(
requireType<typename N::size_type>(),
requireType<typename N::TreePath>(),
requireConvertible<typename N::size_type>(node.size()),
requireConvertible<typename N::size_type>(node.offset()),
requireConvertible<typename N::size_type>(node.localIndex(std::declval<typename N::size_type>())),
requireConvertible<typename N::size_type>(node.treeIndex()),
requireConvertible<typename N::TreePath>(node.treePath()),
requireBaseOf<BasisNodeMixin<typename N::TreePath>, N>()
);
};
// Concept for a LeafBasisNode in a local ansatz tree
template<class GridView>
struct LeafBasisNode : Refines<BasisNode>