1 #ifndef HLVARIANT__ICSAPI_WRAPPED_H
2 #define HLVARIANT__ICSAPI_WRAPPED_H
5 #include "tagua_wrapped.h"
9 template <typename Variant
>
10 class WrappedICSAPI
: public ICSAPI
{
12 virtual PositionPtr
createChessboard(int, bool, bool, bool, bool, const Point
&);
13 virtual PiecePtr
createPiece(const QString
& description
);
18 template <typename Variant
>
19 PositionPtr WrappedICSAPI
<Variant
>::createChessboard(
25 const Point
& enPassant
) {
26 return PositionPtr(new WrappedPosition
<Variant
>(
27 typename VariantData
<Variant
>::GameState(
28 static_cast<typename VariantData
<Variant
>::Piece::Color
>(turn
),
36 template <typename Variant
>
37 PiecePtr WrappedICSAPI
<Variant
>::createPiece(const QString
& description
) {
38 return PiecePtr(new WrappedPiece
<Variant
>(
39 VariantData
<Variant
>::Piece::fromDescription(description
)));
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
>
63 : public ReturnICSAPIAux
<Variant
, Variant::hasICS
> { };
69 #endif // HLVARIANT__ICSAPI_WRAPPED_H