/
TRPMONashResults.h
81 lines (69 loc) · 2.25 KB
/
TRPMONashResults.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef __TRPMO_NASH_RESULTS_H
#define __TRPMO_NASH_RESULTS_H
#include <boost/noncopyable.hpp>
class TRPMONashResults
{
public:
TRPMONashResults()
{
m_results.numUniqueNash = 0;
m_results.numNonuniqueNash = 0;
m_results.numNoNash = 0;
}
virtual ~TRPMONashResults() {}
virtual void DisplayResults(std::ostream& out) const
{
OStreamHelper streamHelper(out, 2, std::ios::fixed);
out << "Unique Nash: " << m_results.numUniqueNash << " ("
<< PercentOfTotalGames(m_results.numUniqueNash) << "%)" << std::endl;
out << "Nonunique Nash: " << m_results.numNonuniqueNash << " ("
<< PercentOfTotalGames(m_results.numNonuniqueNash) << "%)" << std::endl;
out << "No Nash: " << m_results.numNoNash << " ("
<< PercentOfTotalGames(m_results.numNoNash) << "%)" << std::endl;
}
int GetNumUniqueNash() const
{
return m_results.numUniqueNash;
}
int GetNumNonuniqueNash() const
{
return m_results.numNonuniqueNash;
}
int GetNumNoNash() const
{
return m_results.numNoNash;
}
protected:
struct
{
unsigned int numUniqueNash;
unsigned int numNonuniqueNash;
unsigned int numNoNash;
} m_results;
private:
double PercentOfTotalGames(unsigned int numGames) const
{
unsigned int totalNumGames = m_results.numUniqueNash + m_results.numNonuniqueNash + m_results.numNoNash;
return (static_cast<double>(numGames) / static_cast<double>(totalNumGames)) * 100.0;
}
class OStreamHelper : private boost::noncopyable
{
public:
OStreamHelper(std::ostream& out, std::streamsize precision, std::ios_base::fmtflags flags) :
m_StreamRef(out),
m_prevPrecision(out.precision(precision)),
m_prevFlags(out.setf(flags))
{
}
~OStreamHelper()
{
m_StreamRef.precision(m_prevPrecision);
m_StreamRef.setf(m_prevFlags);
}
private:
std::ostream& m_StreamRef;
std::streamsize m_prevPrecision;
std::ios_base::fmtflags m_prevFlags;
};
};
#endif //__TRPMO_NASH_RESULTS_H