00001 /* Far field matrices X, Y 00002 */ 00003 00004 #ifndef clusterXY_hh 00005 #define clusterXY_hh 00006 00007 #include "basics/outputOperator.hh" 00008 #include "function/vector.hh" 00009 #include "cluster/tree.hh" 00010 00011 namespace cluster { 00012 00013 // ******************************************************************** XY ** 00014 00018 template<class Node> 00019 class ClstXY : public concepts::OutputOperator { 00020 public: 00022 typedef TreeTraits<Node> Traits; 00023 typedef typename Traits::F F; 00024 00025 virtual ~ClstXY() {} 00026 00030 virtual F* operator[](uint i) const = 0; 00032 virtual const Tree<Node>& tree() const = 0; 00034 virtual const concepts::Space<F>& space() const = 0; 00036 virtual void zero() = 0; 00037 }; 00038 00039 // ********************************************************************* X ** 00040 00044 template<class Node> 00045 class ClstX : public ClstXY<Node> { 00046 public: 00047 typedef typename ClstXY<Node>::F F; 00048 00049 virtual void gather(concepts::Vector<F>& fnc) = 0; 00050 }; 00051 00052 // ********************************************************************* Y ** 00053 00057 template<class Node> 00058 class ClstY : public ClstXY<Node> { 00059 public: 00060 typedef typename ClstXY<Node>::F F; 00061 00062 virtual void scatter(const concepts::Vector<F>& fnc) = 0; 00063 }; 00064 00065 } 00066 00067 #endif // clusterXY_hh 00068 00069