along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
#if !defined(PIECE_H_INCLUDED)
#define PIECE_H_INCLUDED
-////
-//// Includes
-////
-
-#include <string>
-
#include "color.h"
-#include "square.h"
#include "value.h"
-
-////
-//// Types
-////
-
enum PieceType {
PIECE_TYPE_NONE = 0,
PAWN = 1, KNIGHT = 2, BISHOP = 3, ROOK = 4, QUEEN = 5, KING = 6
BP = 9, BN = 10, BB = 11, BR = 12, BQ = 13, BK = 14, PIECE_NONE = 16
};
-ENABLE_OPERATORS_ON(PieceType);
-ENABLE_OPERATORS_ON(Piece);
-
-
-////
-//// Constants
-////
+ENABLE_OPERATORS_ON(PieceType)
+ENABLE_OPERATORS_ON(Piece)
/// Important: If the material values are changed, one must also
/// adjust the piece square tables, and the method game_phase() in the
const Value QueenValueMidgame = Value(0x9D9);
const Value QueenValueEndgame = Value(0x9FE);
-
-////
-//// Inline functions
-////
+inline Piece make_piece(Color c, PieceType pt) {
+ return Piece((int(c) << 3) | int(pt));
+}
inline PieceType type_of_piece(Piece p) {
return PieceType(int(p) & 7);
return Color(int(p) >> 3);
}
-inline Piece piece_of_color_and_type(Color c, PieceType pt) {
- return Piece((int(c) << 3) | int(pt));
-}
-
-inline SquareDelta pawn_push(Color c) {
- return (c == WHITE ? DELTA_N : DELTA_S);
-}
-
inline bool piece_type_is_ok(PieceType pt) {
return pt >= PAWN && pt <= KING;
}
}
inline char piece_type_to_char(PieceType pt) {
- return std::string(" PNBRQK")[pt];
-}
-
-inline PieceType piece_type_from_char(char c) {
- return PieceType(std::string(" PNBRQK").find(c));
+ static const char ch[] = " PNBRQK";
+ return ch[pt];
}
#endif // !defined(PIECE_H_INCLUDED)