fix promotion iterator
This commit is contained in:
parent
3be85b7a77
commit
72dec4a5bb
1 changed files with 7 additions and 7 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue