#[cfg(feature = "records")]
mod builder;
mod control;
mod database;
mod error;
mod memory;
mod sbk;
mod solver;
mod static_book;
mod types;
mod writer;
mod ybb;
mod yaneuraou;
use crate::board::Position;
use crate::types::Move;
#[cfg(feature = "records")]
pub use builder::BookBuilder;
pub use control::BookControl;
pub use database::{
BookCandidate, BookDatabase, BookDatabaseEntry, BookEntryMetadata, BookMoveMetadata,
BookPosition, NativeBookConvertOptions, NativeScorePolicy, SbkEntryMetadata, SbkEvalMetadata,
SbkMoveMetadata, YaneuraOuEntryMetadata, YaneuraOuMoveMetadata,
};
pub use error::BookError;
pub use memory::MemoryBook;
pub use sbk::{
SbkBook, SbkDiagnostics, SbkEntries, SbkEntry, SbkEval, SbkMove, SbkOpenProgress,
SbkWriteOptions,
};
pub use solver::{PetaShockOptions, solve_peta_shock_book};
pub use static_book::StaticBook;
pub use types::{BookEntry, BookKey, BookMove};
pub use writer::YaneuraOuDb2016WriteOptions;
pub use yaneuraou::{
YaneuraOuAccessMode, YaneuraOuBook, YaneuraOuBookDiagnostics, YaneuraOuBookEntries,
YaneuraOuBookEntry, YaneuraOuBookMove, YaneuraOuBookOpenOptions, YaneuraOuValidationProgress,
};
pub use ybb::{YbbBook, YbbBookOpenOptions, YbbEntry, YbbMove};
pub trait Book {
fn get(&self, key: BookKey) -> Option<BookEntry<'_>>;
fn contains(&self, key: BookKey) -> bool {
self.get(key).is_some()
}
fn len(&self) -> usize;
fn is_empty(&self) -> bool {
self.len() == 0
}
}
#[must_use]
pub fn book_key_from_position(pos: &Position) -> BookKey {
let mut key = pos.board_key();
key.xor(pos.hand_key());
key
}
#[must_use]
pub fn book_key_after(pos: &Position, mv: Move) -> BookKey {
pos.key_after_move(mv)
}