6 #define NO_SAFE_MOVE_ACTION_IN_LIBOSL
7 #define SIMPLE_STATE_ONLY
13 #ifdef NO_SAFE_MOVE_ACTION_IN_LIBOSL
22 #ifndef SIMPLE_STATE_ONLY
23 # include "osl/boardBitEffect.h"
24 # include "osl/evalHashEffectState.h"
25 # include "osl/numEffectState.h"
28 #include "osl/applyMove.h"
30 #include "osl/move_action/safeFilter.h"
31 #include "osl/perfmon.h"
36 using namespace osl::move_generator;
37 using namespace osl::move_action;
42 template<Player P,
typename State,
bool isAttack,
bool withEffect>
45 template<
class State, Player P,
bool isAttack,
bool withEffect>
55 assert(move!=MOVE_INVALID);
56 nextMoves<P,State,isAttack,withEffect>(state,level,move);
60 template <Player P,
typename State,
bool isAttack,
bool withEffect>
63 typedef typename State::effect_state_t effect_t;
68 helper_t helper(state, level+1);
73 typedef SafeFilter<P,typename State::effect_state_t,Store> action_t;
74 action_t safeAction(state,store);
76 =state.template kingSquare<PlayerTraits<P>::opponent>();
78 if (state.hasEffectAt(P,opKingSquare))
81 assert(!state.hasEffectAt(P,opKingSquare));
100 size_t size=moves.size();
101 for(
size_t i=0;i<size;i++){
104 helper.move=moves[i];
105 ApplyMove<P>::doUndoMove(state,moves[i],helper);
109 int main(
int argc,
char **argv){
110 bool effectMode=
false;
114 bool withEffectMode=
false;
115 bool simpleMode=
false;
116 bool boardBitMode=
false;
121 while ((c = getopt(argc, argv,
"l:dehEnwsb")) != EOF)
125 case 'l': level=atoi(optarg);
127 case 'e': effectMode=
true;
129 case 'h': hashMode=
true;
131 case 'E': evalMode=
true;
133 case 'n': nullMode=
true;
135 case 'w': withEffectMode=
true;
137 case 's': simpleMode=
true;
139 case 'b': boardBitMode=
true;
142 std::cerr <<
"unknown option\n";
146 SimpleState state=CsaString(
147 "P1-KY * * * -KY * -FU-KE * \n"
148 "P2 * * * * -OU * * * * \n"
149 "P3 * * * -FU-FU+RY * * -KY\n"
150 "P4-FU * * -GI * * * * * \n"
151 "P5 * * * * * * * * * \n"
152 "P6+FU * * +RY * * +FU * * \n"
153 "P7 * +FU * +FU+FU+FU * * * \n"
154 "P8 * * +OU * -TO * * * * \n"
155 "P9+KY * * * * * * +KE * \n"
156 "P+00KI00GI00GI00GI00KE00KE00FU00FU00FU00KI\n"
157 "P-00KA00KA00KI00FU00FU00FU00FU00KI\n"
158 "-\n").getInitialState();
163 #ifndef SIMPLE_STATE_ONLY
166 std::cerr <<
"evalMode" << std::endl;
167 NumEffectState neState(state);
168 HashEffectState hState(neState);
169 EvalHashEffectState eState(hState);
171 Move lastMove=newMove(newSquare(4,4),newSquare(4,3),
PROOK,
175 nextMoves<WHITE,EvalHashEffectState,false,true>(eState,0,lastMove);
177 nextMoves<WHITE,EvalHashEffectState,false,false>(eState,0,lastMove);
181 std::cerr <<
"hashMode" << std::endl;
182 NumEffectState neState(state);
183 HashEffectState hState(neState);
185 Move lastMove=newMove(newSquare(4,4),newSquare(4,3),
PROOK,
188 nextMoves<WHITE,HashEffectState,false,true>(hState,0,lastMove);
190 nextMoves<WHITE,HashEffectState,false,false>(hState,0,lastMove);
196 std::cerr <<
"effectMode" << std::endl;
197 NumEffectState neState(state);
198 Move lastMove=newMove(newSquare(4,4),newSquare(4,3),
PROOK,
201 nextMoves<WHITE,NumEffectState,false,true>(neState,0,lastMove);
203 nextMoves<WHITE,NumEffectState,false,false>(neState,0,lastMove);
208 std::cerr <<
"boardBitEffectMode" << std::endl;
209 typedef BoardBitEffect<SimpleState> effect_state_t;
210 effect_state_t neState(state);
211 Move lastMove=newMove(newSquare(4,4),newSquare(4,3),
PROOK,
213 nextMoves<WHITE,effect_state_t,false,true>(neState,0,lastMove);
218 std::cerr <<
"nullBoardEffectMode" << std::endl;
219 typedef NullBoardEffect<SimpleState> effect_state_t;
220 effect_state_t neState(state);
221 Move lastMove=newMove(newSquare(4,4),newSquare(4,3),
PROOK,
223 nextMoves<WHITE,effect_state_t,false,true>(neState,0,lastMove);
229 std::cerr <<
"nullBoardEffectMode" << std::endl;
230 typedef SimpleState effect_state_t;
231 effect_state_t neState(state);
232 Move lastMove=newMove(newSquare(4,4),newSquare(4,3),
PROOK,
234 nextMoves<WHITE,effect_state_t,false,true>(neState,0,lastMove);