58 m_ = to | (from << 6) | (pt << 24) | (c << 27);
61 operator bool()
const {
return m_ != 0; }
63 bool isPromo()
const {
return (m_ & (3 << 14)) == (1 << 14); }
64 bool isEnpassant()
const {
return (m_ & (3 << 14)) == (2 << 14); }
65 bool isCastle()
const {
return (m_ & (3 << 14)) == (3 << 14); }
77 if (to == 0 && from == 0)
return "--";
79 res = (to > from) ?
"O-O" :
"O-O-O";
80 bool check = (m_ >> 30) & 1;
85 bool fromFyle = (m_ >> 28) & 1;
86 bool fromRank = (m_ >> 29) & 1;
87 bool check = (m_ >> 30) & 1;
91 case BISHOP: res +=
"B";
break;
92 case KNIGHT: res +=
"N";
break;
93 case ROOK: res +=
"R";
break;
94 case QUEEN: res +=
"Q";
break;
95 case KING: res +=
"K";
break;
97 if (capture) res +=
'a' + (from % 8);
99 if (fromFyle) res +=
'a' + (from % 8);
100 if (fromRank) res +=
'1' + (from / 8);
101 if (capture) res +=
"x";
102 res +=
'a' + (to % 8);
103 res +=
'1' + (to / 8);
106 case BISHOP: res +=
"=B";
break;
107 case KNIGHT: res +=
"=N";
break;
108 case ROOK: res +=
"=R";
break;
109 case QUEEN: res +=
"=Q";
break;
112 if (check) res +=
"+";
119 m_ |= ((promo - 2) << 12) | (1 << 14);
122 m_ |= ((piece & 0x07) << 21);
123 if (enPassant) m_ |= (2 << 14);
constexpr FullMove(uint32_t m=0)
bool operator!=(const FullMove &f) const
pieceT getCaptured() const
FullMove(colorT c, squareT from, squareT to, pieceT pt)
void setCapture(pieceT piece, bool enPassant)
void setAmbiguity(bool fyle, bool rank)
void setPromo(pieceT promo)
FullMove(colorT c, squareT kingSq, squareT rookSq)
std::string getSAN(colorT *toMove=0) const