NiHu  2.0
x2x_cluster_indexed.hpp
Go to the documentation of this file.
1 
7 #ifndef NIHU_X2X_CLUSTER_INDEXED_HPP_INCLUDED
8 #define NIHU_X2X_CLUSTER_INDEXED_HPP_INCLUDED
9 
10 #include "cluster_tree.hpp"
11 #include "fmm_operator.hpp"
12 
13 #include <type_traits>
14 
15 namespace NiHu
16 {
17 namespace fmm
18 {
19 
22 template <class Operator>
24  : public fmm_operator<typename std::decay<Operator>::type::fmm_tag>
25 {
26 public:
27  typedef typename std::decay<Operator>::type operator_t;
28  typedef typename operator_t::cluster_t cluster_t;
30  typedef typename operator_t::result_t result_t;
31 
32  x2x_cluster_indexed(Operator &&op, tree_t const &tree)
33  : m_op(std::forward<Operator>(op))
34  , m_tree(tree)
35  {
36  }
37 
38  result_t operator()(size_t to, size_t from) const
39  {
40  return m_op(m_tree[to], m_tree[from]);
41  }
42 
43  tree_t const &get_tree() const
44  {
45  return m_tree;
46  }
47 
48 
49 private:
50  Operator m_op;
51  tree_t const &m_tree;
52 };
53 
54 
55 template <class Operator>
57 create_x2x_cluster_indexed(Operator &&op,
58  cluster_tree<typename std::decay<Operator>::type::cluster_t> const &tree)
59 {
60  return x2x_cluster_indexed<Operator>(std::forward<Operator>(op), tree);
61 }
62 
63 } // end of namespace fmm
64 } // namespace NiHu
65 
66 #endif /* NIHU_X2X_CLUSTER_INDEXED_HPP_INCLUDED */
fmm_operator.hpp
FMM operator types and tags.
NiHu::fmm::cluster_tree< cluster_t >
cluster_tree.hpp
Implementation of class NiHu::fmm::cluster_tree.
NiHu::fmm::x2x_cluster_indexed
class performing indexing of an X2X operator with a cluster
Definition: x2x_cluster_indexed.hpp:23
NiHu::fmm::fmm_operator
Operator defining its tag type.
Definition: fmm_operator.hpp:85