Added legality checking to shogi.
[tagua/yd.git] / src / hlvariant / icsapi_wrapped.h
blob5824a1b49a7bc9582ff4604b4eebccba9d59d1b1
1 #ifndef HLVARIANT__ICSAPI_WRAPPED_H
2 #define HLVARIANT__ICSAPI_WRAPPED_H
4 #include "icsapi.h"
5 #include "tagua_wrapped.h"
7 namespace HLVariant {
9 template <typename Variant>
10 class WrappedICSAPI : public ICSAPI {
11 public:
12 virtual PositionPtr createChessboard(int, bool, bool, bool, bool, const Point&);
13 virtual PiecePtr createPiece(const QString& description);
16 // IMPLEMENTATION
18 template <typename Variant>
19 PositionPtr WrappedICSAPI<Variant>::createChessboard(
20 int turn,
21 bool wkCastle,
22 bool wqCastle,
23 bool bkCastle,
24 bool bqCastle,
25 const Point& enPassant) {
26 return PositionPtr(new WrappedPosition<Variant>(
27 typename VariantData<Variant>::GameState(
28 static_cast<typename VariantData<Variant>::Piece::Color>(turn),
29 wkCastle,
30 wqCastle,
31 bkCastle,
32 bqCastle,
33 enPassant)));
36 template <typename Variant>
37 PiecePtr WrappedICSAPI<Variant>::createPiece(const QString& description) {
38 return PiecePtr(new WrappedPiece<Variant>(
39 VariantData<Variant>::Piece::fromDescription(description)));
42 /**
43 * Helper metafunction to create a null ICSAPI object
44 * if the variant does not support ICS.
46 template <typename Variant, bool hasICS>
47 struct ReturnICSAPIAux { };
49 template <typename Variant>
50 struct ReturnICSAPIAux<Variant, true> {
51 static ICSAPI* apply() {
52 return new WrappedICSAPI<Variant>();
56 template <typename Variant>
57 struct ReturnICSAPIAux<Variant, false> {
58 static ICSAPI* apply() { return 0; }
61 template <typename Variant>
62 struct ReturnICSAPI
63 : public ReturnICSAPIAux<Variant, Variant::hasICS> { };
69 #endif // HLVARIANT__ICSAPI_WRAPPED_H