mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-24 02:57:11 +08:00
Rewrite options handling in an object oriented fashion
Big rewrite and about 100 lines removed. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -17,25 +17,51 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(UCIOPTION_H_INCLUDED)
|
||||
#define UCIOPTION_H_INCLUDED
|
||||
|
||||
////
|
||||
//// Includes
|
||||
////
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
////
|
||||
//// Prototypes
|
||||
////
|
||||
class Option {
|
||||
public:
|
||||
Option(); // To allow insertion in a std::map
|
||||
Option(const char* defaultValue, std::string type = "string");
|
||||
Option(bool defaultValue, std::string type = "check");
|
||||
Option(int defaultValue, int minValue, int maxValue);
|
||||
|
||||
void set_value(const std::string& value);
|
||||
template<typename T> T value() const;
|
||||
|
||||
private:
|
||||
friend void init_uci_options();
|
||||
friend void print_uci_options();
|
||||
|
||||
std::string defaultValue, currentValue, type;
|
||||
size_t idx;
|
||||
int minValue, maxValue;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
inline T Option::value() const {
|
||||
|
||||
assert(type != "UNDEFINED");
|
||||
return T(atoi(currentValue.c_str()));
|
||||
}
|
||||
|
||||
template<>
|
||||
inline std::string Option::value<std::string>() const {
|
||||
|
||||
assert(type != "UNDEFINED");
|
||||
return currentValue;
|
||||
}
|
||||
|
||||
typedef std::map<std::string, Option> OptionsMap;
|
||||
|
||||
extern OptionsMap Options;
|
||||
extern void init_uci_options();
|
||||
extern void print_uci_options();
|
||||
extern bool get_option_value_bool(const std::string& optionName);
|
||||
extern int get_option_value_int(const std::string& optionName);
|
||||
extern std::string get_option_value_string(const std::string& optionName);
|
||||
extern void set_option_value(const std::string& optionName,const std::string& newValue);
|
||||
|
||||
#endif // !defined(UCIOPTION_H_INCLUDED)
|
||||
|
||||
Reference in New Issue
Block a user