12 #ifdef SHOW_PROBE_COUNTER 
   19   return os << 
"[" << mp.
pos() << 
"," << mp.
ptypeO() <<  
"]";
 
   25   for(
int ptypeIndex=8;ptypeIndex<=15;ptypeIndex++)
 
   46   for(
size_t i=0;i<myOnboardPlus.size();++i){
 
   47     if(myOnboardPlus[i].posPtypeO==posPtypeO){
 
   48       myOnboardPlus[i]=myOnboardPlus[myOnboardPlus.size()-1];
 
   49       myOnboardPlus.pop_back();
 
   59   for(
size_t i=0;i<opOnboardMinus.size();++i){
 
   60     if(opOnboardMinus[i].posPtypeO==posPtypeO){
 
   61       opOnboardMinus[i]=opOnboardMinus[opOnboardMinus.size()-1];
 
   62       opOnboardMinus.pop_back();
 
   72   for(
size_t i=0;i<opOnboardPlus.size();++i){
 
   73     if(opOnboardPlus[i].posPtypeO==posPtypeO){
 
   74       opOnboardPlus[i]=opOnboardPlus[opOnboardPlus.size()-1];
 
   75       opOnboardPlus.pop_back();
 
   93     addStand(move.
ptype());
 
  103       addMyBoard(move.
to(),move.
ptypeO());
 
  111     addOpBoard(move.
to(),move.
ptypeO());
 
  112     subStand(move.
ptype());
 
  118       addOpBoard(move.
to(),move.
ptypeO());
 
  122       addOpBoard(move.
to(),move.
ptypeO());
 
  131 template<osl::Player P>
 
  140   if(fromPtypeO!=toPtypeO &&
 
  142       (!from.
canPromote<P>() && !to.canPromote<P>())))
 
  151     if(pos==to) 
return true;
 
  152     if(pos==moveTo) 
return false;
 
  155         for (pos+=o;; pos+=o) {
 
  156           if(pos==to) 
return true;
 
  157           if(pos==moveTo) 
return false;
 
  169 template<osl::Player P>
 
  178   if(to!=captureElement.
pos()) 
return false;
 
  182   if(fromPtypeO!=toPtypeO &&
 
  193     if(pos==to) 
return true;
 
  194     if(pos==moveTo) 
return false;
 
  197         for (pos+=o;; pos+=o) {
 
  198           if(pos==to) 
return true;
 
  199           if(pos==moveTo) 
return false;
 
  220 template<osl::Player P>
 
  224   switch(myOnboardPlus.size()){
 
  226     switch(opOnboardPlus.size()){
 
  228       if(opOnboardMinus.size()==1 && myOnboardMinus.size()==0){
 
  230         if(validSimpleMove<altP>(state,opOnboardPlus[0],opOnboardMinus[0],lastMove)){
 
  231           if(!mayRejectSennichite && stand.isZero()){
 
  234           return stand.geZero();
 
  239       if(opOnboardMinus.size()==1){
 
  240         if(myOnboardMinus.size()==0){
 
  245             localStand.
sub(ptype);
 
  246             if(!mayRejectSennichite && localStand.
isZero()){
 
  249             return localStand.
geZero();
 
  254         if(opOnboardMinus.size()==0 && myOnboardMinus.size()==0){
 
  255           if(isRootMove) 
return stand.gtZero();
 
  256           else return stand.geZero(); 
 
  260     default: 
return false;
 
  263     switch(myOnboardMinus.size()){
 
  265       switch(opOnboardMinus.size()){
 
  267         if(opOnboardPlus.size()==0){ 
 
  268           if(validCaptureMove<P>(state,myOnboardMinus[0],myOnboardPlus[0],opOnboardMinus[0],lastMove))
 
  274             localStand.
add(capturePtype);
 
  276               assert(actualMove.
player()==P);
 
  277               if(!mayRejectSennichite &&
 
  278                  actualMove.
ptypeO()==myOnboardPlus[0].ptypeO() &&
 
  279                  actualMove.
from()==myOnboardMinus[0].pos() &&
 
  280                  actualMove.
to()==myOnboardPlus[0].pos()) 
return false;
 
  283             return localStand.
geZero();
 
  288         if(opOnboardPlus.size()==0){ 
 
  289           if(validSimpleMove<P>(state,myOnboardMinus[0],myOnboardPlus[0],lastMove)){
 
  291               assert(actualMove.
player()==P);
 
  292               if(!mayRejectSennichite &&
 
  293                  actualMove.
ptypeO()==myOnboardPlus[0].ptypeO() &&
 
  294                  actualMove.
from()==myOnboardMinus[0].pos() &&
 
  295                  actualMove.
to()==myOnboardPlus[0].pos()) 
return false;
 
  298             return stand.geZero();
 
  304       if(opOnboardPlus.size()==1){
 
  305         if(opOnboardMinus.size()==1){
 
  306             if(validCaptureMove<altP>(state,opOnboardPlus[0],opOnboardMinus[0],myOnboardPlus[0],lastMove))
 
  311             localStand.
add(capturePtype);
 
  312             if(!mayRejectSennichite && localStand.
isZero()){
 
  315             return localStand.
geZero();
 
  320       else if(opOnboardPlus.size()==0 && opOnboardMinus.size()==0 
 
  324           localStand.
sub(
getPtype(myOnboardPlus[0].ptypeO()));
 
  326             if(!mayRejectSennichite &&
 
  327                actualMove.
ptypeO()==myOnboardPlus[0].ptypeO() &&
 
  329                actualMove.
to()==myOnboardPlus[0].pos()) 
return false;
 
  332           return localStand.
geZero();
 
  335   default: 
return false;
 
  342     os << 
"[ MyOnboardPlus(";
 
  348     os << 
"[ MyOnboardMinus(";
 
  354     os << 
"[ OpOnboardPlus(";
 
  360     os << 
"[ OpOnboardMinus(";
 
  365   return os << 
"Stand(" << mps.
stand << 
") ]\n" << std::endl;
 
  368 #ifdef SHOW_PROBE_COUNTER 
  370 #ifdef OSL_USE_RACE_DETECTOR 
  371   osl::LightMutex mutex;
 
  375   void incCheck(
int d){ 
 
  376 #ifdef OSL_USE_RACE_DETECTOR 
  377     osl::LightMutex::scoped_lock lk(mutex);
 
  382 #ifdef OSL_USE_RACE_DETECTOR 
  383     osl::LightMutex::scoped_lock lk(mutex);
 
  388     for(
int i=0;i<1024;i++){
 
  390         std::cerr << i << 
" : " << hit[i] << 
"/" << check[i] << std::endl;
 
  395 ProbeCounter probeCounter;
 
  398 template<osl::Player P>
 
  405   bool existNormal=
false;
 
  406   for(
int i=1;i<ply;i+=2){
 
  417         if(mayRejectSennichite) 
return true;
 
  428 #ifdef SHOW_PROBE_COUNTER 
  429     probeCounter.incCheck(i);
 
  434     bool isRootMove=(i == ply-1);
 
  437        elements.
canReject<P>(state,mayRejectSennichite,isRootMove,m,m2)
 
  439 #ifdef SHOW_PROBE_COUNTER 
  440       probeCounter.incHit(i);
 
  451     template bool MoveStackRejections::probe<BLACK>(
 
  453     template bool MoveStackRejections::probe<WHITE>(