Subversion Repositories Games.Chess Giants

Rev

Rev 169 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
  3.   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
  4.   Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
  5.   Copyright (C) 2015-2016 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
  6.  
  7.   Stockfish is free software: you can redistribute it and/or modify
  8.   it under the terms of the GNU General Public License as published by
  9.   the Free Software Foundation, either version 3 of the License, or
  10.   (at your option) any later version.
  11.  
  12.   Stockfish is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License
  18.   along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19. */
  20.  
  21. #ifndef UCI_H_INCLUDED
  22. #define UCI_H_INCLUDED
  23.  
  24. #include <map>
  25. #include <string>
  26.  
  27. #include "types.h"
  28.  
  29. class Position;
  30.  
  31. namespace UCI {
  32.  
  33. class Option;
  34.  
  35. /// Custom comparator because UCI options should be case insensitive
  36. struct CaseInsensitiveLess {
  37.   bool operator() (const std::string&, const std::string&) const;
  38. };
  39.  
  40. /// Our options container is actually a std::map
  41. typedef std::map<std::string, Option, CaseInsensitiveLess> OptionsMap;
  42.  
  43. /// Option class implements an option as defined by UCI protocol
  44. class Option {
  45.  
  46.   typedef void (*OnChange)(const Option&);
  47.  
  48. public:
  49.   Option(OnChange = nullptr);
  50.   Option(bool v, OnChange = nullptr);
  51.   Option(const char* v, OnChange = nullptr);
  52.   Option(int v, int min, int max, OnChange = nullptr);
  53.  
  54.   Option& operator=(const std::string&);
  55.   void operator<<(const Option&);
  56.   operator int() const;
  57.   operator std::string() const;
  58.  
  59. private:
  60.   friend std::ostream& operator<<(std::ostream&, const OptionsMap&);
  61.  
  62.   std::string defaultValue, currentValue, type;
  63.   int min, max;
  64.   size_t idx;
  65.   OnChange on_change;
  66. };
  67.  
  68. void init(OptionsMap&);
  69. void loop(int argc, char* argv[]);
  70. std::string value(Value v);
  71. std::string square(Square s);
  72. std::string move(Move m, bool chess960);
  73. std::string pv(const Position& pos, Depth depth, Value alpha, Value beta);
  74. Move to_move(const Position& pos, std::string& str);
  75.  
  76. } // namespace UCI
  77.  
  78. extern UCI::OptionsMap Options;
  79.  
  80. #endif // #ifndef UCI_H_INCLUDED
  81.