all-up-in-your-elo 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +22 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +42 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/all-up-in-your-elo.gemspec +148 -0
- data/ext/bayeselo/.gitignore +4 -0
- data/ext/bayeselo/CBradleyTerry.cpp +670 -0
- data/ext/bayeselo/CBradleyTerry.h +137 -0
- data/ext/bayeselo/CCDistribution.cpp +135 -0
- data/ext/bayeselo/CCDistribution.h +44 -0
- data/ext/bayeselo/CCDistributionCUI.cpp +104 -0
- data/ext/bayeselo/CCDistributionCUI.h +38 -0
- data/ext/bayeselo/CCondensedResults.cpp +253 -0
- data/ext/bayeselo/CCondensedResults.h +64 -0
- data/ext/bayeselo/CDiscretization.h +40 -0
- data/ext/bayeselo/CDistribution.cpp +123 -0
- data/ext/bayeselo/CDistribution.h +58 -0
- data/ext/bayeselo/CDistributionCollection.cpp +34 -0
- data/ext/bayeselo/CDistributionCollection.h +29 -0
- data/ext/bayeselo/CEloRatingCUI.cpp +1046 -0
- data/ext/bayeselo/CEloRatingCUI.h +67 -0
- data/ext/bayeselo/CIndirectCompare.h +28 -0
- data/ext/bayeselo/CJointBayesian.cpp +111 -0
- data/ext/bayeselo/CJointBayesian.h +38 -0
- data/ext/bayeselo/CLUDecomposition.cpp +154 -0
- data/ext/bayeselo/CLUDecomposition.h +36 -0
- data/ext/bayeselo/CMatrix.cpp +48 -0
- data/ext/bayeselo/CMatrix.h +35 -0
- data/ext/bayeselo/CMatrixIO.cpp +27 -0
- data/ext/bayeselo/CMatrixIO.h +17 -0
- data/ext/bayeselo/CPredictionCUI.cpp +393 -0
- data/ext/bayeselo/CPredictionCUI.h +50 -0
- data/ext/bayeselo/CResultSet.cpp +245 -0
- data/ext/bayeselo/CResultSet.h +50 -0
- data/ext/bayeselo/CResultSetCUI.cpp +355 -0
- data/ext/bayeselo/CResultSetCUI.h +44 -0
- data/ext/bayeselo/CTimeIO.cpp +58 -0
- data/ext/bayeselo/CTimeIO.h +19 -0
- data/ext/bayeselo/CVector.cpp +110 -0
- data/ext/bayeselo/CVector.h +42 -0
- data/ext/bayeselo/EloDataFromFile.cpp +120 -0
- data/ext/bayeselo/EloDataFromFile.h +21 -0
- data/ext/bayeselo/README +8 -0
- data/ext/bayeselo/ReadLineToString.cpp +32 -0
- data/ext/bayeselo/ReadLineToString.h +18 -0
- data/ext/bayeselo/chtime.cpp +56 -0
- data/ext/bayeselo/chtime.h +61 -0
- data/ext/bayeselo/chtimer.h +27 -0
- data/ext/bayeselo/clktimer.cpp +178 -0
- data/ext/bayeselo/clktimer.h +29 -0
- data/ext/bayeselo/consolui.cpp +538 -0
- data/ext/bayeselo/consolui.h +154 -0
- data/ext/bayeselo/const.cpp +79 -0
- data/ext/bayeselo/const.h +42 -0
- data/ext/bayeselo/date.cpp +96 -0
- data/ext/bayeselo/date.h +44 -0
- data/ext/bayeselo/debug.h +58 -0
- data/ext/bayeselo/elomain.cpp +26 -0
- data/ext/bayeselo/eloratings.cpp +76 -0
- data/ext/bayeselo/extconf.rb +6 -0
- data/ext/bayeselo/list.h +367 -0
- data/ext/bayeselo/listi.h +125 -0
- data/ext/bayeselo/move.cpp +249 -0
- data/ext/bayeselo/move.h +139 -0
- data/ext/bayeselo/pgn.h +62 -0
- data/ext/bayeselo/pgnlex.cpp +432 -0
- data/ext/bayeselo/pgnlex.h +105 -0
- data/ext/bayeselo/pgnstr.cpp +126 -0
- data/ext/bayeselo/piece.h +44 -0
- data/ext/bayeselo/player.h +31 -0
- data/ext/bayeselo/position.h +89 -0
- data/ext/bayeselo/random.cpp +114 -0
- data/ext/bayeselo/random.h +63 -0
- data/ext/bayeselo/readstr.cpp +51 -0
- data/ext/bayeselo/readstr.h +19 -0
- data/ext/bayeselo/square.h +61 -0
- data/ext/bayeselo/str.cpp +81 -0
- data/ext/bayeselo/str.h +71 -0
- data/ext/bayeselo/version.cpp +30 -0
- data/ext/bayeselo/version.h +28 -0
- data/ext/bayeselo/version_number.h +1 -0
- data/lib/elo_ratings.rb +9 -0
- data/lib/elo_ratings/c_bayeselo.rb +5 -0
- data/lib/elo_ratings/results.rb +41 -0
- data/test/elo_ratings/test_c_bayeselo.rb +84 -0
- data/test/elo_ratings/test_results.rb +41 -0
- data/test/helper.rb +19 -0
- metadata +233 -0
@@ -0,0 +1,137 @@
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// R�mi Coulom
|
4
|
+
//
|
5
|
+
// December, 2004
|
6
|
+
//
|
7
|
+
/////////////////////////////////////////////////////////////////////////////
|
8
|
+
#ifndef CBradleyTerry_Declared
|
9
|
+
#define CBradleyTerry_Declared
|
10
|
+
|
11
|
+
class CResultSet;
|
12
|
+
class CCondensedResults;
|
13
|
+
class CCDistribution;
|
14
|
+
class CDistributionCollection;
|
15
|
+
|
16
|
+
#include "CMatrix.h"
|
17
|
+
|
18
|
+
#include <vector>
|
19
|
+
#include <cmath>
|
20
|
+
|
21
|
+
class CBradleyTerry // bt
|
22
|
+
{
|
23
|
+
private: ///////////////////////////////////////////////////////////////////
|
24
|
+
const CCondensedResults &crs;
|
25
|
+
|
26
|
+
mutable std::vector<double> velo;
|
27
|
+
mutable double eloAdvantage;
|
28
|
+
mutable double eloDraw;
|
29
|
+
|
30
|
+
mutable std::vector<double> v1;
|
31
|
+
mutable std::vector<double> v2;
|
32
|
+
mutable double *pGamma;
|
33
|
+
mutable double *pNextGamma;
|
34
|
+
mutable double ThetaW;
|
35
|
+
mutable double ThetaD;
|
36
|
+
|
37
|
+
CMatrix mCovariance;
|
38
|
+
CMatrix mLOS;
|
39
|
+
CMatrix mWinProbability;
|
40
|
+
CMatrix mLossProbability;
|
41
|
+
CMatrix mDrawProbability;
|
42
|
+
|
43
|
+
void ConvertEloToGamma() const;
|
44
|
+
void UpdateGammas();
|
45
|
+
double UpdateThetaW();
|
46
|
+
double UpdateThetaD();
|
47
|
+
double GetDifference(int n, const double *pd1, const double *pd2);
|
48
|
+
|
49
|
+
public: ////////////////////////////////////////////////////////////////////
|
50
|
+
CBradleyTerry(const CCondensedResults &crsInit);
|
51
|
+
|
52
|
+
//
|
53
|
+
// Gets
|
54
|
+
//
|
55
|
+
const double *GetElo() const {return &velo[0];}
|
56
|
+
double GetElo(int i) const {return velo[i];}
|
57
|
+
double GetAdvantage() const {return eloAdvantage;}
|
58
|
+
double GetDrawElo() const {return eloDraw;}
|
59
|
+
|
60
|
+
//
|
61
|
+
// Sets
|
62
|
+
//
|
63
|
+
double *GetElo() {return &velo[0];}
|
64
|
+
void SetElo(int i, double x) {velo[i] = x;}
|
65
|
+
void SetAdvantage(double x) {eloAdvantage = x;}
|
66
|
+
void SetDrawElo(double x) {eloDraw = x;}
|
67
|
+
|
68
|
+
//
|
69
|
+
// Methods to compute elo ratings
|
70
|
+
//
|
71
|
+
void MinorizationMaximization(int fThetaW,
|
72
|
+
int fThetaD,
|
73
|
+
double Epsilon = 1e-5);
|
74
|
+
void ELOstat(double Epsilon = 1e-5);
|
75
|
+
void ELOstatIntervals(double *peloLower, double *peloUpper) const;
|
76
|
+
|
77
|
+
//
|
78
|
+
// Basic Probabilities
|
79
|
+
//
|
80
|
+
static double Probability(double eloDelta)
|
81
|
+
{
|
82
|
+
return 1 / (1 + std::pow(10.0, eloDelta / 400.0));
|
83
|
+
}
|
84
|
+
|
85
|
+
double ElostatProbability(double eloDelta) const
|
86
|
+
{
|
87
|
+
return Probability(-eloDelta - eloAdvantage);
|
88
|
+
}
|
89
|
+
|
90
|
+
double WinProbability(double eloDelta) const
|
91
|
+
{
|
92
|
+
return Probability(-eloDelta - eloAdvantage + eloDraw);
|
93
|
+
}
|
94
|
+
|
95
|
+
double LossProbability(double eloDelta) const
|
96
|
+
{
|
97
|
+
return Probability(eloDelta + eloAdvantage + eloDraw);
|
98
|
+
}
|
99
|
+
|
100
|
+
double DrawProbability(double eloDelta) const
|
101
|
+
{
|
102
|
+
return 1 - WinProbability(eloDelta) - LossProbability(eloDelta);
|
103
|
+
}
|
104
|
+
|
105
|
+
double ResultProbability(double eloDelta, int Result) const
|
106
|
+
{
|
107
|
+
if (Result == 0)
|
108
|
+
return LossProbability(eloDelta);
|
109
|
+
else if (Result == 1)
|
110
|
+
return DrawProbability(eloDelta);
|
111
|
+
else
|
112
|
+
return WinProbability(eloDelta);
|
113
|
+
}
|
114
|
+
|
115
|
+
//
|
116
|
+
// Likelihood of results
|
117
|
+
//
|
118
|
+
double LogLikelihood(int Player) const;
|
119
|
+
double LogLikelihood() const;
|
120
|
+
double LogLikelihood(const CResultSet &rs) const;
|
121
|
+
|
122
|
+
//
|
123
|
+
// Likelihood distributions
|
124
|
+
//
|
125
|
+
void GetPlayerDist(int Player, CCDistribution &cdist) const;
|
126
|
+
void GetAdvantageDist(CCDistribution &cdist) const;
|
127
|
+
void GetDrawEloDist(CCDistribution &cdist) const;
|
128
|
+
|
129
|
+
void GetVariance(double *pdVariance) const;
|
130
|
+
void ComputeCovariance();
|
131
|
+
void ComputeLikelihoodOfSuperiority();
|
132
|
+
|
133
|
+
const CMatrix &GetCovariance() const {return mCovariance;}
|
134
|
+
const CMatrix &GetLikelihoodOfSuperiority() const {return mLOS;}
|
135
|
+
};
|
136
|
+
|
137
|
+
#endif
|
@@ -0,0 +1,135 @@
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// R�mi Coulom
|
4
|
+
//
|
5
|
+
// December, 2004
|
6
|
+
//
|
7
|
+
/////////////////////////////////////////////////////////////////////////////
|
8
|
+
#include "CCDistribution.h"
|
9
|
+
|
10
|
+
#include <cmath>
|
11
|
+
|
12
|
+
/////////////////////////////////////////////////////////////////////////////
|
13
|
+
// Get Bound helper function
|
14
|
+
/////////////////////////////////////////////////////////////////////////////
|
15
|
+
double CCDistribution::GetBoundValue(double Confidence,
|
16
|
+
int Begin,
|
17
|
+
int End,
|
18
|
+
int Direction) const
|
19
|
+
{
|
20
|
+
const double Threshold = (1 - Confidence) / 2;
|
21
|
+
double P = 0;
|
22
|
+
double PreviousDistribution = 0;
|
23
|
+
|
24
|
+
for (int i = Begin; i != End; i += Direction)
|
25
|
+
{
|
26
|
+
double NewDistribution = vDistribution[i];
|
27
|
+
double NewP = P + (PreviousDistribution + NewDistribution) / 2;
|
28
|
+
if (NewP >= Threshold)
|
29
|
+
{
|
30
|
+
double Value = ValueFromIndex(i - Direction);
|
31
|
+
double NewValue = ValueFromIndex(i);
|
32
|
+
#if 0
|
33
|
+
double Delta = PreviousDistribution * PreviousDistribution -
|
34
|
+
4 * (P - Threshold) * (NewDistribution - PreviousDistribution) / 2;
|
35
|
+
double Alpha = (-PreviousDistribution + std::sqrt(Delta)) /
|
36
|
+
(NewDistribution - PreviousDistribution);
|
37
|
+
return Value + (NewValue - Value) * Alpha;
|
38
|
+
#else
|
39
|
+
// The second-order approximation above causes problems when NewD=PreviousD
|
40
|
+
return Value + (NewValue - Value) * (Threshold - P) / (NewP - P);
|
41
|
+
#endif
|
42
|
+
}
|
43
|
+
P = NewP;
|
44
|
+
PreviousDistribution = NewDistribution;
|
45
|
+
}
|
46
|
+
|
47
|
+
return ValueFromIndex(End - Direction);
|
48
|
+
}
|
49
|
+
|
50
|
+
/////////////////////////////////////////////////////////////////////////////
|
51
|
+
// Get Lower Bound
|
52
|
+
/////////////////////////////////////////////////////////////////////////////
|
53
|
+
double CCDistribution::GetLowerValue(double Confidence) const
|
54
|
+
{
|
55
|
+
return GetBoundValue(Confidence, 0, vDistribution.size(), +1);
|
56
|
+
}
|
57
|
+
|
58
|
+
/////////////////////////////////////////////////////////////////////////////
|
59
|
+
// Get Upper Bound
|
60
|
+
/////////////////////////////////////////////////////////////////////////////
|
61
|
+
double CCDistribution::GetUpperValue(double Confidence) const
|
62
|
+
{
|
63
|
+
return GetBoundValue(Confidence, vDistribution.size() - 1, -1, -1);
|
64
|
+
}
|
65
|
+
|
66
|
+
/////////////////////////////////////////////////////////////////////////////
|
67
|
+
// Get Most Likely Value
|
68
|
+
/////////////////////////////////////////////////////////////////////////////
|
69
|
+
double CCDistribution::GetMostLikelyValue() const
|
70
|
+
{
|
71
|
+
double MaxP = vDistribution[0];
|
72
|
+
int iMax = 0;
|
73
|
+
for (int i = vDistribution.size(); --i > 0;)
|
74
|
+
if (vDistribution[i] > MaxP)
|
75
|
+
{
|
76
|
+
iMax = i;
|
77
|
+
MaxP = vDistribution[i];
|
78
|
+
}
|
79
|
+
return ValueFromIndex(iMax);
|
80
|
+
}
|
81
|
+
|
82
|
+
/////////////////////////////////////////////////////////////////////////////
|
83
|
+
// Mean
|
84
|
+
/////////////////////////////////////////////////////////////////////////////
|
85
|
+
double CCDistribution::GetMean() const
|
86
|
+
{
|
87
|
+
double Result = 0;
|
88
|
+
for (int i = vDistribution.size(); --i > 0;)
|
89
|
+
Result += vDistribution[i] * ValueFromIndex(i);
|
90
|
+
return Result;
|
91
|
+
}
|
92
|
+
|
93
|
+
/////////////////////////////////////////////////////////////////////////////
|
94
|
+
// Variance
|
95
|
+
/////////////////////////////////////////////////////////////////////////////
|
96
|
+
double CCDistribution::GetVariance(double Mean) const
|
97
|
+
{
|
98
|
+
double Result = 0;
|
99
|
+
for (int i = vDistribution.size(); --i > 0;)
|
100
|
+
{
|
101
|
+
double x = ValueFromIndex(i);
|
102
|
+
Result += vDistribution[i] * (x - Mean) * (x - Mean);
|
103
|
+
}
|
104
|
+
return Result;
|
105
|
+
}
|
106
|
+
|
107
|
+
/////////////////////////////////////////////////////////////////////////////
|
108
|
+
// Gaussian
|
109
|
+
/////////////////////////////////////////////////////////////////////////////
|
110
|
+
void CCDistribution::SetNormal(double Mu, double Sigma)
|
111
|
+
{
|
112
|
+
const double b = 1.0 / (2.0 * Sigma * Sigma);
|
113
|
+
|
114
|
+
for (int i = vDistribution.size(); --i > 0;)
|
115
|
+
{
|
116
|
+
double x = ValueFromIndex(i);
|
117
|
+
double delta = x - Mu;
|
118
|
+
vDistribution[i] = std::exp(-b * delta * delta);
|
119
|
+
}
|
120
|
+
|
121
|
+
Normalize();
|
122
|
+
}
|
123
|
+
|
124
|
+
/////////////////////////////////////////////////////////////////////////////
|
125
|
+
// Binomial posterior ??? log-likelihood for better stability
|
126
|
+
/////////////////////////////////////////////////////////////////////////////
|
127
|
+
void CCDistribution::SetBinomialPosterior(int N, int n)
|
128
|
+
{
|
129
|
+
for (int i = vDistribution.size(); --i > 0;)
|
130
|
+
{
|
131
|
+
double x = ValueFromIndex(i);
|
132
|
+
vDistribution[i] = std::pow(x, n) * std::pow (1 - x, N - n);
|
133
|
+
}
|
134
|
+
Normalize();
|
135
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// R�mi Coulom
|
4
|
+
//
|
5
|
+
// December, 2004
|
6
|
+
//
|
7
|
+
/////////////////////////////////////////////////////////////////////////////
|
8
|
+
#ifndef CCDistribution_Declared
|
9
|
+
#define CCDistribution_Declared
|
10
|
+
|
11
|
+
#include "CDistribution.h"
|
12
|
+
#include "CDiscretization.h"
|
13
|
+
|
14
|
+
class CCDistribution: public CDistribution, public CDiscretization // cdist
|
15
|
+
{
|
16
|
+
private: ///////////////////////////////////////////////////////////////////
|
17
|
+
double GetBoundValue(double Confidence,
|
18
|
+
int Begin,
|
19
|
+
int End,
|
20
|
+
int Direction) const;
|
21
|
+
|
22
|
+
public: ////////////////////////////////////////////////////////////////////
|
23
|
+
CCDistribution(int Size, double Min, double Max):
|
24
|
+
CDistribution(Size),
|
25
|
+
CDiscretization(Size, Min, Max)
|
26
|
+
{}
|
27
|
+
|
28
|
+
//
|
29
|
+
// Compute properties of this distribution
|
30
|
+
//
|
31
|
+
double GetLowerValue(double Confidence) const;
|
32
|
+
double GetUpperValue(double Confidence) const;
|
33
|
+
double GetMostLikelyValue() const;
|
34
|
+
double GetMean() const;
|
35
|
+
double GetVariance(double Mean) const;
|
36
|
+
|
37
|
+
//
|
38
|
+
// Standard distributions
|
39
|
+
//
|
40
|
+
void SetNormal(double Mu, double Sigma);
|
41
|
+
void SetBinomialPosterior(int N, int n);
|
42
|
+
};
|
43
|
+
|
44
|
+
#endif
|
@@ -0,0 +1,104 @@
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// Remi Coulom
|
4
|
+
//
|
5
|
+
// January, 2005
|
6
|
+
//
|
7
|
+
////////////////////////////////////////////////////////////////////////////
|
8
|
+
#include "CCDistributionCUI.h"
|
9
|
+
#include "CCDistribution.h"
|
10
|
+
|
11
|
+
#include <sstream>
|
12
|
+
|
13
|
+
////////////////////////////////////////////////////////////////////////////
|
14
|
+
// Constructor
|
15
|
+
////////////////////////////////////////////////////////////////////////////
|
16
|
+
CCDistributionCUI::CCDistributionCUI(const CCDistribution &cdistInit,
|
17
|
+
CConsoleUI *pcui,
|
18
|
+
int openmode) :
|
19
|
+
CConsoleUI(pcui, openmode),
|
20
|
+
cdist(cdistInit)
|
21
|
+
{
|
22
|
+
}
|
23
|
+
|
24
|
+
////////////////////////////////////////////////////////////////////////////
|
25
|
+
// Local prompt
|
26
|
+
////////////////////////////////////////////////////////////////////////////
|
27
|
+
void CCDistributionCUI::PrintLocalPrompt(std::ostream &out)
|
28
|
+
{
|
29
|
+
out << "Distribution";
|
30
|
+
}
|
31
|
+
|
32
|
+
////////////////////////////////////////////////////////////////////////////
|
33
|
+
// Command strings
|
34
|
+
////////////////////////////////////////////////////////////////////////////
|
35
|
+
const char * const CCDistributionCUI::tszCommands[] =
|
36
|
+
{
|
37
|
+
"?",
|
38
|
+
"lower",
|
39
|
+
"upper",
|
40
|
+
"mostlikely",
|
41
|
+
"write",
|
42
|
+
0
|
43
|
+
};
|
44
|
+
|
45
|
+
////////////////////////////////////////////////////////////////////////////
|
46
|
+
// Process commands
|
47
|
+
////////////////////////////////////////////////////////////////////////////
|
48
|
+
int CCDistributionCUI::ProcessCommand(const char *pszCommand,
|
49
|
+
const char *pszParameters,
|
50
|
+
std::istream &in,
|
51
|
+
std::ostream &out)
|
52
|
+
{
|
53
|
+
enum
|
54
|
+
{
|
55
|
+
IDC_Help,
|
56
|
+
IDC_Lower,
|
57
|
+
IDC_Upper,
|
58
|
+
IDC_MostLikely,
|
59
|
+
IDC_Write
|
60
|
+
};
|
61
|
+
|
62
|
+
switch (ArrayLookup(pszCommand, tszCommands))
|
63
|
+
{
|
64
|
+
case IDC_Help: ///////////////////////////////////////////////////////////
|
65
|
+
CConsoleUI::ProcessCommand(pszCommand, pszParameters, in, out);
|
66
|
+
out << "Distribution commands\n";
|
67
|
+
out << "~~~~~~~~~~~~~~~~~~~~~\n";
|
68
|
+
out << "lower [c] ....... lower bound (c=confidence, default=0.95)\n";
|
69
|
+
out << "upper [c] ....... upper bound\n";
|
70
|
+
out << "mostlikely ...... most likely value\n";
|
71
|
+
out << "write ........... write complete distribution\n";
|
72
|
+
break;
|
73
|
+
|
74
|
+
case IDC_Lower: //////////////////////////////////////////////////////////
|
75
|
+
{
|
76
|
+
double Confidence = 0.95;
|
77
|
+
std::istringstream(pszParameters) >> Confidence;
|
78
|
+
out << cdist.GetLowerValue(Confidence) << '\n';
|
79
|
+
}
|
80
|
+
break;
|
81
|
+
|
82
|
+
case IDC_Upper: //////////////////////////////////////////////////////////
|
83
|
+
{
|
84
|
+
double Confidence = 0.95;
|
85
|
+
std::istringstream(pszParameters) >> Confidence;
|
86
|
+
out << cdist.GetUpperValue(Confidence) << '\n';
|
87
|
+
}
|
88
|
+
break;
|
89
|
+
|
90
|
+
case IDC_MostLikely: /////////////////////////////////////////////////////
|
91
|
+
out << cdist.GetMostLikelyValue() << '\n';
|
92
|
+
break;
|
93
|
+
|
94
|
+
case IDC_Write: //////////////////////////////////////////////////////////
|
95
|
+
for (int i = 0; i < cdist.GetSize(); i++)
|
96
|
+
out << cdist.ValueFromIndex(i) << ' ' << cdist.GetProbability(i) << '\n';
|
97
|
+
break;
|
98
|
+
|
99
|
+
default: /////////////////////////////////////////////////////////////////
|
100
|
+
return CConsoleUI::ProcessCommand(pszCommand, pszParameters, in, out);
|
101
|
+
}
|
102
|
+
|
103
|
+
return PC_Continue;
|
104
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// CCDistributionCUI.h
|
4
|
+
//
|
5
|
+
// Remi Coulom
|
6
|
+
//
|
7
|
+
// January, 2005
|
8
|
+
//
|
9
|
+
////////////////////////////////////////////////////////////////////////////
|
10
|
+
#ifndef CCDistributionCUI_Declared
|
11
|
+
#define CCDistributionCUI_Declared
|
12
|
+
|
13
|
+
#include "consolui.h" // CConsoleUI
|
14
|
+
|
15
|
+
class CCDistribution;
|
16
|
+
|
17
|
+
class CCDistributionCUI : public CConsoleUI // cdcui
|
18
|
+
{
|
19
|
+
private: //////////////////////////////////////////////////////////////////
|
20
|
+
static const char * const tszCommands[];
|
21
|
+
|
22
|
+
const CCDistribution &cdist;
|
23
|
+
|
24
|
+
protected: ////////////////////////////////////////////////////////////////
|
25
|
+
virtual int ProcessCommand(const char *pszCommand,
|
26
|
+
const char *pszParameters,
|
27
|
+
std::istream &in,
|
28
|
+
std::ostream &out);
|
29
|
+
|
30
|
+
virtual void PrintLocalPrompt(std::ostream &out);
|
31
|
+
|
32
|
+
public: ///////////////////////////////////////////////////////////////////
|
33
|
+
CCDistributionCUI(const CCDistribution &cdistInit,
|
34
|
+
CConsoleUI *pcui = 0,
|
35
|
+
int openmode = OpenModal);
|
36
|
+
};
|
37
|
+
|
38
|
+
#endif
|