AMDiS  0.3
The Adaptive Multi-Dimensional Simulation Toolbox
Access.hpp
1 #pragma once
2 
3 #include <dune/common/typeutilities.hh>
4 #include <dune/functions/backends/istlvectorbackend.hh>
5 
6 namespace AMDiS {
7 namespace Traits {
8 
10 struct Access
11 {
12 private:
13  // if C implements the vector facade interface
14  template <class C, class MI>
15  auto operator()(C const& c, MI const& mi, Dune::PriorityTag<2>) const
16  -> decltype(c.at(mi))
17  {
18  return c.at(mi);
19  }
20 
21  // if C supports multi-index access
22  template <class C, class MI>
23  auto operator()(C const& c, MI const& mi, Dune::PriorityTag<1>) const
24  -> decltype(c[mi])
25  {
26  return c[mi];
27  }
28 
29  // fallback implementation for simple vectors
30  template <class C, class MI>
31  auto operator()(C const& c, MI const& mi, Dune::PriorityTag<0>) const
32  -> decltype(Dune::Functions::istlVectorBackend(c)[mi])
33  {
34  return Dune::Functions::istlVectorBackend(c)[mi];
35  }
36 
37 public:
38  template <class C, class MI>
39  auto operator()(C const& c, MI const& mi) const
40  {
41  return (*this)(c,mi,Dune::PriorityTag<2>{});
42  }
43 };
44 
45 }} // end namespace AMDiS::Traits
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
Unified accessor class.
Definition: Access.hpp:10