Skip to content

Commit

Permalink
Retire notation.cpp
Browse files Browse the repository at this point in the history
Now we can finally retire notation.cpp
and move UCI helpers under uci.cpp

No functional change.
  • Loading branch information
mcostalba authored and zamar committed Oct 26, 2014
1 parent 2469dae commit 9ba391c
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 107 deletions.
4 changes: 2 additions & 2 deletions src/Makefile
Expand Up @@ -39,8 +39,8 @@ PGOBENCH = ./$(EXE) bench 32 1 1 default time

### Object files
OBJS = benchmark.o bitbase.o bitboard.o endgame.o evaluate.o main.o \
material.o misc.o movegen.o movepick.o notation.o pawns.o \
position.o search.o thread.o timeman.o tt.o uci.o ucioption.o
material.o misc.o movegen.o movepick.o pawns.o position.o \
search.o thread.o timeman.o tt.o uci.o ucioption.o

### ==========================================================================
### Section 2. High-level Configuration
Expand Down
103 changes: 0 additions & 103 deletions src/notation.cpp

This file was deleted.

76 changes: 76 additions & 0 deletions src/uci.cpp
Expand Up @@ -23,6 +23,7 @@
#include <string>

#include "evaluate.h"
#include "movegen.h"
#include "position.h"
#include "search.h"
#include "thread.h"
Expand Down Expand Up @@ -212,3 +213,78 @@ void UCI::loop(int argc, char* argv[]) {

Threads.wait_for_think_finished(); // Cannot quit whilst the search is running
}


/// format_value() converts a Value to a string suitable for use with the UCI
/// protocol specifications:
///
/// cp <x> The score from the engine's point of view in centipawns.
/// mate <y> Mate in y moves, not plies. If the engine is getting mated
/// use negative values for y.

string UCI::format_value(Value v, Value alpha, Value beta) {

stringstream ss;

if (abs(v) < VALUE_MATE_IN_MAX_PLY)
ss << "cp " << v * 100 / PawnValueEg;
else
ss << "mate " << (v > 0 ? VALUE_MATE - v + 1 : -VALUE_MATE - v) / 2;

ss << (v >= beta ? " lowerbound" : v <= alpha ? " upperbound" : "");

return ss.str();
}


/// format_square() converts a Square to a string (g1, a7, etc.)

std::string UCI::format_square(Square s) {

char ch[] = { 'a' + file_of(s), '1' + rank_of(s), 0 }; // Zero-terminating
return ch;
}


/// format_move() converts a Move to a string in coordinate notation
/// (g1f3, a7a8q, etc.). The only special case is castling moves, where we print
/// in the e1g1 notation in normal chess mode, and in e1h1 notation in chess960
/// mode. Internally castling moves are always encoded as "king captures rook".

string UCI::format_move(Move m, bool chess960) {

Square from = from_sq(m);
Square to = to_sq(m);

if (m == MOVE_NONE)
return "(none)";

if (m == MOVE_NULL)
return "0000";

if (type_of(m) == CASTLING && !chess960)
to = make_square(to > from ? FILE_G : FILE_C, rank_of(from));

string move = format_square(from) + format_square(to);

if (type_of(m) == PROMOTION)
move += " pnbrqk"[promotion_type(m)];

return move;
}


/// to_move() takes a position and a string representing a move in
/// simple coordinate notation and returns an equivalent legal Move if any.

Move UCI::to_move(const Position& pos, string& str) {

if (str.length() == 5) // Junior could send promotion piece in uppercase
str[4] = char(tolower(str[4]));

for (MoveList<LEGAL> it(pos); *it; ++it)
if (str == format_move(*it, pos.is_chess960()))
return *it;

return MOVE_NONE;
}
4 changes: 2 additions & 2 deletions src/uci.h
Expand Up @@ -67,10 +67,10 @@ class Option {
void init(OptionsMap&);
void loop(int argc, char* argv[]);

Move to_move(const Position& pos, std::string& str);
std::string format_move(Move m, bool chess960);
std::string format_value(Value v, Value alpha = -VALUE_INFINITE, Value beta = VALUE_INFINITE);
std::string format_square(Square s);
std::string format_move(Move m, bool chess960);
Move to_move(const Position& pos, std::string& str);

} // namespace UCI

Expand Down

0 comments on commit 9ba391c

Please sign in to comment.