+++ /dev/null
-#include "muscle.h"\r
-#include "scorehistory.h"\r
-#include <stdio.h>\r
-\r
-#define TRACE 0\r
-\r
-ScoreHistory::ScoreHistory(unsigned uIters, unsigned uNodeCount)\r
- {\r
- m_uNodeCount = uNodeCount;\r
- m_uIters = uIters;\r
-\r
- m_Score = new SCORE *[uIters];\r
- m_bScoreSet = new bool *[uIters];\r
- for (unsigned n = 0; n < uIters; ++n)\r
- {\r
- m_Score[n] = new SCORE[uNodeCount*2];\r
- m_bScoreSet[n] = new bool[uNodeCount*2];\r
- memset(m_bScoreSet[n], 0, uNodeCount*2*sizeof(bool));\r
- }\r
- }\r
-\r
-ScoreHistory::~ScoreHistory()\r
- {\r
- for (unsigned n = 0; n < m_uIters; ++n)\r
- {\r
- delete[] m_Score[n];\r
- delete[] m_bScoreSet[n];\r
- }\r
- delete[] m_Score;\r
- delete[] m_bScoreSet;\r
- }\r
-\r
-bool ScoreHistory::SetScore(unsigned uIter, unsigned uNodeIndex, bool bRight, SCORE Score)\r
- {\r
-#if TRACE\r
- Log("ScoreHistory::SetScore(Iter=%u Node=%u Right=%d Score=%g)\n",\r
- uIter, uNodeIndex, bRight, Score);\r
-#endif\r
- if (uIter >= m_uIters)\r
- Quit("ScoreHistory::SetScore-1");\r
- if (uNodeIndex >= m_uNodeCount)\r
- Quit("ScoreHistory::SetScore-2");\r
-\r
- const unsigned uIndex = uNodeIndex*2 + bRight;\r
- for (unsigned n = 1; n < uIter; ++n)\r
- {\r
- const unsigned uPrevIter = n - 1;\r
- if (!m_bScoreSet[uPrevIter][uIndex])\r
- {\r
- LogMe();\r
- Quit("ScoreHistory::SetScore-3");\r
- }\r
- if (m_Score[uPrevIter][uIndex] == Score)\r
- {\r
- ProgressStepsDone();\r
-#if TRACE\r
- Log("Oscillating\n");\r
-#endif\r
- return true;\r
- }\r
- }\r
- m_Score[uIter][uIndex] = Score;\r
- m_bScoreSet[uIter][uIndex] = true;\r
- return false;\r
- }\r
-\r
-void ScoreHistory::LogMe() const\r
- {\r
- Log("ScoreHistory\n");\r
- Log("Iter Node Right Score\n");\r
- Log("---- ---- ----- ---------\n");\r
- for (unsigned uIter = 0; uIter < m_uIters; ++uIter)\r
- {\r
- bool bAnySet = false;\r
- for (unsigned n = 0; n < m_uNodeCount*2; ++n)\r
- if (m_bScoreSet[uIter][n])\r
- {\r
- bAnySet = true;\r
- break;\r
- }\r
- if (!bAnySet)\r
- return;\r
- for (unsigned uNodeIndex = 0; uNodeIndex < m_uNodeCount; ++uNodeIndex)\r
- {\r
- const unsigned uBase = 2*uNodeIndex;\r
- if (m_bScoreSet[uIter][uBase])\r
- Log("%4u %4u F %9.3f\n", uIter, uNodeIndex, m_Score[uIter][uBase]);\r
- if (m_bScoreSet[uIter][uBase+1])\r
- Log("%4u %4u T %9.3f\n", uIter, uNodeIndex, m_Score[uIter][uBase+1]);\r
- }\r
- }\r
- }\r
-\r
-SCORE ScoreHistory::GetScore(unsigned uIter, unsigned uNodeIndex,\r
- bool bReverse, bool bRight) const\r
- {\r
- const unsigned uIndex = uNodeIndex*2 + bRight;\r
- if (!m_bScoreSet[uIter][uIndex])\r
- Quit("ScoreHistory::GetScore");\r
- return m_Score[uIter][uIndex];\r
- }\r