7#ifndef DUNE_FUFEM_TYPETREEFALLBACK_HH
8#define DUNE_FUFEM_TYPETREEFALLBACK_HH
25#if DUNE_VERSION_GTE(DUNE_FUNCTIONS, 2, 11)
30#include <dune/typetree/childextraction.hh>
31#include <dune/typetree/treepath.hh>
35namespace Dune::Fufem::Impl {
39#if DUNE_VERSION_GTE(DUNE_FUNCTIONS, 2, 11)
59 concept HasConstExprDegree =
requires(Node node)
70 concept TreeNode =
requires(Node node)
77 concept StaticDegreeInnerTreeNode = TreeNode<Node> &&
requires(Node node)
81 requires HasConstExprDegree<Node> and HasPositiveDegree<Node>;
82 node.child(index_constant<0>());
88 concept UniformInnerTreeNode = TreeNode<Node> &&
requires(Node node,
std::size_t index)
95 concept InnerTreeNode = StaticDegreeInnerTreeNode<Node> || UniformInnerTreeNode<Node>;
99 concept LeafTreeNode = TreeNode<Node> && not InnerTreeNode<Node>;
105#if DUNE_VERSION_GTE(DUNE_FUNCTIONS, 2, 11)
108 using Children = Dune::TypeTree::Impl::Children<N>;
110 template<
typename... T>
115 template<
typename... T>
116 using TreePath = Dune::TypeTree::HybridTreePath<T...>;
119 static constexpr auto childTypes()
121 if constexpr (Dune::Fufem::Impl::Concept::StaticDegreeInnerTreeNode<N>)
143 using Children =
typename decltype(childTypes<N>())::type;
decltype(auto) constexpr unpackIntegerSequence(F &&f, std::integer_sequence< I, i... > sequence)
std::integral_constant< std::size_t, i > index_constant
std::ptrdiff_t index() const
Dune::HybridMultiIndex< T... > TreePath