00001
00002
00003 #ifndef _SEE_H
00004 #define _SEE_H
00005
00006 #include "osl/state/numEffectState.h"
00007 #include "osl/container/ptypeOPositionVector.h"
00008 namespace osl
00009 {
00010 namespace eval
00011 {
00012 struct See
00013 {
00014 static int see(const NumEffectState& state, Move move,
00015 const PieceMask& my_pin=PieceMask(), const PieceMask& op_pin=PieceMask());
00016
00017
00018 template <Player P>
00019 static int seeInteral(const NumEffectState& state, Move move,
00020 const PieceMask& my_pin, const PieceMask& op_pin);
00021 template <Player P>
00022 static void findEffectPieces(const NumEffectState& state, Position effect_to,
00023 const PieceMask& my_pin, const PieceMask& op_pin,
00024 PtypeOPositionVector& my_pieces, PtypeOPositionVector& op_pieces);
00025 template <osl::Player P>
00026 static void findEffectPiecesAfterMove(const NumEffectState& state, Move move,
00027 const PieceMask& my_pin, const PieceMask& op_pin,
00028 PtypeOPositionVector& my_pieces, PtypeOPositionVector& op_pieces);
00029 static void findAdditionalPieces(const NumEffectState& state, Player attack, Position target,
00030 PtypeO direct_attack, Position direct_attack_from,
00031 PtypeOPositionVector& out);
00038 template <Player P>
00039 static int computeValue(Position target, PtypeO ptypeO,
00040 const PtypeOPositionVector& my_pieces,
00041 const PtypeOPositionVector& op_pieces);
00042 struct StorePtypeO;
00043 struct FindEffectMore;
00044
00045 };
00046 };
00047 using eval::See;
00048 }
00049
00050 #endif
00051
00052
00053
00054