|
|
@ -3,45 +3,51 @@ |
|
|
|
//! and EngineOption tries to be flexible so it can be reused for each option, which also maintaining some
|
|
|
|
//! and EngineOption tries to be flexible so it can be reused for each option, which also maintaining some
|
|
|
|
//! of the nicer parts of typechecking.
|
|
|
|
//! of the nicer parts of typechecking.
|
|
|
|
|
|
|
|
|
|
|
|
/// Represents the hash option
|
|
|
|
use std::collections::HashMap; |
|
|
|
pub const HASH: &'static str = "Hash"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Represents the Nalimov Path option
|
|
|
|
pub mod constants { |
|
|
|
pub const NALIMOVPATH: &'static str = "NalimovPath"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Represents the Nalimov Cache option
|
|
|
|
/// Represents the hash option
|
|
|
|
pub const NALIMOVCACHE: &'static str = "NalimovCache"; |
|
|
|
pub const HASH: &'static str = "Hash"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the ponder option
|
|
|
|
/// Represents the Nalimov Path option
|
|
|
|
pub const PONDER: &'static str = "Ponder"; |
|
|
|
pub const NALIMOVPATH: &'static str = "NalimovPath"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the OwnBook option
|
|
|
|
/// Represents the Nalimov Cache option
|
|
|
|
pub const OWNBOOK: &'static str = "OwnBook"; |
|
|
|
pub const NALIMOVCACHE: &'static str = "NalimovCache"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the MultiPV option
|
|
|
|
/// Represents the ponder option
|
|
|
|
pub const MULTIPV: &'static str = "MultiPV"; |
|
|
|
pub const PONDER: &'static str = "Ponder"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_ShowCurrLine option
|
|
|
|
/// Represents the OwnBook option
|
|
|
|
pub const UCISHOWCURRLINE: &'static str = "UCI_ShowCurrLine"; |
|
|
|
pub const OWNBOOK: &'static str = "OwnBook"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_Refutations option
|
|
|
|
/// Represents the MultiPV option
|
|
|
|
pub const UCISHOWREFUTATIONS: &'static str = "UCI_ShowRefutations"; |
|
|
|
pub const MULTIPV: &'static str = "MultiPV"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_LimitStrength option
|
|
|
|
/// Represents the UCI_ShowCurrLine option
|
|
|
|
pub const UCISHOWREFUTATIONS: &'static str = "UCI_LimitStrength"; |
|
|
|
pub const UCISHOWCURRLINE: &'static str = "UCI_ShowCurrLine"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_Elo option
|
|
|
|
/// Represents the UCI_Refutations option
|
|
|
|
pub const UCIELO: &'static str = "UCI_Elo"; |
|
|
|
pub const UCISHOWREFUTATIONS: &'static str = "UCI_ShowRefutations"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_AnalysisMode option
|
|
|
|
/// Represents the UCI_LimitStrength option
|
|
|
|
pub const UCIANALYSISMODE: &'static str = "UCI_AnalysisMode"; |
|
|
|
pub const UCILIMITSTRENGTH: &'static str = "UCI_LimitStrength"; |
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_Opponent option
|
|
|
|
/// Represents the UCI_Elo option
|
|
|
|
pub const UCIOPPONENT: &'static str = "UCI_Opponent"; |
|
|
|
pub const UCIELO: &'static str = "UCI_Elo"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_AnalysisMode option
|
|
|
|
|
|
|
|
pub const UCIANALYSISMODE: &'static str = "UCI_AnalysisMode"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Represents the UCI_Opponent option
|
|
|
|
|
|
|
|
pub const UCIOPPONENT: &'static str = "UCI_Opponent"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug)] |
|
|
|
|
|
|
|
/// The `EngineOptionType` type used to indicate what type of option the GUI should display
|
|
|
|
/// The `EngineOptionType` type used to indicate what type of option the GUI should display
|
|
|
|
enum EngineOptionType { |
|
|
|
#[derive(Copy, Debug, Eq)] |
|
|
|
|
|
|
|
pub enum EngineOptionType { |
|
|
|
Check, |
|
|
|
Check, |
|
|
|
Spin, |
|
|
|
Spin, |
|
|
|
Combo, |
|
|
|
Combo, |
|
|
@ -49,42 +55,45 @@ enum EngineOptionType { |
|
|
|
TypeString, // `String` is a reserved word so `TypeString` is substituted
|
|
|
|
TypeString, // `String` is a reserved word so `TypeString` is substituted
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug)] |
|
|
|
#[derive(Copy, Debug, PartialEq, PartialOrd)] |
|
|
|
|
|
|
|
/// The `EngineOptionData` makes the data type generic so one `EngineOption` can represent everything
|
|
|
|
|
|
|
|
/// This would be set to the type of the engine option (ex. i32)
|
|
|
|
|
|
|
|
pub enum EngineOptionData { |
|
|
|
|
|
|
|
Int(i32), |
|
|
|
|
|
|
|
Float(f64), |
|
|
|
|
|
|
|
Text(String), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Hash, PartialEq)] |
|
|
|
/// The `EngineOptionDataType` type used to indicate the type of the `EngineOption` setting
|
|
|
|
/// The `EngineOptionDataType` type used to indicate the type of the `EngineOption` setting
|
|
|
|
enum EngineOptionDataType { |
|
|
|
pub enum EngineOptionDataType { |
|
|
|
DefaultVal, // `Default` is reserved so `DefaultVal` is used
|
|
|
|
DefaultVal, // `Default` is reserved so `DefaultVal` is used
|
|
|
|
Min, |
|
|
|
Min, |
|
|
|
Max, |
|
|
|
Max, |
|
|
|
Var, |
|
|
|
Var, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug)] |
|
|
|
|
|
|
|
/// The `EngineOptionDataValue` makes the data type generic so one `EngineOption` can represent everything
|
|
|
|
|
|
|
|
/// This would be set to the type of the engine option (ex. i32)
|
|
|
|
|
|
|
|
struct EngineOptionDataValue<T> { |
|
|
|
|
|
|
|
value: T, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq)] |
|
|
|
#[derive(Debug, PartialEq)] |
|
|
|
/// The `EngineOption` type is the overarching type representing a single configurable engine option
|
|
|
|
/// The `EngineOption` type is the overarching type representing a single configurable engine option
|
|
|
|
struct EngineOption<T> { |
|
|
|
pub struct EngineOption { |
|
|
|
name: &'static str, |
|
|
|
pub name: &'static str, |
|
|
|
option_type: EngineOptionType, |
|
|
|
pub option_type: EngineOptionType, |
|
|
|
option_data: HashMap<EngineOptionDataType, EngineOptionDataValue<T>>, |
|
|
|
pub option_data: HashMap<EngineOptionDataType, EngineOptionData>, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
impl PartialEq for EngineOption { |
|
|
|
impl EngineOption { |
|
|
|
pub fn eq(&self, other: EngineOption) { |
|
|
|
|
|
|
|
// TODO: Implement equality on the EngineOption struct and write tests for it.
|
|
|
|
/// Constructs a new EngineOption of type T
|
|
|
|
|
|
|
|
pub fn new(name: &'static str, option_type: EngineOptionType, |
|
|
|
|
|
|
|
option_data: HashMap<EngineOptionDataType, EngineOptionData>) -> EngineOption { |
|
|
|
|
|
|
|
EngineOption { name, option_type, option_data } |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
impl EngineOption { |
|
|
|
|
|
|
|
pub fn option_string(&self) -> String { |
|
|
|
pub fn option_string(&self) -> String { |
|
|
|
// TODO: Implement this to save this when looping through and sending options
|
|
|
|
// TODO: Implement this to save this when looping through and sending options
|
|
|
|
// TODO: This should be tested in isolation as well
|
|
|
|
// TODO: This should be tested in isolation as well
|
|
|
|
// This should handle the case where optional min max var are specified as well.
|
|
|
|
// This should handle the case where optional min max var are specified as well.
|
|
|
|
// pattern match the engine option type and convert it to the correct string.
|
|
|
|
// pattern match the engine option type and convert it to the correct string.
|
|
|
|
format!("PUT THE FULL COMMAND STRING HERE!"); |
|
|
|
format!("PUT THE FULL COMMAND STRING HERE!") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|