diff --git a/bitboard/src/library.rs b/bitboard/src/library.rs index c878f8f..6a60392 100644 --- a/bitboard/src/library.rs +++ b/bitboard/src/library.rs @@ -60,16 +60,8 @@ pub(crate) const LIGHT_SQUARES: BitBoard = pub(crate) const DARK_SQUARES: BitBoard = BitBoard(!LIGHT_SQUARES.0); pub(super) fn library() -> &'static MoveLibrary { - static mut MOVE_LIBRARY: OnceLock = OnceLock::new(); - - unsafe { - MOVE_LIBRARY.get_or_init(|| { - let mut library = MoveLibrary::new(); - library.init(); - - library - }) - } + static MOVE_LIBRARY: MoveLibraryWrapper = MoveLibraryWrapper::new(); + MOVE_LIBRARY.library() } macro_rules! library_getter { @@ -80,6 +72,26 @@ macro_rules! library_getter { }; } +struct MoveLibraryWrapper { + library: OnceLock, +} + +impl MoveLibraryWrapper { + const fn new() -> Self { + Self { + library: OnceLock::::new(), + } + } + + fn library(&self) -> &MoveLibrary { + self.library.get_or_init(|| { + let mut library = MoveLibrary::new(); + library.init(); + library + }) + } +} + #[derive(Debug)] pub(super) struct MoveLibrary { // Rays