summaryrefslogtreecommitdiff
path: root/model/src
diff options
context:
space:
mode:
authorMike White <botahamec@outlook.com>2021-09-19 19:23:30 -0400
committerMike White <botahamec@outlook.com>2021-09-19 19:23:30 -0400
commit10438fa9ae1dc4624ebb1780238d46d4b5d3f0eb (patch)
tree7648d5088130f8c98cd2338cf158db0ca7e14ce6 /model/src
parent9644bb7aeede0635b2544192bef1069c1ad06f7d (diff)
Fixed segmentation fault
Diffstat (limited to 'model/src')
-rw-r--r--model/src/possible_moves.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/model/src/possible_moves.rs b/model/src/possible_moves.rs
index 2b8d9f3..0feee6e 100644
--- a/model/src/possible_moves.rs
+++ b/model/src/possible_moves.rs
@@ -32,6 +32,7 @@ pub struct PossibleMovesIter {
impl PossibleMovesIter {
fn add_slide_forward_left<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.forward_left_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::ForwardLeft, false));
self.length += 1;
@@ -40,6 +41,7 @@ impl PossibleMovesIter {
fn add_slide_forward_right<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.forward_right_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::ForwardRight, false));
self.length += 1;
@@ -48,6 +50,7 @@ impl PossibleMovesIter {
fn add_slide_backward_left<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.backward_left_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::BackwardLeft, false));
self.length += 1;
@@ -56,6 +59,7 @@ impl PossibleMovesIter {
fn add_slide_backward_right<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.backward_right_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::BackwardRight, false));
self.length += 1;
@@ -64,6 +68,7 @@ impl PossibleMovesIter {
fn add_jump_forward_left<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.forward_left_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::ForwardLeft, true));
self.length += 1;
@@ -72,6 +77,7 @@ impl PossibleMovesIter {
fn add_jump_forward_right<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.forward_right_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::ForwardRight, true));
self.length += 1;
@@ -80,6 +86,7 @@ impl PossibleMovesIter {
fn add_jump_backward_left<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.backward_left_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::BackwardLeft, true));
self.length += 1;
@@ -88,6 +95,7 @@ impl PossibleMovesIter {
fn add_jump_backward_right<const SQUARE: usize>(&mut self, possible_moves: PossibleMoves) {
if (possible_moves.backward_right_movers >> SQUARE) & 1 != 0 {
+ debug_assert!(self.length < POSSIBLE_MOVES_ITER_SIZE);
let ptr = unsafe { self.moves.as_mut().get_unchecked_mut(self.length) };
*ptr = MaybeUninit::new(Move::new(SQUARE, MoveDirection::BackwardRight, true));
self.length += 1;
@@ -101,7 +109,7 @@ impl Iterator for PossibleMovesIter {
type Item = Move;
fn next(&mut self) -> Option<Self::Item> {
- if self.length != self.index {
+ if self.length > self.index {
let next_move = unsafe { self.moves.as_ref().get_unchecked(self.index).assume_init() };
self.index += 1;
Some(next_move)
@@ -129,7 +137,12 @@ impl Iterator for PossibleMovesIter {
where
Self: Sized,
{
- Some(unsafe { self.moves.as_ref().get_unchecked(self.length).assume_init() })
+ Some(unsafe {
+ self.moves
+ .as_ref()
+ .get_unchecked(self.length - 1)
+ .assume_init()
+ })
}
// TODO test
@@ -139,7 +152,7 @@ impl Iterator for PossibleMovesIter {
} else {
self.index += n;
let current_move =
- unsafe { self.moves.as_ref().get_unchecked(self.length).assume_init() };
+ unsafe { self.moves.as_ref().get_unchecked(self.index).assume_init() };
self.index += 1;
Some(current_move)
}