Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef GO_EYECOUNT_H
00011 #define GO_EYECOUNT_H
00012
00013 #include <ostream>
00014
00015
00016
00017
00018
00019
00020
00021 enum GoEyeStatus
00022 {
00023 EYE_UNKNOWN,
00024 EYE_NONE,
00025 EYE_HALF,
00026 EYE_ONE,
00027 EYE_ONE_AND_HALF,
00028 EYE_TWO
00029 };
00030
00031
00032
00033
00034 class GoEyeCount
00035 {
00036 public:
00037 GoEyeCount()
00038 : m_minEyes(0),
00039 m_maxEyes(0),
00040 m_minPotEyes(0),
00041 m_maxPotEyes(0),
00042 m_isLocalSeki(false),
00043 m_maybeLocalSeki(false)
00044 { }
00045
00046 GoEyeCount(int minEyes, int maxEyes, int minPotEyes, int maxPotEyes)
00047 : m_minEyes(minEyes),
00048 m_maxEyes(maxEyes),
00049 m_minPotEyes(minPotEyes),
00050 m_maxPotEyes(maxPotEyes),
00051 m_isLocalSeki(false),
00052 m_maybeLocalSeki(false)
00053 { }
00054
00055 int MinEyes() const
00056 {
00057 return m_minEyes;
00058 }
00059
00060 int MaxEyes() const
00061 {
00062 return m_maxEyes;
00063 }
00064
00065 int MinPotEyes() const
00066 {
00067 return m_minPotEyes;
00068 }
00069
00070 int MaxPotEyes() const
00071 {
00072 return m_maxPotEyes;
00073 }
00074
00075 bool IsLocalSeki() const
00076 {
00077 return m_isLocalSeki;
00078 }
00079
00080 bool MaybeLocalSeki() const
00081 {
00082 return m_maybeLocalSeki;
00083 }
00084
00085 void Clear()
00086 {
00087 m_minEyes = m_maxEyes = m_minPotEyes = m_maxPotEyes = 0;
00088 }
00089
00090
00091 void SetUnknown()
00092 {
00093 m_minEyes = m_minPotEyes = 0;
00094 m_maxEyes = m_maxPotEyes = 2;
00095 }
00096
00097 void SetMinEyes(int eyes)
00098 {
00099 m_minEyes = eyes;
00100 }
00101
00102 void SetMaxEyes(int eyes)
00103 {
00104 m_maxEyes = eyes;
00105 }
00106
00107 void SetExactEyes(int eyes)
00108 {
00109 m_minEyes = m_maxEyes = eyes;
00110 }
00111
00112 void SetMinPotEyes(int eyes)
00113 {
00114 m_minPotEyes = eyes;
00115 }
00116
00117 void SetMaxPotEyes(int eyes)
00118 {
00119 m_maxPotEyes = eyes;
00120 }
00121
00122 void SetExactPotEyes(int eyes)
00123 {
00124 m_minPotEyes = m_maxPotEyes = eyes;
00125 }
00126
00127 void SetEyes(int eyes, int potEyes)
00128 {
00129 SetExactEyes(eyes);
00130 SetExactPotEyes(potEyes);
00131 }
00132
00133
00134 void SetLocalSeki();
00135
00136
00137 void SetMaybeLocalSeki()
00138 {
00139 m_maybeLocalSeki = true;
00140 }
00141
00142
00143 void Normalize();
00144
00145
00146
00147
00148 void AddIndependent(const GoEyeCount& from);
00149
00150
00151 void NumericalAdd(const GoEyeCount& from);
00152
00153 void AddPotential(const GoEyeCount& from);
00154
00155 private:
00156 int m_minEyes;
00157 int m_maxEyes;
00158 int m_minPotEyes;
00159 int m_maxPotEyes;
00160 bool m_isLocalSeki;
00161 bool m_maybeLocalSeki;
00162 };
00163
00164 std::ostream& operator<<(std::ostream& stream, const GoEyeCount& s);
00165
00166
00167
00168 #endif // GO_EYECOUNT_H