dune-common  2.11
Classes | Functions | Variables
Dune::Concept Namespace Reference

Namespace for concepts. More...

Classes

struct  HasFixedSize
 
struct  Refines
 Base class for refined concepts. More...
 

Functions

template<class C , class Tuple >
constexpr auto tupleEntriesModel ()
 
template<bool b, typename std::enable_if< b, int >::type = 0>
constexpr bool requireTrue ()
 
template<class C , class... T, typename std::enable_if< models< C, T... >(), int >::type = 0>
constexpr bool requireConcept ()
 
template<class C , class... T, typename std::enable_if< models< C, T... >(), int >::type = 0>
constexpr bool requireConcept (T &&...)
 
template<class C , class Tuple , typename std::enable_if< tupleEntriesModel< C, Tuple >(), int >::type = 0>
constexpr bool requireConceptForTupleEntries ()
 
template<class From , class To , typename std::enable_if< std::is_convertible< From, To >::value, int >::type = 0>
constexpr bool requireConvertible ()
 
template<class To , class From , typename std::enable_if< std::is_convertible< From, To >::value, int >::type = 0>
constexpr bool requireConvertible (const From &)
 
template<typename T >
constexpr bool requireType ()
 
template<class Base , class Derived , typename std::enable_if< std::is_base_of< Base, Derived >::value, int >::type = 0>
constexpr bool requireBaseOf ()
 
template<class Base , class Derived , typename std::enable_if< std::is_base_of< Base, Derived >::value, int >::type = 0>
constexpr bool requireBaseOf (const Derived &)
 
template<class A , class B , typename std::enable_if< std::is_same< A, B >::value, int >::type = 0>
constexpr bool requireSameType ()
 

Variables

template<class N >
concept Number = Dune::IsNumber<N>::value
 The Number concept is satisfied if the type N can act as a scalar in the context of (hierarchically blocked) containers. More...
 

Detailed Description

Namespace for concepts.

This namespace contains helper functions for concept definitions and the concept definitions themselves.

Function Documentation

◆ requireBaseOf() [1/2]

template<class Base , class Derived , typename std::enable_if< std::is_base_of< Base, Derived >::value, int >::type = 0>
constexpr bool Dune::Concept::requireBaseOf ( )

◆ requireBaseOf() [2/2]

template<class Base , class Derived , typename std::enable_if< std::is_base_of< Base, Derived >::value, int >::type = 0>
constexpr bool Dune::Concept::requireBaseOf ( const Derived &  )

◆ requireConcept() [1/2]

template<class C , class... T, typename std::enable_if< models< C, T... >(), int >::type = 0>
constexpr bool Dune::Concept::requireConcept ( )

◆ requireConcept() [2/2]

template<class C , class... T, typename std::enable_if< models< C, T... >(), int >::type = 0>
constexpr bool Dune::Concept::requireConcept ( T &&  ...)

◆ requireConceptForTupleEntries()

template<class C , class Tuple , typename std::enable_if< tupleEntriesModel< C, Tuple >(), int >::type = 0>
constexpr bool Dune::Concept::requireConceptForTupleEntries ( )

◆ requireConvertible() [1/2]

template<class From , class To , typename std::enable_if< std::is_convertible< From, To >::value, int >::type = 0>
constexpr bool Dune::Concept::requireConvertible ( )

◆ requireConvertible() [2/2]

template<class To , class From , typename std::enable_if< std::is_convertible< From, To >::value, int >::type = 0>
constexpr bool Dune::Concept::requireConvertible ( const From &  )

◆ requireSameType()

template<class A , class B , typename std::enable_if< std::is_same< A, B >::value, int >::type = 0>
constexpr bool Dune::Concept::requireSameType ( )

◆ requireTrue()

template<bool b, typename std::enable_if< b, int >::type = 0>
constexpr bool Dune::Concept::requireTrue ( )

◆ requireType()

template<typename T >
constexpr bool Dune::Concept::requireType ( )

◆ tupleEntriesModel()

template<class C , class Tuple >
constexpr auto Dune::Concept::tupleEntriesModel ( )

Variable Documentation

◆ Number

template<class N >
concept Dune::Concept::Number = Dune::IsNumber<N>::value

The Number concept is satisfied if the type N can act as a scalar in the context of (hierarchically blocked) containers.

Number types are possible element types of (hierarchically blocked) matrices and vectors, such as FieldMatrix, FieldVector, BCRSMatrix, BlockVector, MultiTypeBlockVector, etc. It allows, for example, to define break conditions in recursive algorithms and are used as value initializers and scalar factors in scaling operations.

Types that can act as number types include the arithmetic types like double, int, or float, and the std::complex<U> types if U itself is a scalar type. It is possible to register used-defined types, e.g., extended precision types or automatic differentiation types, or anything else that might sensibly be an element of a matrix or vector. Therefore, the traits class Dune::IsNumber can be specialized.

Note
The precise semantics of number types are only vaguely specified. It should behave similar to arithmetic types, e.g., provide arithmetic operations, and should be considered a field type in the mathematical sense.