00001 /* Far field matrix F 00002 */ 00003 00004 #ifndef clusterF_hh 00005 #define clusterF_hh 00006 00007 #include "basics/outputOperator.hh" 00008 #include "toolbox/scannerConnectors.hh" 00009 #include "cluster/xy.hh" 00010 00011 namespace cluster { 00012 00013 // ****************************************************************** Nfld ** 00014 00019 template<class NodeX, class NodeY> 00020 class Nfld { 00022 const NodeX* x_; 00023 const NodeY* y_; 00024 00025 public: 00026 inline Nfld() : x_(0), y_(0) {} 00027 inline Nfld(const NodeX* x, const NodeY* y) : x_(x), y_(y) {} 00028 00029 const NodeX* clstX() const {return x_;} 00030 const NodeY* clstY() const {return y_;} 00031 }; 00032 00033 // ***************************************************************** ClstF ** 00034 00039 template<class NodeX, class NodeY> 00040 class ClstF : public concepts::OutputOperator { 00041 public: 00043 typedef TreeTraits<NodeX> TraitsX; 00044 typedef TreeTraits<NodeY> TraitsY; 00045 typedef typename TraitsX::F FX; 00046 typedef typename TraitsY::F FY; 00047 00048 typedef Nfld<NodeX, NodeY> NfldNodes; 00049 typedef concepts::Scan<NfldNodes> NfldScan; 00050 00051 // Application operator. 00052 virtual void operator()(const ClstY<NodeY>& vecY, 00053 ClstX<NodeX>& vecX) const = 0; 00054 00055 virtual NfldScan* scan() const = 0; 00056 }; 00057 00058 } // namespace cluster 00059 00060 #endif // clusterF_hh