6#ifndef DUNE_TYPETREE_FILTERS_HH
7#define DUNE_TYPETREE_FILTERS_HH
12#include <dune/common/typetraits.hh>
23 template<std::
size_t new_k, std::
size_t old_k>
31 static const std::size_t filtered_index = new_k;
32 static const std::size_t original_index = old_k;
39 template<
typename... FilterEntries>
43 static const std::size_t
size =
sizeof...(FilterEntries);
47 template<
typename Node>
50 typedef std::tuple<typename Node::template Child<FilterEntries::original_index>...>
Children;
51 typedef std::tuple<typename Node::template Child<FilterEntries::original_index>::Type...>
ChildTypes;
52 typedef std::tuple<std::shared_ptr<typename Node::template Child<FilterEntries::original_index>::Type>...>
NodeStorage;
74 template<
typename Node,
typename... Children>
81 typedef implementation-defined
type;
102 template<
typename Node>
118 template<
typename Child, std::
size_t new_index, std::
size_t old_index>
133 template<
typename Node, std::size_t new_index, std::size_t... indices>
134 struct index_filter_helper
136 template<
typename... FilterEntries>
143 template<
typename Node, std::size_t new_index, std::size_t old_index, std::size_t... indices>
144 struct index_filter_helper<Node,new_index,old_index,indices...>
146 template<
typename... FilterEntries>
148 :
public index_filter_helper<Node,new_index+1,indices...>::template apply<FilterEntries...,
149 FilterEntry<new_index,
159 template<std::size_t... indices>
166 template<
typename Node,
typename... Children>
169 typedef typename index_filter_helper<Node,0,indices...>::template
apply<>::type type;
184 template<
typename Filter, std::size_t new_k, std::size_t old_k,
typename... tail>
187 template<
typename... FilterDescriptors>
194 template<
typename Filter, std::size_t new_k, std::size_t old_k,
typename child,
typename... tail>
195 struct filter_helper<Filter,new_k,old_k,child,tail...>
198 template<
typename... FilterDescriptors>
200 :
public std::conditional<Filter::template apply<child,new_k,old_k>::value,
201 typename filter_helper<Filter,new_k+1,old_k+1,tail...>::template apply<FilterDescriptors...,FilterEntry<new_k,old_k> >,
202 typename filter_helper<Filter,new_k,old_k+1,tail...>::template apply<FilterDescriptors...>
211 template<
typename Filter>
216 template<
typename Node,
typename... Children>
220 static_assert((Filter::template validate<Node>::value),
"Invalid simple filter");
Definition accumulate_static.hh:17
Definition accumulate_static.hh:18
A filter entry describing the mapping of one child in the filtered node.
Definition filters.hh:25
The result of a filter.
Definition filters.hh:41
std::tuple< FilterEntries... > IndexMap
Definition filters.hh:45
static const std::size_t size
Definition filters.hh:43
std::tuple< typename Node::template Child< FilterEntries::original_index >... > Children
Definition filters.hh:50
std::tuple< typename Node::template Child< FilterEntries::original_index >::Type... > ChildTypes
Definition filters.hh:51
std::tuple< std::shared_ptr< typename Node::template Child< FilterEntries::original_index >::Type >... > NodeStorage
Definition filters.hh:52
Tag describing a simple filter that can only decide whether or not to include a single given child.
Definition filters.hh:58
Tag describing an advanced filter that has full control over the construction of the list of FilterEn...
Definition filters.hh:61
Base class for advanced filters.
Definition filters.hh:66
AdvancedFilterTag FilterTag
Filter tag for deciding on filter application mechanism.
Definition filters.hh:69
Apply this filter to the given node and children.
Definition filters.hh:76
implementation defined type
The result of the filtering process.
Definition filters.hh:81
Default simple filter that accepts any node and leaves its child structure unchanged.
Definition filters.hh:95
SimpleFilterTag FilterTag
Filter tag for deciding on filter application mechanism.
Definition filters.hh:98
Validates the combination of filter and node.
Definition filters.hh:104
static const bool value
True if the combination of filter and node is valid.
Definition filters.hh:106
Applies the filter to the given child node.
Definition filters.hh:120
static const bool value
True if the child will be included in the filtered node.
Definition filters.hh:122
Filter class for FilteredCompositeNode that selects the children with the given indices.
Definition filters.hh:162
Adapter class that takes a SimpleFilter, validated it and turns it into an AdvancedFilter.
Definition filters.hh:213
Apply the filter.
Definition filters.hh:218
filter_helper< Filter, 0, 0, Children... >::template apply ::type type
Definition filters.hh:222