My Project
dfpnRecord.h
Go to the documentation of this file.
1 /* dfpnRecord.h
2  */
3 #ifndef OSL_DFPNRECORD_H
4 #define OSL_DFPNRECORD_H
5 
7 #include "osl/basic_type.h"
8 
9 #define NAGAI_DAG_TEST
10 
11 namespace osl
12 {
13  namespace checkmate
14  {
16  {
19  uint64_t solved;
20 #ifdef NAGAI_DAG_TEST
22  uint64_t dag_moves;
23 #endif
26  mutable unsigned int node_count;
27  unsigned int tried_oracle;
32  unsigned int min_pdp; // solved のmin
33  uint32_t working_threads;
38 #ifdef NAGAI_DAG_TEST
40 #endif
41 
43  : solved(0),
44 #ifdef NAGAI_DAG_TEST
45  dag_moves(0),
46 #endif
47  node_count(0), tried_oracle(0), min_pdp(ProofDisproof::PROOF_MAX),
48  working_threads(0),
50 #ifdef NAGAI_DAG_TEST
51  , dag_terminal(0)
52 #endif
53  {
54  }
55  };
56 
57  class DfpnRecord : public DfpnRecordBase
58  {
59  public:
61 
63  DfpnRecord(PieceStand black, PieceStand white) { stands[BLACK] = black; stands[WHITE] = white; }
64 
65  void setFrom(const DfpnRecordBase& src)
66  {
67  static_cast<DfpnRecordBase*>(this)->operator=(src);
68  node_count = 1;
69  solved = 0;
70  last_to = Square();
71  last_move = Move();
72  need_full_width = false_branch = false;
73 #ifdef NAGAI_DAG_TEST
74  dag_moves = 0;
75  dag_terminal = false;
76 #endif
77  }
78  unsigned int proof() const { return proof_disproof.proof(); }
79  unsigned int disproof() const { return proof_disproof.disproof(); }
81  {
82  assert(proof_pieces_set == UNSET);
83  assert((stands[BLACK] == PieceStand() && stands[WHITE] == PieceStand())
84  || stands[BLACK].isSuperiorOrEqualTo(a)
85  || stands[WHITE].isSuperiorOrEqualTo(a));
87  proof_pieces = a;
88  }
90  {
91  assert(proof_pieces_set == UNSET);
92  assert((stands[BLACK] == PieceStand() && stands[WHITE] == PieceStand())
93  || stands[BLACK].isSuperiorOrEqualTo(a)
94  || stands[WHITE].isSuperiorOrEqualTo(a));
96  proof_pieces = a;
97  }
98  const PieceStand proofPieces() const
99  {
100  assert(proof_pieces_set == PROOF);
101  return proof_pieces;
102  }
103  const PieceStand disproofPieces() const
104  {
105  assert(proof_pieces_set == DISPROOF);
106  return proof_pieces;
107  }
108  };
109  }
110 }
111 
112 
113 
114 #endif /* OSL_DFPNRECORD_H */
115 // ;;; Local Variables:
116 // ;;; mode:c++
117 // ;;; c-basic-offset:2
118 // ;;; End:
圧縮していない moveの表現 .
Definition: basic_type.h:1052
片方の手番の持駒の枚数を記録するクラス.
const PieceStand disproofPieces() const
Definition: dfpnRecord.h:103
CArray< PieceStand, 2 > stands
Definition: dfpnRecord.h:60
unsigned int disproof() const
Definition: dfpnRecord.h:79
void setFrom(const DfpnRecordBase &src)
Definition: dfpnRecord.h:65
unsigned int proof() const
Definition: dfpnRecord.h:78
const PieceStand proofPieces() const
Definition: dfpnRecord.h:98
void setDisproofPieces(PieceStand a)
Definition: dfpnRecord.h:89
void setProofPieces(PieceStand a)
Definition: dfpnRecord.h:80
DfpnRecord(PieceStand black, PieceStand white)
Definition: dfpnRecord.h:63
証明数(proof number)と反証数(disproof number).
Definition: proofDisproof.h:17
unsigned int disproof() const
Definition: proofDisproof.h:85
unsigned int proof() const
Definition: proofDisproof.h:84
#define NAGAI_DAG_TEST
Definition: dfpnRecord.h:9
@ WHITE
Definition: basic_type.h:10
@ BLACK
Definition: basic_type.h:9
PieceStand proof_pieces_candidate
solved のmax
Definition: dfpnRecord.h:31
uint64_t solved
手番に否定的に結果が判明したリスト loop は除く
Definition: dfpnRecord.h:19
Move last_move
合流検知+simulation中の簡易 無限ループ回避
Definition: dfpnRecord.h:29
uint64_t dag_moves
合流を引き起こす指手一覧
Definition: dfpnRecord.h:22