mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-23 18:46:59 +08:00
Add user-defined conversions to UCIOption
Greatly improves the usage. User defined conversions are a novelity for SF, another amazing C++ facility at work ! No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -35,10 +35,19 @@ public:
|
||||
UCIOption(bool v, std::string type = "check");
|
||||
UCIOption(int v, int min, int max);
|
||||
|
||||
template<typename T> T value() const;
|
||||
void operator=(const std::string& v);
|
||||
void operator=(bool v) { *this = std::string(v ? "true" : "false"); }
|
||||
|
||||
operator int() const {
|
||||
assert(type == "check" || type == "button" || type == "spin");
|
||||
return (type == "spin" ? atoi(currentValue.c_str()) : currentValue == "true");
|
||||
}
|
||||
|
||||
operator std::string() const {
|
||||
assert(type == "string");
|
||||
return currentValue;
|
||||
}
|
||||
|
||||
private:
|
||||
friend std::ostream& operator<<(std::ostream&, const OptionsMap&);
|
||||
|
||||
@@ -48,29 +57,6 @@ private:
|
||||
};
|
||||
|
||||
|
||||
/// UCIOption::value() definition and specializations
|
||||
template<typename T>
|
||||
T UCIOption::value() const {
|
||||
|
||||
assert(type == "spin");
|
||||
return T(atoi(currentValue.c_str()));
|
||||
}
|
||||
|
||||
template<>
|
||||
inline std::string UCIOption::value<std::string>() const {
|
||||
|
||||
assert(type == "string");
|
||||
return currentValue;
|
||||
}
|
||||
|
||||
template<>
|
||||
inline bool UCIOption::value<bool>() const {
|
||||
|
||||
assert(type == "check" || type == "button");
|
||||
return currentValue == "true";
|
||||
}
|
||||
|
||||
|
||||
/// Custom comparator because UCI options should be case insensitive
|
||||
struct CaseInsensitiveLess {
|
||||
bool operator() (const std::string&, const std::string&) const;
|
||||
|
||||
Reference in New Issue
Block a user