#ifndef ATOOLS_Math_Cluster_Algorithm_H #define ATOOLS_Math_Cluster_Algorithm_H #include namespace ATOOLS { struct cs { enum code { num = 0, dist = 1 }; };// end of struct cs template class Cluster_Algorithm { public: typedef PointType Point_Type; typedef MeasureType Measure_Type; typedef RecombinationType Recombination_Type; typedef std::vector Point_Vector; typedef std::vector Size_Vector; typedef std::vector Int_Vector; typedef std::vector Double_Vector; typedef std::vector Double_Matrix; private: Point_Vector m_p, m_lp, m_sp; Size_Vector m_i; Int_Vector m_j; std::size_t m_n, m_imin, m_jmin; Double_Matrix m_d; Double_Vector m_r; double m_dmin; Measure_Type m_measure; Recombination_Type m_recom; bool m_recalc; inline void SetDMin(const std::size_t &i, const std::size_t &j,const double &dij) { if (dij