19   std::ostringstream os;
 
   21      << (same ? 
"=" : 
"!") << (promotable ? 
"p" : 
"-");
 
   26   std::ostringstream os;
 
   28      << (same ? 
"=" : 
"!");
 
   34   : 
Feature(name(d, s)+
"-"+t.name()), direction(d), self(s), 
target(t)
 
   44   assert(! diff.
zero());
 
   48   const Piece p = state.pieceAt(cur);
 
   50     return std::make_pair(p, cur);
 
   52   assert(cur.isOnBoard());
 
   54     return std::make_pair(p, cur); 
 
   55   return std::make_pair(state.pieceOnBoard(cur), cur); 
 
   62   return nextPieceOrEnd(state, start, diff);
 
   69   if (p.second == move.
from())
 
   70     p = nextPieceOrEnd(state, p.second, move.
player(), direction);
 
   76   std::ostringstream os;
 
   84   : 
Feature(name(d, s)+
"--"+t2.name()), direction(d), self(s), target2(t2)
 
   92   std::ostringstream os;
 
  100     self(s), attack(a), 
target(t)
 
  109     attack = state.findAttackAt<
LANCE>(
alt(state.turn()), move.
to());
 
  114   } 
else if (ap == 
BISHOP) {
 
  115     attack = state.findAttackAt<
BISHOP>(
alt(state.turn()), move.
to());
 
  120   } 
else if (ap == 
ROOK) {
 
  121     attack = state.findAttackAt<
ROOK>(
alt(state.turn()), move.
to());