Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
include
osl
effect_action
promote.h
Go to the documentation of this file.
1
#ifndef _PROMOTE_MOVE_ACTION_H
2
#define _PROMOTE_MOVE_ACTION_H
3
#include "
osl/move_action/concept.h
"
4
namespace
osl
5
{
6
namespace
effect_action
7
{
11
template
<
class
Action>
12
class
Promote
13
{
14
BOOST_CLASS_REQUIRE
(Action,osl::move_action,Concept);
15
private
:
16
const
NumEffectState&
state
;
17
Action &
ac
;
18
public
:
19
Promote
(
const
NumEffectState& s, Action& a)
20
:
state
(s),
ac
(a)
21
{
22
}
23
template
<Player P,Ptype Type>
24
void
doActionPtype
(
Piece
p1,
Square
to){
25
Square
from=p1.
square
();
26
if
(p1.
isPromoted
())
27
ac
.unknownMove(from,to,
state
.pieceAt(to),
promote
(Type),
false
,P);
28
else
if
(to.
canPromote
<P>() || from.
canPromote
<P>())
29
ac
.unknownMove(from,to,
state
.pieceAt(to),
promote
(Type),
true
,P);
30
}
31
template
<Player P>
32
void
doAction
(
Piece
p1,
Square
to){
33
Square
from=p1.
square
();
34
Ptype
ptype=p1.
ptype
();
35
if
(p1.
isPromoted
())
36
ac
.unknownMove(from,to,
state
.pieceAt(to),ptype,
false
,P);
37
else
if
(to.
canPromote
<P>() || from.
canPromote
<P>())
38
ac
.unknownMove(from,to,
state
.pieceAt(to),
promote
(ptype),
true
,P);
39
}
40
bool
done
()
const
{
return
false
;}
41
};
42
}
// namespace effect_action
43
}
// namespace osl
44
#endif
45
// ;;; Local Variables:
46
// ;;; mode:c++
47
// ;;; c-basic-offset:2
48
// ;;; End:
Generated on Sun Jul 21 2013 13:37:26 by
1.8.4