dune-grid-glue  2.8-git
rangegenerators.hh
Go to the documentation of this file.
1 #ifndef DUNE_GRIDGLUE_ADAPTER_RANGEGENERATORS_HH
2 #define DUNE_GRIDGLUE_ADAPTER_RANGEGENERATORS_HH
3 
4 #include <dune/common/iteratorrange.hh>
5 
6 namespace Dune {
7 namespace GridGlue {
8 
12 template<bool reverse>
13 struct Reverse
14  : std::integral_constant<bool, reverse>
15 {
16  typedef Reverse type;
17 
18  constexpr
20  { return {}; }
21 };
22 
23 #ifdef DOXYGEN
24 
30 
64 template<...>
65 IteratorRange<...>
66 intersections(const GridGlue<...>& glue, const Reverse<...>& reverse = !reversed);
67 
68 #else
69 
70 namespace {
71 const Reverse<true> reversed = {};
72 } /* namespace */
73 
74 template<typename P0, typename P1, bool reverse = false>
75 IteratorRange< typename GridGlue<P0, P1>::template IntersectionIterator<reverse ? 1 : 0> >
76 intersections(const GridGlue<P0, P1>& glue, const Reverse<reverse>& = {})
77 {
78  const static int side = reverse ? 1 : 0;
79  return {glue.template ibegin<side>(), glue.template iend<side>()};
80 }
81 
82 #endif // DOXYGEN
83 
84 } /* namespace GridGlue */
85 } /* namespace Dune */
86 
87 #endif
Definition: gridglue.hh:35
IteratorRange<... > intersections(const GridGlue<... > &glue, const Reverse<... > &reverse=!reversed)
Iterate over all intersections of a GridGlue.
sequential adapter to couple two grids at specified close together boundaries
Definition: gridglue.hh:52
IteratorRange<... > intersections(const GridGlue<... > &glue, const Reverse<... > &reverse=!reversed)
Iterate over all intersections of a GridGlue.
Definition: rangegenerators.hh:15
const Reverse< true > reversed
Definition: rangegenerators.hh:29
constexpr Reverse<!reverse > operator!() const
Definition: rangegenerators.hh:19
Reverse type
Definition: rangegenerators.hh:16