/** Displays bounds of every empty cell in current state.
    Bounds are obtained from the current hashtable. */
void DfpnCommands::CmdGetBounds(HtpCommand& cmd)
{
    cmd.CheckNuArg(1);
    HexColor colorToMove = HtpUtil::ColorArg(cmd, 0);
    HexState state(m_game.Board(), colorToMove);
    for (BitsetIterator it(state.Position().GetEmpty()); it; ++it)
    {
        state.PlayMove(*it);
        DfpnData data;
        if (m_positions.Get(state, data))
        {
            cmd << ' ' << *it << ' ';
            if (data.m_bounds.IsWinning())
                cmd << 'L';
            else if (data.m_bounds.IsLosing())
                cmd << 'W';
            else 
                cmd << data.m_bounds.phi << ':' << data.m_bounds.delta;
        }
        state.UndoMove(*it);
    }
}
void DfpnCommands::CmdEvaluationInfo(HtpCommand& cmd)
{
    cmd.CheckNuArg(0);
    cmd << m_solver.EvaluationInfo();
}
/** Prints histogram of last search. */
void DfsCommands::CmdHistogram(HtpCommand& cmd)
{
    cmd.CheckNuArg(0);
    cmd << m_solver.Histogram().Write();
}