All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
piecePairKing.h
Go to the documentation of this file.
1 /* piecePairKing.h
2  */
3 #ifndef OSL_EVAL_ML_PIECEPAIRKING_H
4 #define OSL_EVAL_ML_PIECEPAIRKING_H
5 
7 #include <boost/cstdint.hpp>
8 namespace osl
9 {
10  namespace eval
11  {
12  namespace ml
13  {
14  struct Weights;
16  {
17  public:
18  enum
19  {
20  ONE_DIM = 1488375,
22  };
23  static void setUp(const Weights &weights);
24  static CArray<int,2> eval(const NumEffectState&);
25  template <Player P>
26  static void evalWithUpdateBang(const NumEffectState& state, Move moved, CArray<int,2>& last_value);
27 
28  template <Player King>
29  static int evalOne(const NumEffectState&);
30  private:
31  template <Player King>
32  static int add(const NumEffectState& state, Square to, Ptype ptype);
33  template <Player King>
34  static int sub(const NumEffectState& state, Square from, Ptype ptype);
35  template <Player King>
36  static int addSub(const NumEffectState& state, Square to, Ptype ptype, Square from);
37  static int composeIndex(int king, int i0, int i1)
38  {
39  return king + i0*45*7 + i1;
40  }
41  static int indexWhite(Square p)
42  {
43  return p.x()-1 + (p.y()-1)*9;
44  }
45  static int indexKing(Player owner, Square king, bool& flipx)
46  {
47  if (owner == BLACK)
48  king = king.rotate180();
49  assert(king.y() <= 3);
50  if (king.x() > 5)
51  {
52  king = king.flipHorizontal();
53  flipx = true;
54  }
55  else
56  flipx = false;
57  return (king.x()-1 + (king.y()-1)*5)*45*7*45*7;
58  }
59  template <bool FlipX>
60  static int indexPiece(Player owner, Square position, Ptype ptype)
61  {
62  assert(! isPromoted(ptype));
63  if (owner == BLACK)
64  position = position.rotate180();
65  if (FlipX)
66  position = position.flipHorizontal();
67  assert(position.y() <= 5);
68  return indexWhite(position)*7 + ptype-PTYPE_BASIC_MIN-1;
69  }
70  static osl::CArray<int16_t, ONE_DIM> table;
71  };
72  }
73  }
74 }
75 
76 
77 #endif /* OSL_EVAL_ML_PIECEPAIRKING_H */
78 // ;;; Local Variables:
79 // ;;; mode:c++
80 // ;;; c-basic-offset:2
81 // ;;; End: