position: 临时增加 StateInfo tmpSt 并修改 st 为指针

This commit is contained in:
Calcitem 2020-09-03 22:19:07 +08:00
parent f51e3862e8
commit e6e336aa3b
2 changed files with 15 additions and 11 deletions

View File

@ -132,6 +132,9 @@ void Position::init()
Position::Position() Position::Position()
{ {
// TODO
st = &tmpSt;
construct_key(); construct_key();
set_position(&RULES[DEFAULT_RULE_NUMBER]); set_position(&RULES[DEFAULT_RULE_NUMBER]);
@ -445,7 +448,7 @@ bool Position::set_position(const struct Rule *newRule)
action = ACTION_PLACE; action = ACTION_PLACE;
memset(board, 0, sizeof(board)); memset(board, 0, sizeof(board));
st.key = 0; st->key = 0;
memset(byTypeBB, 0, sizeof(byTypeBB)); memset(byTypeBB, 0, sizeof(byTypeBB));
if (pieces_on_board_count() == -1) { if (pieces_on_board_count() == -1) {
@ -495,7 +498,7 @@ bool Position::reset()
winner = NOBODY; winner = NOBODY;
memset(board, 0, sizeof(board)); memset(board, 0, sizeof(board));
st.key = 0; st->key = 0;
memset(byTypeBB, 0, sizeof(byTypeBB)); memset(byTypeBB, 0, sizeof(byTypeBB));
pieceCountOnBoard[BLACK] = pieceCountOnBoard[WHITE] = 0; pieceCountOnBoard[BLACK] = pieceCountOnBoard[WHITE] = 0;
@ -1215,9 +1218,9 @@ inline Key Position::update_key(Square s)
//Location loc = board[s]; //Location loc = board[s];
//int pieceType = loc == 0x0f? 3 : loc >> PLAYER_SHIFT; //int pieceType = loc == 0x0f? 3 : loc >> PLAYER_SHIFT;
st.key ^= Zobrist::psq[pieceType][s]; st->key ^= Zobrist::psq[pieceType][s];
return st.key; return st->key;
} }
inline Key Position::revert_key(Square s) inline Key Position::revert_key(Square s)
@ -1229,7 +1232,7 @@ Key Position::update_key_misc()
{ {
const int KEY_MISC_BIT = 8; const int KEY_MISC_BIT = 8;
st.key = st.key << KEY_MISC_BIT >> KEY_MISC_BIT; st->key = st->key << KEY_MISC_BIT >> KEY_MISC_BIT;
Key hi = 0; Key hi = 0;
if (sideToMove == WHITE) { if (sideToMove == WHITE) {
@ -1243,14 +1246,14 @@ Key Position::update_key_misc()
hi |= static_cast<Key>(pieceCountNeedRemove) << 2; hi |= static_cast<Key>(pieceCountNeedRemove) << 2;
hi |= static_cast<Key>(pieceCountInHand[BLACK]) << 4; // TODO: may use phase is also OK? hi |= static_cast<Key>(pieceCountInHand[BLACK]) << 4; // TODO: may use phase is also OK?
st.key = st.key | (hi << (CHAR_BIT * sizeof(Key) - KEY_MISC_BIT)); st->key = st->key | (hi << (CHAR_BIT * sizeof(Key) - KEY_MISC_BIT));
return st.key; return st->key;
} }
Key Position::next_primary_key(Move m) Key Position::next_primary_key(Move m)
{ {
Key npKey = st.key /* << 8 >> 8 */; Key npKey = st->key /* << 8 >> 8 */;
Square s = static_cast<Square>(to_sq(m));; Square s = static_cast<Square>(to_sq(m));;
MoveType mt = type_of(m); MoveType mt = type_of(m);

View File

@ -196,7 +196,8 @@ public:
int gamePly; int gamePly;
Color sideToMove { NOCOLOR }; Color sideToMove { NOCOLOR };
Thread *thisThread; Thread *thisThread;
StateInfo st; StateInfo *st;
StateInfo tmpSt; // TODO
/// Mill Game /// Mill Game
Color them { NOCOLOR }; Color them { NOCOLOR };
@ -294,7 +295,7 @@ inline Key Position::key()
inline void Position::construct_key() inline void Position::construct_key()
{ {
st.key = 0; st->key = 0;
} }
inline int Position::game_ply() const inline int Position::game_ply() const
@ -304,7 +305,7 @@ inline int Position::game_ply() const
inline int Position::rule50_count() const inline int Position::rule50_count() const
{ {
return st.rule50; return st->rule50;
} }
inline Thread *Position::this_thread() const inline Thread *Position::this_thread() const