Change Eclipse configuration
[jabaws.git] / website / archive / binaries / mac / src / muscle / scorehistory.cpp
1 #include "muscle.h"\r
2 #include "scorehistory.h"\r
3 #include <stdio.h>\r
4 \r
5 #define TRACE   0\r
6 \r
7 ScoreHistory::ScoreHistory(unsigned uIters, unsigned uNodeCount)\r
8         {\r
9         m_uNodeCount = uNodeCount;\r
10         m_uIters = uIters;\r
11 \r
12         m_Score = new SCORE *[uIters];\r
13         m_bScoreSet = new bool *[uIters];\r
14         for (unsigned n = 0; n < uIters; ++n)\r
15                 {\r
16                 m_Score[n] = new SCORE[uNodeCount*2];\r
17                 m_bScoreSet[n] = new bool[uNodeCount*2];\r
18                 memset(m_bScoreSet[n], 0, uNodeCount*2*sizeof(bool));\r
19                 }\r
20         }\r
21 \r
22 ScoreHistory::~ScoreHistory()\r
23         {\r
24         for (unsigned n = 0; n < m_uIters; ++n)\r
25                 {\r
26                 delete[] m_Score[n];\r
27                 delete[] m_bScoreSet[n];\r
28                 }\r
29         delete[] m_Score;\r
30         delete[] m_bScoreSet;\r
31         }\r
32 \r
33 bool ScoreHistory::SetScore(unsigned uIter, unsigned uNodeIndex, bool bRight, SCORE Score)\r
34         {\r
35 #if     TRACE\r
36         Log("ScoreHistory::SetScore(Iter=%u Node=%u Right=%d Score=%g)\n",\r
37           uIter, uNodeIndex, bRight, Score);\r
38 #endif\r
39         if (uIter >= m_uIters)\r
40                 Quit("ScoreHistory::SetScore-1");\r
41         if (uNodeIndex >= m_uNodeCount)\r
42                 Quit("ScoreHistory::SetScore-2");\r
43 \r
44         const unsigned uIndex = uNodeIndex*2 + bRight;\r
45         for (unsigned n = 1; n < uIter; ++n)\r
46                 {\r
47                 const unsigned uPrevIter = n - 1;\r
48                 if (!m_bScoreSet[uPrevIter][uIndex])\r
49                         {\r
50                         LogMe();\r
51                         Quit("ScoreHistory::SetScore-3");\r
52                         }\r
53                 if (m_Score[uPrevIter][uIndex] == Score)\r
54                         {\r
55                         ProgressStepsDone();\r
56 #if     TRACE\r
57                         Log("Oscillating\n");\r
58 #endif\r
59                         return true;\r
60                         }\r
61                 }\r
62         m_Score[uIter][uIndex] = Score;\r
63         m_bScoreSet[uIter][uIndex] = true;\r
64         return false;\r
65         }\r
66 \r
67 void ScoreHistory::LogMe() const\r
68         {\r
69         Log("ScoreHistory\n");\r
70         Log("Iter  Node  Right      Score\n");\r
71         Log("----  ----  -----  ---------\n");\r
72         for (unsigned uIter = 0; uIter < m_uIters; ++uIter)\r
73                 {\r
74                 bool bAnySet = false;\r
75                 for (unsigned n = 0; n < m_uNodeCount*2; ++n)\r
76                         if (m_bScoreSet[uIter][n])\r
77                                 {\r
78                                 bAnySet = true;\r
79                                 break;\r
80                                 }\r
81                 if (!bAnySet)\r
82                         return;\r
83                 for (unsigned uNodeIndex = 0; uNodeIndex < m_uNodeCount; ++uNodeIndex)\r
84                         {\r
85                         const unsigned uBase = 2*uNodeIndex;\r
86                         if (m_bScoreSet[uIter][uBase])\r
87                                 Log("%4u  %4u         F  %9.3f\n", uIter, uNodeIndex, m_Score[uIter][uBase]);\r
88                         if (m_bScoreSet[uIter][uBase+1])\r
89                                 Log("%4u  %4u         T  %9.3f\n", uIter, uNodeIndex, m_Score[uIter][uBase+1]);\r
90                         }\r
91                 }\r
92         }\r
93 \r
94 SCORE ScoreHistory::GetScore(unsigned uIter, unsigned uNodeIndex,\r
95   bool bReverse, bool bRight) const\r
96         {\r
97         const unsigned uIndex = uNodeIndex*2 + bRight;\r
98         if (!m_bScoreSet[uIter][uIndex])\r
99                 Quit("ScoreHistory::GetScore");\r
100         return m_Score[uIter][uIndex];\r
101         }\r