My Project
evalTraits.h
Go to the documentation of this file.
1/* evalTraits.h
2 */
3#ifndef _EVAL_TRAITS_H
4#define _EVAL_TRAITS_H
5
6#include "osl/basic_type.h"
7#include <algorithm>
8namespace osl
9{
10 namespace eval
11 {
12 template<Player P>
13 struct EvalTraits;
14
15 template<>
17 {
18 static const int delta=1;
19 static const int MAX_VALUE = 250000000;
20 // infty become specific to Evaluation class
21 static int max(int v1,int v2){ return std::max(v1,v2); }
22 static int min(int v1,int v2){ return std::min(v1,v2); }
23
24 static bool betterThan(int v1,int v2)
25 {
26 return v1 > v2;
27 }
28 static bool notLessThan(int v1,int v2) {
29 return v1 >= v2;
30 }
34 static int convert(int value)
35 {
36 assert(value >= 0);
37 return value;
38 }
39 };
40
41 template<>
43 {
44 static const int delta= -EvalTraits<BLACK>::delta;
45 static const int MAX_VALUE= -EvalTraits<BLACK>::MAX_VALUE;
46 static int max(int v1,int v2){ return std::min(v1,v2); }
47 static int min(int v1,int v2){ return std::max(v1,v2); }
48
49 static bool betterThan(int v1,int v2)
50 {
51 return v1 < v2;
52 }
53 static bool notLessThan(int v1,int v2)
54 {
55 return v1 <= v2;
56 }
60 static int convert(int value)
61 {
62 assert(value >= 0);
63 return -value;
64 }
65 };
66
67 inline bool betterThan(Player p, int v1,int v2)
68 {
69 assert(isValid(p));
70 if (p == BLACK)
72 else
74 }
75 inline bool notLessThan(Player p, int v1,int v2)
76 {
77 assert(isValid(p));
78 if (p == BLACK)
80 else
82 }
83
84 inline int max(Player p, int v1, int v2)
85 {
86 assert(isValid(p));
87 if (p == BLACK)
88 return EvalTraits<BLACK>::max(v1,v2);
89 else
90 return EvalTraits<WHITE>::max(v1,v2);
91 }
92 inline int min(Player p, int v1, int v2)
93 {
94 assert(isValid(p));
95 if (p == BLACK)
96 return EvalTraits<BLACK>::min(v1,v2);
97 else
98 return EvalTraits<WHITE>::min(v1,v2);
99 }
100
104 inline int delta(Player p)
105 {
106 assert(isValid(p));
107 if (p == BLACK)
109 else
111 }
112
116 inline int convert(Player P, int value)
117 {
118 assert(value >= 0);
119 return value*delta(P);
120 }
121
125 template <class Eval>
126 inline bool isConsistentValueForNormalState(int value)
127 {
128 const int infty = Eval::infty();
129 return ((value % 2) == 0)
131 && EvalTraits<WHITE>::betterThan(value, infty);
132 }
133 inline bool isConsistentValue(int value)
134 {
135 return (value % 2) == 0
136 && (EvalTraits<BLACK>::MAX_VALUE >= value)
137 && (EvalTraits<WHITE>::MAX_VALUE <= value);
138 }
139 } // namespace eval
140 using eval::EvalTraits;
141} // namespace osl
142
143#endif /* _EVAL_TRAITS_H */
144// ;;; Local Variables:
145// ;;; mode:c++
146// ;;; c-basic-offset:2
147// ;;; End:
bool notLessThan(Player p, int v1, int v2)
Definition evalTraits.h:75
bool isConsistentValueForNormalState(int value)
詰がからんでいない局面での通常の評価値
Definition evalTraits.h:126
int max(Player p, int v1, int v2)
Definition evalTraits.h:84
int min(Player p, int v1, int v2)
Definition evalTraits.h:92
bool betterThan(Player p, int v1, int v2)
Definition evalTraits.h:67
int delta(Player p)
playerにとってちょっと高い値
Definition evalTraits.h:104
int convert(Player P, int value)
Definition evalTraits.h:116
bool isConsistentValue(int value)
Definition evalTraits.h:133
bool isValid(Player player)
cast等で作られたplayerが正しいかどうかを返す
Definition basic_type.cc:9
Player
Definition basic_type.h:8
@ WHITE
Definition basic_type.h:10
@ BLACK
Definition basic_type.h:9
static int max(int v1, int v2)
Definition evalTraits.h:21
static int convert(int value)
Definition evalTraits.h:34
static int min(int v1, int v2)
Definition evalTraits.h:22
static bool betterThan(int v1, int v2)
Definition evalTraits.h:24
static bool notLessThan(int v1, int v2)
Definition evalTraits.h:28
static bool betterThan(int v1, int v2)
Definition evalTraits.h:49
static int min(int v1, int v2)
Definition evalTraits.h:47
static bool notLessThan(int v1, int v2)
Definition evalTraits.h:53
static int convert(int value)
Definition evalTraits.h:60
static int max(int v1, int v2)
Definition evalTraits.h:46