2 #include "scorehistory.h"
\r
7 ScoreHistory::ScoreHistory(unsigned uIters, unsigned uNodeCount)
\r
9 m_uNodeCount = uNodeCount;
\r
12 m_Score = new SCORE *[uIters];
\r
13 m_bScoreSet = new bool *[uIters];
\r
14 for (unsigned n = 0; n < uIters; ++n)
\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
22 ScoreHistory::~ScoreHistory()
\r
24 for (unsigned n = 0; n < m_uIters; ++n)
\r
26 delete[] m_Score[n];
\r
27 delete[] m_bScoreSet[n];
\r
30 delete[] m_bScoreSet;
\r
33 bool ScoreHistory::SetScore(unsigned uIter, unsigned uNodeIndex, bool bRight, SCORE Score)
\r
36 Log("ScoreHistory::SetScore(Iter=%u Node=%u Right=%d Score=%g)\n",
\r
37 uIter, uNodeIndex, bRight, Score);
\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
44 const unsigned uIndex = uNodeIndex*2 + bRight;
\r
45 for (unsigned n = 1; n < uIter; ++n)
\r
47 const unsigned uPrevIter = n - 1;
\r
48 if (!m_bScoreSet[uPrevIter][uIndex])
\r
51 Quit("ScoreHistory::SetScore-3");
\r
53 if (m_Score[uPrevIter][uIndex] == Score)
\r
55 ProgressStepsDone();
\r
57 Log("Oscillating\n");
\r
62 m_Score[uIter][uIndex] = Score;
\r
63 m_bScoreSet[uIter][uIndex] = true;
\r
67 void ScoreHistory::LogMe() const
\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
74 bool bAnySet = false;
\r
75 for (unsigned n = 0; n < m_uNodeCount*2; ++n)
\r
76 if (m_bScoreSet[uIter][n])
\r
83 for (unsigned uNodeIndex = 0; uNodeIndex < m_uNodeCount; ++uNodeIndex)
\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
94 SCORE ScoreHistory::GetScore(unsigned uIter, unsigned uNodeIndex,
\r
95 bool bReverse, bool bRight) const
\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