propertysystem.hh File Reference

The Opm property system, traits with inheritance. More...

#include <dune/common/classname.hh>
#include <cstring>
#include <ostream>
#include <tuple>
#include <type_traits>
Include dependency graph for propertysystem.hh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  Opm::Properties::UndefinedProperty
 a tag to mark properties as undefined More...
 
struct  Opm::Properties::Splices< TypeTag, MyTypeTag >
 
struct  Opm::Properties::Detail::GetNextTypeTag< TypeTag, Property, std::tuple< LastTypeTag >, std::enable_if_t< hasParentTypeTag< LastTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetNextTypeTag< TypeTag, Property, std::tuple< LastTypeTag >, std::enable_if_t<!hasParentTypeTag< LastTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetNextTypeTag< TypeTag, Property, std::tuple< FirstTypeTag, Args... >, std::enable_if_t< hasParentTypeTag< FirstTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetNextTypeTag< TypeTag, Property, std::tuple< FirstTypeTag, Args... >, std::enable_if_t<!hasParentTypeTag< FirstTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetDefined< TypeTag, Property, std::tuple< LastTypeTag > >
 
struct  Opm::Properties::Detail::GetDefined< TypeTag, Property, std::tuple< FirstTypeTag, Args... > >
 
struct  Opm::Properties::Detail::GetNextSpliceTypeTag< TypeTag, std::tuple< LastTypeTag >, std::enable_if_t< hasParentTypeTag< LastTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetNextSpliceTypeTag< TypeTag, std::tuple< LastTypeTag >, std::enable_if_t<!hasParentTypeTag< LastTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetNextSpliceTypeTag< TypeTag, std::tuple< FirstTypeTag, Args... >, std::enable_if_t< hasParentTypeTag< FirstTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetNextSpliceTypeTag< TypeTag, std::tuple< FirstTypeTag, Args... >, std::enable_if_t<!hasParentTypeTag< FirstTypeTag >(int{}), void > >
 
struct  Opm::Properties::Detail::GetDefinedSplice< TypeTag, std::tuple< LastTypeTag > >
 
struct  Opm::Properties::Detail::GetDefinedSplice< TypeTag, std::tuple< FirstTypeTag, Args... > >
 
struct  Opm::Properties::Detail::GetPropImpl< TypeTag, Property >
 helper struct to extract get the Property specilization given a TypeTag, asserts that the property is defined More...
 
struct  Opm::Properties::Detail::GetSplicePropImpl< TypeTag, SpliceTypeTag, Property >
 
struct  Opm::Properties::Detail::has_name< typename, class >
 
struct  Opm::Properties::Detail::has_name< T, decltype((void) T::name, void())>
 

Namespaces

namespace  Opm
 
namespace  Opm::Properties
 
namespace  Opm::Properties::Detail
 implementation details for template meta programming
 

Typedefs

template<class ... Tuples>
using Opm::Properties::Detail::ConCatTuples = decltype(std::tuple_cat(std::declval< Tuples >()...))
 helper alias to concatenate multiple tuples More...
 
template<class TypeTag , template< class, class > class Property>
using Opm::GetProp = typename Properties::Detail::GetPropImpl< TypeTag, Property >::type
 get the type of a property (equivalent to old macro GET_PROP(...)) More...
 
template<class TypeTag , template< class, class > class Property>
using Opm::GetPropType = typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type
 get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(...)) More...
 
template<class TypeTag , class SpliceTypeTag , template< class, class > class Property>
using Opm::GetSplicePropType = typename Properties::Detail::GetSplicePropImpl< TypeTag, SpliceTypeTag, Property >::type::type
 

Functions

template<class P >
constexpr auto Opm::Properties::Detail::isDefinedProperty (int) -> decltype(std::integral_constant< bool, !std::is_same< typename P::type, UndefinedProperty >::value >{})
 check if a property P is defined More...
 
template<class P >
constexpr std::true_type Opm::Properties::Detail::isDefinedProperty (...)
 fall back if a Property is defined More...
 
template<class T >
constexpr auto Opm::Properties::Detail::hasParentTypeTag (int) -> decltype(std::declval< typename T::InheritsFrom >(), std::true_type{})
 check if a TypeTag inherits from other TypeTags More...
 
template<class T >
constexpr std::false_type Opm::Properties::Detail::hasParentTypeTag (...)
 fall back if a TypeTag doesn't inherit More...
 
template<class S >
constexpr auto Opm::Properties::Detail::isDefinedSplice (int) -> decltype(std::integral_constant< bool, !std::is_same< typename S::type, std::tuple<> >::value >{})
 check if a splice S is defined More...
 
template<class S >
constexpr std::true_type Opm::Properties::Detail::isDefinedSplice (...)
 fall back if a splice is defined More...
 
template<class TypeTag , template< class, class > class Property>
constexpr auto Opm::getPropValue ()
 get the value data member of a property More...
 
template<class TypeTag , template< class, class > class Property>
auto Opm::getPropName ()
 get the name data member of a property More...
 
template<class TypeTag >
void Opm::Properties::printValues (std::ostream &os)
 

Detailed Description

The Opm property system, traits with inheritance.

Author
Timo Koch