1
0
Fork 0

fix promotion iterator

This commit is contained in:
Paul-Nicolas Madelaine 2025-11-13 23:10:22 +01:00
parent 3be85b7a77
commit 72dec4a5bb

View file

@ -1087,9 +1087,9 @@ impl MoveGen<Infallible> for MateMoveGenImpl {
} }
struct MoveAndPromote<I: Iterator<Item = RawMove> + ExactSizeIterator + FusedIterator> { struct MoveAndPromote<I: Iterator<Item = RawMove> + ExactSizeIterator + FusedIterator> {
role: u8,
inner: I, inner: I,
cur: std::mem::MaybeUninit<RawMove>, cur: std::mem::MaybeUninit<RawMove>,
role: Role,
} }
impl<I> MoveAndPromote<I> impl<I> MoveAndPromote<I>
where where
@ -1098,9 +1098,9 @@ where
#[inline] #[inline]
fn new(inner: I) -> Self { fn new(inner: I) -> Self {
Self { Self {
role: 1,
inner, inner,
cur: std::mem::MaybeUninit::uninit(), cur: std::mem::MaybeUninit::uninit(),
role: Role::King,
} }
} }
} }
@ -1111,16 +1111,16 @@ where
type Item = RawMove; type Item = RawMove;
#[inline] #[inline]
fn next(&mut self) -> Option<RawMove> { fn next(&mut self) -> Option<RawMove> {
if self.role == Role::King { if self.role == 1 {
self.cur.write(self.inner.next()?); self.cur.write(self.inner.next()?);
self.role = Role::Knight; self.role = 5;
} }
let raw = unsafe { self.cur.assume_init() }; let raw = unsafe { self.cur.assume_init() };
let res = RawMove { let res = RawMove {
role: self.role, role: unsafe { Role::transmute(self.role) },
..raw ..raw
}; };
self.role = unsafe { Role::transmute((self.role as u8).unchecked_add(1)) }; self.role = unsafe { self.role.unchecked_sub(1) };
Some(res) Some(res)
} }
#[inline] #[inline]
@ -1139,6 +1139,6 @@ where
{ {
#[inline] #[inline]
fn len(&self) -> usize { fn len(&self) -> usize {
unsafe { self.inner.len().unchecked_mul(4) } self.inner.len() * 4 + self.role as usize - 1
} }
} }