+++ /dev/null
-#include "muscle.h"\r
-#include "distfunc.h"\r
-#include <assert.h>\r
-\r
-DistFunc::DistFunc()\r
- {\r
- m_Dists = 0;\r
- m_uCount = 0;\r
- m_uCacheCount = 0;\r
- m_Names = 0;\r
- m_Ids = 0;\r
- }\r
-\r
-DistFunc::~DistFunc()\r
- {\r
- if (0 != m_Names)\r
- {\r
- for (unsigned i = 0; i < m_uCount; ++i)\r
- free(m_Names[i]);\r
- }\r
- delete[] m_Dists;\r
- delete[] m_Names;\r
- delete[] m_Ids;\r
- }\r
-\r
-float DistFunc::GetDist(unsigned uIndex1, unsigned uIndex2) const\r
- {\r
- return m_Dists[VectorIndex(uIndex1, uIndex2)];\r
- }\r
-\r
-unsigned DistFunc::GetCount() const\r
- {\r
- return m_uCount;\r
- }\r
-\r
-void DistFunc::SetCount(unsigned uCount)\r
- {\r
- m_uCount = uCount;\r
- if (uCount <= m_uCacheCount)\r
- return;\r
- delete[] m_Dists;\r
- m_Dists = new float[VectorLength()];\r
- m_Names = new char *[m_uCount];\r
- m_Ids = new unsigned[m_uCount];\r
- m_uCacheCount = uCount;\r
-\r
- memset(m_Names, 0, m_uCount*sizeof(char *));\r
- memset(m_Ids, 0xff, m_uCount*sizeof(unsigned));\r
- memset(m_Dists, 0, VectorLength()*sizeof(float));\r
- }\r
-\r
-void DistFunc::SetDist(unsigned uIndex1, unsigned uIndex2, float dDist)\r
- {\r
- m_Dists[VectorIndex(uIndex1, uIndex2)] = dDist;\r
- m_Dists[VectorIndex(uIndex2, uIndex1)] = dDist;\r
- }\r
-\r
-unsigned DistFunc::VectorIndex(unsigned uIndex1, unsigned uIndex2) const\r
- {\r
- assert(uIndex1 < m_uCount && uIndex2 < m_uCount);\r
- return uIndex1*m_uCount + uIndex2;\r
- }\r
-\r
-unsigned DistFunc::VectorLength() const\r
- {\r
- return m_uCount*m_uCount;\r
- }\r
-\r
-void DistFunc::SetName(unsigned uIndex, const char szName[])\r
- {\r
- assert(uIndex < m_uCount);\r
- m_Names[uIndex] = strsave(szName);\r
- }\r
-\r
-void DistFunc::SetId(unsigned uIndex, unsigned uId)\r
- {\r
- assert(uIndex < m_uCount);\r
- m_Ids[uIndex] = uId;\r
- }\r
-\r
-const char *DistFunc::GetName(unsigned uIndex) const\r
- {\r
- assert(uIndex < m_uCount);\r
- return m_Names[uIndex];\r
- }\r
-\r
-unsigned DistFunc::GetId(unsigned uIndex) const\r
- {\r
- assert(uIndex < m_uCount);\r
- return m_Ids[uIndex];\r
- }\r
-\r
-void DistFunc::LogMe() const\r
- {\r
- Log("DistFunc::LogMe count=%u\n", m_uCount);\r
- Log(" ");\r
- for (unsigned i = 0; i < m_uCount; ++i)\r
- Log(" %7u", i);\r
- Log("\n");\r
-\r
- Log(" ");\r
- for (unsigned i = 0; i < m_uCount; ++i)\r
- Log(" %7.7s", m_Names[i] ? m_Names[i] : "");\r
- Log("\n");\r
-\r
- for (unsigned i = 0; i < m_uCount; ++i)\r
- {\r
- Log("%4u %10.10s : ", i, m_Names[i] ? m_Names[i] : "");\r
- for (unsigned j = 0; j <= i; ++j)\r
- Log(" %7.4g", GetDist(i, j));\r
- Log("\n");\r
- }\r
- }\r