X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fucioption.cpp;h=346fd42b89a5aa8a5ea988618e8640ce92b43e82;hb=d40a12f948590e280a4c0e874cb8a73b6b7929c2;hp=b1b849807ff507c792198a4855dc9d5d1b9a61c0;hpb=287556f97d54c87b3a973e22e133a9d09b62676f;p=stockfish
diff --git a/src/ucioption.cpp b/src/ucioption.cpp
index b1b84980..346fd42b 100644
--- a/src/ucioption.cpp
+++ b/src/ucioption.cpp
@@ -17,6 +17,7 @@
along with this program. If not, see .
*/
+#include
#include
#include
@@ -28,9 +29,28 @@ using std::string;
using std::cout;
using std::endl;
-OptionsMap Options;
+OptionsMap Options; // Global object
-// stringify() converts a value of type T to a std::string
+
+// Our case insensitive less() function as required by UCI protocol
+bool CaseInsensitiveLess::operator() (const string& s1, const string& s2) const {
+
+ int c1, c2;
+ size_t i = 0;
+
+ while (i < s1.size() && i < s2.size())
+ {
+ c1 = tolower(s1[i]);
+ c2 = tolower(s2[i++]);
+
+ if (c1 != c2)
+ return c1 < c2;
+ }
+ return s1.size() < s2.size();
+}
+
+
+// stringify() converts a numeric value of type T to a std::string
template
static string stringify(const T& v) {
@@ -74,9 +94,9 @@ void init_uci_options() {
Options["Minimum Split Depth"] = Option(4, 4, 7);
Options["Maximum Number of Threads per Split Point"] = Option(5, 4, 8);
Options["Threads"] = Option(1, 1, MAX_THREADS);
+ Options["Use Sleeping Threads"] = Option(false);
Options["Hash"] = Option(32, 4, 8192);
Options["Clear Hash"] = Option(false, "button");
- Options["New Game"] = Option(false, "button");
Options["Ponder"] = Option(true);
Options["OwnBook"] = Option(true);
Options["MultiPV"] = Option(1, 1, 500);
@@ -111,17 +131,11 @@ void print_uci_options() {
const Option& o = it->second;
cout << "\noption name " << it->first << " type " << o.type;
- if (o.type == "check")
- cout << " default " << (o.defaultValue == "1" ? "true" : "false");
- else if (o.type == "string")
+ if (o.type != "button")
cout << " default " << o.defaultValue;
- else if (o.type == "spin")
- {
- cout << " default " << o.defaultValue
- << " min " << o.minValue << " max " << o.maxValue;
- }
- else if (o.type != "button")
- assert(false);
+
+ if (o.type == "spin")
+ cout << " min " << o.minValue << " max " << o.maxValue;
break;
}
@@ -129,45 +143,36 @@ void print_uci_options() {
}
-// Option class c'tors
+/// Option class c'tors
-Option::Option(): type("UNDEFINED") {}
-
-Option::Option(const char* def, string t) : type(t), idx(Options.size()), minValue(0), maxValue(0)
+Option::Option(const char* def) : type("string"), idx(Options.size()), minValue(0), maxValue(0)
{ defaultValue = currentValue = def; }
Option::Option(bool def, string t) : type(t), idx(Options.size()), minValue(0), maxValue(0)
-{ defaultValue = currentValue = (def ? "1" : "0"); }
+{ defaultValue = currentValue = (def ? "true" : "false"); }
Option::Option(int def, int minv, int maxv) : type("spin"), idx(Options.size()), minValue(minv), maxValue(maxv)
{ defaultValue = currentValue = stringify(def); }
-// set_value() updates currentValue of the Option object to the passed value
+/// set_value() updates currentValue of the Option object. Normally it's up to
+/// the GUI to check for option's limits, but we could receive the new value
+/// directly from the user by teminal window. So let's check the bounds anyway.
void Option::set_value(const string& value) {
- assert(type != "UNDEFINED");
-
- // UCI protocol uses "true" and "false" instead of "1" and "0", so convert
- // value according to standard C++ convention before to store it.
- string v(value);
- if (v == "true")
- v = "1";
- else if (v == "false")
- v = "0";
+ assert(!type.empty());
- // Normally it's up to the GUI to check for option's limits,
- // but we could receive the new value directly from the user
- // by teminal window. So let's check the bounds anyway.
- if (type == "check" && v != "0" && v != "1")
+ if ( (type == "check" || type == "button")
+ && !(value == "true" || value == "false"))
return;
if (type == "spin")
{
- int val = atoi(v.c_str());
- if (val < minValue || val > maxValue)
+ int v = atoi(value.c_str());
+ if (v < minValue || v > maxValue)
return;
}
- currentValue = v;
+
+ currentValue = value;
}