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>
8 namespace osl
9 {
10  namespace eval
11  {
12  template<Player P>
13  struct EvalTraits;
14 
15  template<>
16  struct EvalTraits<BLACK>
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<>
42  struct EvalTraits<WHITE>
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)
71  return EvalTraits<BLACK>::betterThan(v1,v2);
72  else
73  return EvalTraits<WHITE>::betterThan(v1,v2);
74  }
75  inline bool notLessThan(Player p, int v1,int v2)
76  {
77  assert(isValid(p));
78  if (p == BLACK)
79  return EvalTraits<BLACK>::notLessThan(v1,v2);
80  else
81  return EvalTraits<WHITE>::notLessThan(v1,v2);
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