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