[moves] Clean up implementation of Move and export Kind enum
This commit is contained in:
		
							parent
							
								
									9010f1e9c2
								
							
						
					
					
						commit
						6816e350eb
					
				
					 4 changed files with 16 additions and 16 deletions
				
			
		|  | @ -9,3 +9,4 @@ edition = "2021" | |||
| chessfriend_bitboard = { path = "../bitboard" } | ||||
| chessfriend_board = { path = "../board" } | ||||
| chessfriend_core = { path = "../core" } | ||||
| thiserror = "2" | ||||
|  |  | |||
|  | @ -2,8 +2,9 @@ | |||
| 
 | ||||
| use chessfriend_core::Shape; | ||||
| 
 | ||||
| #[repr(u16)] | ||||
| #[derive(Clone, Copy, Debug, Eq, PartialEq)] | ||||
| pub(crate) enum Kind { | ||||
| pub enum Kind { | ||||
|     Quiet = 0b0000, | ||||
|     DoublePush = 0b0001, | ||||
|     KingSideCastle = 0b0010, | ||||
|  | @ -14,12 +15,6 @@ pub(crate) enum Kind { | |||
|     CapturePromotion = 0b1100, | ||||
| } | ||||
| 
 | ||||
| impl Kind { | ||||
|     fn is_reversible(self) -> bool { | ||||
|         (self as u16) & 0b1100 == 0 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[repr(u16)] | ||||
| #[derive(Copy, Clone, Debug, Eq, PartialEq)] | ||||
| pub enum PromotionShape { | ||||
|  |  | |||
|  | @ -7,5 +7,5 @@ mod defs; | |||
| mod moves; | ||||
| 
 | ||||
| pub use builder::{Builder, Error as BuildMoveError, Result as BuildMoveResult}; | ||||
| pub use defs::PromotionShape; | ||||
| pub use defs::{Kind, PromotionShape}; | ||||
| pub use moves::Move; | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| // Eryn Wells <eryn@erynwells.me>
 | ||||
| 
 | ||||
| use crate::builder::Builder; | ||||
| use crate::defs::Kind; | ||||
| use chessfriend_board::castle::Castle; | ||||
| use chessfriend_core::{Rank, Shape, Square}; | ||||
|  | @ -57,7 +58,7 @@ impl Move { | |||
| 
 | ||||
|     #[must_use] | ||||
|     pub fn is_castle(&self) -> bool { | ||||
|         self.castle().is_some() | ||||
|         (self.0 & 0b0010) != 0 | ||||
|     } | ||||
| 
 | ||||
|     #[must_use] | ||||
|  | @ -71,17 +72,17 @@ impl Move { | |||
| 
 | ||||
|     #[must_use] | ||||
|     pub fn is_capture(&self) -> bool { | ||||
|         (self.0 & 0b0100) != 0 | ||||
|         (self.0 & Kind::Capture as u16) != 0 | ||||
|     } | ||||
| 
 | ||||
|     #[must_use] | ||||
|     pub fn is_en_passant(&self) -> bool { | ||||
|         self.flags() == 0b0101 | ||||
|         self.0 == Kind::EnPassantCapture as u16 | ||||
|     } | ||||
| 
 | ||||
|     #[must_use] | ||||
|     pub fn is_promotion(&self) -> bool { | ||||
|         (self.0 & 0b1000) != 0 | ||||
|         (self.0 & Kind::Promotion as u16) != 0 | ||||
|     } | ||||
| 
 | ||||
|     #[must_use] | ||||
|  | @ -113,7 +114,7 @@ impl Move { | |||
| } | ||||
| 
 | ||||
| impl Move { | ||||
|     fn _transfer_char(self) -> char { | ||||
|     fn transfer_char(self) -> char { | ||||
|         if self.is_capture() || self.is_en_passant() { | ||||
|             'x' | ||||
|         } else { | ||||
|  | @ -122,18 +123,21 @@ impl Move { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| const KINGSIDE_CASTLE_STR: &str = "0-0"; | ||||
| const QUEENSIDE_CASTLE_STR: &str = "0-0-0"; | ||||
| 
 | ||||
| impl fmt::Display for Move { | ||||
|     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||||
|         if let Some(castle) = self.castle() { | ||||
|             return match castle { | ||||
|                 Castle::KingSide => write!(f, "0-0"), | ||||
|                 Castle::QueenSide => write!(f, "0-0-0"), | ||||
|                 Castle::KingSide => write!(f, "{KINGSIDE_CASTLE_STR}"), | ||||
|                 Castle::QueenSide => write!(f, "{QUEENSIDE_CASTLE_STR}"), | ||||
|             }; | ||||
|         } | ||||
| 
 | ||||
|         let origin = self.origin_square(); | ||||
|         let target = self.target_square(); | ||||
|         let transfer_char = self._transfer_char(); | ||||
|         let transfer_char = self.transfer_char(); | ||||
|         write!(f, "{origin}{transfer_char}{target}")?; | ||||
| 
 | ||||
|         if let Some(promotion) = self.promotion() { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue