-
-////
-//// Prototypes
-////
-
-extern int generate_captures(const Position &pos, MoveStack *mlist);
-extern int generate_noncaptures(const Position &pos, MoveStack *mlist);
-extern int generate_checks(const Position &pos, MoveStack *mlist, Bitboard dc);
-extern int generate_evasions(const Position &pos, MoveStack *mlist);
-extern int generate_legal_moves(const Position &pos, MoveStack *mlist);
-extern Move generate_move_if_legal(const Position &pos, Move m, Bitboard pinned);
+enum MoveType {
+ MV_CAPTURE,
+ MV_NON_CAPTURE,
+ MV_CHECK,
+ MV_NON_CAPTURE_CHECK,
+ MV_EVASION,
+ MV_NON_EVASION,
+ MV_LEGAL,
+ MV_PSEUDO_LEGAL
+};
+
+template<MoveType T>
+MoveStack* generate(const Position& pos, MoveStack* mlist);
+
+extern bool move_is_legal(const Position& pos, const Move m, Bitboard pinned);
+extern bool move_is_legal(const Position& pos, const Move m);