[board] Implement BitAndAssign and BitOrAssign on BitBoard
This commit is contained in:
parent
808222eef1
commit
53dc80b6bb
1 changed files with 17 additions and 1 deletions
|
@ -3,7 +3,7 @@
|
|||
use super::BitScanner;
|
||||
use crate::Square;
|
||||
use std::fmt;
|
||||
use std::ops::{BitAnd, BitOr, Not};
|
||||
use std::ops::{BitAnd, BitAndAssign, BitOr, BitOrAssign, Not};
|
||||
|
||||
#[derive(Clone, Copy, Eq, Hash, PartialEq)]
|
||||
pub(crate) struct BitBoard(pub(super) u64);
|
||||
|
@ -89,13 +89,29 @@ macro_rules! infix_op {
|
|||
};
|
||||
}
|
||||
|
||||
macro_rules! assign_op {
|
||||
($trait_type:ident, $func_name:ident, $left_type:ty, $op:tt) => {
|
||||
impl $trait_type for $left_type {
|
||||
#[inline]
|
||||
fn $func_name(&mut self, rhs: Self) {
|
||||
self.0 $op rhs.0
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
infix_op!(BitAnd, bitand, BitBoard, BitBoard, &);
|
||||
infix_op!(BitAnd, bitand, &BitBoard, BitBoard, &);
|
||||
infix_op!(BitAnd, bitand, BitBoard, &BitBoard, &);
|
||||
infix_op!(BitAnd, bitand, &BitBoard, &BitBoard, &);
|
||||
|
||||
assign_op!(BitAndAssign, bitand_assign, BitBoard, &=);
|
||||
assign_op!(BitOrAssign, bitor_assign, BitBoard, |=);
|
||||
|
||||
infix_op!(BitOr, bitor, BitBoard, BitBoard, |);
|
||||
infix_op!(BitOr, bitor, &BitBoard, BitBoard, |);
|
||||
infix_op!(BitOr, bitor, BitBoard, &BitBoard, |);
|
||||
infix_op!(BitOr, bitor, &BitBoard, &BitBoard, |);
|
||||
|
||||
impl Not for BitBoard {
|
||||
type Output = BitBoard;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue