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);