[bitboard] Use a OnceLock to hold the global BitBoard library instance

Thread safe and a single object instead of two!
This commit is contained in:
Eryn Wells 2024-02-05 13:59:26 -08:00
parent 4b35051deb
commit a8034c79aa

View file

@ -2,7 +2,7 @@
use crate::BitBoard;
use chessfriend_core::{Color, Direction, Square};
use std::sync::Once;
use std::sync::OnceLock;
pub(super) const RANKS: [BitBoard; 8] = [
BitBoard(0xFF << 0 * 8),
@ -42,15 +42,15 @@ pub(crate) const LIGHT_SQUARES: BitBoard =
pub(crate) const DARK_SQUARES: BitBoard = BitBoard(!LIGHT_SQUARES.0);
pub(super) fn library() -> &'static MoveLibrary {
static MOVE_LIBRARY_INIT: Once = Once::new();
static mut MOVE_LIBRARY: MoveLibrary = MoveLibrary::new();
static mut MOVE_LIBRARY: OnceLock<MoveLibrary> = OnceLock::new();
unsafe {
MOVE_LIBRARY_INIT.call_once(|| {
MOVE_LIBRARY.init();
});
MOVE_LIBRARY.get_or_init(|| {
let mut library = MoveLibrary::new();
library.init();
&MOVE_LIBRARY
library
})
}
}