Promote OptionsMap to a class

And add a bit of documentation too.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2011-04-14 15:59:49 +02:00
parent 6056a43419
commit 786564068b
4 changed files with 74 additions and 69 deletions

View File

@@ -27,7 +27,7 @@
class Option {
public:
Option() {} // To allow insertion in a std::map
Option() {} // To be used in a std::map
Option(const char* defaultValue);
Option(bool defaultValue, std::string type = "check");
Option(int defaultValue, int minValue, int maxValue);
@@ -36,16 +36,33 @@ public:
template<typename T> T value() const;
private:
friend void init_uci_options();
friend std::string options_to_uci();
friend class OptionsMap;
std::string defaultValue, currentValue, type;
size_t idx;
int minValue, maxValue;
size_t idx;
};
/// Custom comparator because UCI options should not be case sensitive
struct CaseInsensitiveLess {
bool operator() (const std::string&, const std::string&) const;
};
/// Our options container is actually a map with a customized c'tor
class OptionsMap : public std::map<std::string, Option, CaseInsensitiveLess> {
public:
OptionsMap();
std::string print_all() const;
};
extern OptionsMap Options;
/// Option::value() definition and specializations
template<typename T>
inline T Option::value() const {
T Option::value() const {
assert(type == "spin");
return T(atoi(currentValue.c_str()));
@@ -65,16 +82,4 @@ inline bool Option::value<bool>() const {
return currentValue == "true";
}
// Custom comparator because UCI options should not be case sensitive
struct CaseInsensitiveLess {
bool operator() (const std::string&, const std::string&) const;
};
typedef std::map<std::string, Option, CaseInsensitiveLess> OptionsMap;
extern OptionsMap Options;
extern void init_uci_options();
extern std::string options_to_uci();
#endif // !defined(UCIOPTION_H_INCLUDED)