2 Copyright (c) 2007 Paolo Capriotti <p.capriotti@gmail.com>
3 (c) 2007 Maurizio Monge <maurizio.monge@kdemail.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
11 #ifndef HLVARIANT__ICSAPI_WRAPPED_H
12 #define HLVARIANT__ICSAPI_WRAPPED_H
15 #include "tagua_wrapped.h"
19 template <typename Variant
>
20 class WrappedICSAPI
: public ICSAPI
{
22 virtual PositionPtr
createChessboard(int, bool, bool, bool, bool, const Point
&);
23 virtual PiecePtr
createPiece(const QString
& description
);
24 virtual MovePtr
parseVerbose(const QString
& str
, const PositionPtr
& ref
);
29 template <typename Variant
>
30 PositionPtr WrappedICSAPI
<Variant
>::createChessboard(
36 const Point
& enPassant
) {
37 return PositionPtr(new WrappedPosition
<Variant
>(
38 typename VariantData
<Variant
>::GameState(
39 static_cast<typename VariantData
<Variant
>::Piece::Color
>(turn
),
47 template <typename Variant
>
48 PiecePtr WrappedICSAPI
<Variant
>::createPiece(const QString
& description
) {
49 return PiecePtr(new WrappedPiece
<Variant
>(
50 VariantData
<Variant
>::Piece::fromDescription(description
)));
53 template <typename Variant
>
54 MovePtr WrappedICSAPI
<Variant
>::parseVerbose(const QString
& str
, const PositionPtr
& _ref
) {
58 WrappedPosition
<Variant
>* ref
= dynamic_cast<WrappedPosition
<Variant
>*>(_ref
.get());
60 typename VariantData
<Variant
>::Serializer
serializer("ics-verbose");
61 return MovePtr(new WrappedMove
<Variant
>(
62 serializer
.deserialize(str
, ref
->inner())));
65 MISMATCH(*_ref
.get(), WrappedPosition
<Variant
>);
71 * Helper metafunction to create a null ICSAPI object
72 * if the variant does not support ICS.
74 template <typename Variant
, bool hasICS
>
75 struct ReturnICSAPIAux
{ };
77 template <typename Variant
>
78 struct ReturnICSAPIAux
<Variant
, true> {
79 static ICSAPI
* apply() {
80 return new WrappedICSAPI
<Variant
>();
84 template <typename Variant
>
85 struct ReturnICSAPIAux
<Variant
, false> {
86 static ICSAPI
* apply() { return 0; }
89 template <typename Variant
>
91 : public ReturnICSAPIAux
<Variant
, Variant::hasICS
> { };
97 #endif // HLVARIANT__ICSAPI_WRAPPED_H