Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / distfunc.cpp
diff --git a/website/archive/binaries/mac/src/muscle/distfunc.cpp b/website/archive/binaries/mac/src/muscle/distfunc.cpp
new file mode 100644 (file)
index 0000000..b435fb0
--- /dev/null
@@ -0,0 +1,113 @@
+#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