Skip to content

Commit

Permalink
- Moveをclass化したときの変更忘れ修正。
Browse files Browse the repository at this point in the history
  • Loading branch information
yaneurao committed Oct 14, 2024
1 parent 6354fa8 commit 121f7f8
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 11 deletions.
2 changes: 1 addition & 1 deletion source/mate/mate.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ namespace Mate

// その時の最善手のgetterとsetter
Move get_move() const { return (Move)(move16 + (move8 << 16)); }
void set_move(Move move) { move16 = (u16)move; move8 = move >> 16; }
void set_move(Move move) { move16 = move.to_u16(); move8 = move.to_u32() >> 16; }

// このEntryに格納されている手駒のgetter
// save()する時に指定した手駒が返る。
Expand Down
2 changes: 1 addition & 1 deletion source/mate/mate_solver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ namespace Mate {
case MateRepetitionState::Unknown:
// いずれでもないので、きちんと調べる必要がある。
// さらにこの局面から偶数手で相手が詰まされるかのチェック
found_mate = mated_even_ply<GEN_ALL>(pos, ply - 1) == MOVE_NONE /* 回避手がない == 詰み */;
found_mate = mated_even_ply<GEN_ALL>(pos, ply - 1) == Move::none() /* 回避手がない == 詰み */;
break;

default: UNREACHABLE;
Expand Down
2 changes: 1 addition & 1 deletion source/position.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1244,7 +1244,7 @@ void Position::do_move_impl(Move m, StateInfo& new_st, bool givesCheck)

#if defined(KEEP_LAST_MOVE)
st->lastMove = m;
st->lastMovedPieceType = m.is_drop() ? (PieceType)m.from_sq() : type_of(piece_on(m.from_sq()));
st->lastMovedPieceType = m.is_drop() ? PieceType(m.from_sq()) : type_of(piece_on(m.from_sq()));
#endif

// ----------------------
Expand Down
16 changes: 8 additions & 8 deletions source/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@ class Move
// ゆえに、is_drop()==trueの時は、from_sq(m)にSQ_NB-1を足して、打つ駒がPAWN(= 1)の時にSQ_NBになるようにしてやる必要がある。
// 注) 駒打ちに関して、先手の駒と後手の駒の区別はしない。
//   これは、この関数は、MovePickerのButterflyHistoryで使うから必要なのだが、そこでは指し手の手番(Color)を別途持っているから。
int from_to() const { return (int)(from_sq() + (is_drop() ? (SQ_NB - 1) : 0)) * (int)SQ_NB + (int)to_sq(); }
int from_to() const { return int(from_sq() + int(is_drop() ? (SQ_NB - 1) : 0)) * int(SQ_NB) + int(to_sq());}

// 指し手が普通の指し手(駒打ち/駒成り含む)であるかテストする。
// 特殊な指し手(MOVE_NONE/MOVE_NULL/MOVE_WIN)である場合、falseが返る。
Expand All @@ -728,6 +728,9 @@ class Move
constexpr uint32_t to_u32() const { return (uint32_t)data; }
constexpr operator bool() const { return data; }

// 暗黙的にboolに変換されて意図しない足し算がなされてしまうことがある。
// 例) Move m; Square s;に対して m + s みたいな足し算。
// これを禁止するのは難しい…。
// -- 比較

bool operator == (const Move rhs) const { return this->to_u32() == rhs.to_u32(); }
Expand Down Expand Up @@ -761,9 +764,9 @@ class Move16
Square to_sq() const { return Square(data & 0x7f); }
bool is_drop() const { return (data & MOVE_DROP) != 0; }
bool is_promote() const { return (data & MOVE_PROMOTE) != 0; }
PieceType move_dropped_piece() const { return (PieceType)((data >> 7) & 0x7f); }
PieceType move_dropped_piece() const { return PieceType((data >> 7) & 0x7f); }

int from_to() const { return (int)(from_sq() + (is_drop() ? (SQ_NB - 1) : 0)) * (int)SQ_NB + (int)to_sq(); }
int from_to() const { return int(from_sq() + int(is_drop() ? (SQ_NB - 1) : 0)) * int(SQ_NB) + int(to_sq()); }
constexpr bool is_ok() const { return (data >> 7) != (data & 0x7f); }

// -- 変換子
Expand All @@ -774,11 +777,8 @@ class Move16
// ⇨ このMove16のinstanceをMoveに戻したい時は、Position::to_move(Move16)を使うこと。
constexpr uint16_t to_u16() const { return (u16)data; }

constexpr operator bool() const { return data; }

// 暗黙的にboolに変換されて意図しない足し算がなされてしまうことがある。
// 例) Move m; Square s;に対して m + s みたいな足し算。
// これを禁止するのは難しい…。
//constexpr operator bool() const { return data; }
// ⇨ これ定義していると余計なバグに悩まされることになる。

// -- 比較

Expand Down

0 comments on commit 121f7f8

Please sign in to comment.