|  | @@ -0,0 +1,29 @@
 | 
	
		
			
				|  |  | +use crate::{bitboard::*, movegen::ROOK};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +mod tables;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +use self::tables::*;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +pub fn magic_bishop(s: Square, occ: Bitboard) -> Bitboard {
 | 
	
		
			
				|  |  | +    let bits = &BISHOP_BITS[s as usize];
 | 
	
		
			
				|  |  | +    let (mask, magic) = &BISHOP_MASKS_AND_MAGICS[s as usize];
 | 
	
		
			
				|  |  | +    //println!("piece:\n{}", print_board(1_u64 << s));
 | 
	
		
			
				|  |  | +    //println!("mask:\n{}", print_board(mask));
 | 
	
		
			
				|  |  | +    let idx = magic.wrapping_mul(occ & mask).wrapping_shr((64 - bits) as u32);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // workaround to make program not crash in debug mode
 | 
	
		
			
				|  |  | +    *(&BISHOP_TABLES[s as usize][idx as usize])
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +pub fn magic_rook(s: Square, occ: Bitboard) -> Bitboard {
 | 
	
		
			
				|  |  | +    let bits = &ROOK_BITS[s as usize];
 | 
	
		
			
				|  |  | +    let (mask, magic) = &ROOK_MASKS_AND_MAGICS[s as usize];
 | 
	
		
			
				|  |  | +    let idx = magic.wrapping_mul(occ & mask).wrapping_shr((64 - bits) as u32);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //println!("piece:\n{}", print_board(1_u64 << s));
 | 
	
		
			
				|  |  | +    //println!("mask:\n{}", print_board(*mask));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // workaround to make program not crash in debug mode
 | 
	
		
			
				|  |  | +    *(&ROOK_TABLES[s as usize][idx as usize])
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |